Mega Code Archive

 
Categories / Java / Database SQL JDBC
 

Ejb and JDBC

/* MySQL and Java Developer's Guide Mark Matthews, Jim Cole, Joseph D. Gradecki Publisher Wiley, Published February 2003,  ISBN 0471269239 */ import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.border.TitledBorder; public class TaskManager extends JFrame {   TaskManager(Tasks taskList) {     super("MySQL-Java Task Manager");     this.taskList = taskList;     buildGui();     pack();     setVisible(true);   }   private void buildGui() {     fileMenu.add(fileExit);     menuBar.add(fileMenu);     setJMenuBar(menuBar);     frameContainer.setLayout(new BorderLayout());     frameContainer.add(new TaskPanel(taskList));     setContentPane(frameContainer);     addWindowListener(new WindowHandler());     fileExit.addActionListener(new MenuHandler());   }   private JPanel frameContainer = new JPanel();   private JMenuBar menuBar = new JMenuBar();   private JMenu fileMenu = new JMenu("File");   private JMenuItem fileExit = new JMenuItem("Exit");   private Tasks taskList;   class WindowHandler extends WindowAdapter {     public void windowClosing(WindowEvent we) {       System.exit(0);     }   }   class MenuHandler implements ActionListener {     public void actionPerformed(ActionEvent ae) {       if (ae.getActionCommand().equals("Exit")) {         System.exit(0);       }     }   }   public static void main(String[] args) {     String configFileName = "tasks.conf";     if (args.length == 1) {       configFileName = args[0];     }     File configFile = new File(configFileName);     if (!configFile.exists() || !configFile.canRead()) {       System.err.println("Can't read config file '" + configFileName           + "'");       System.exit(1);     }     FileReader configReader = null;     try {       configReader = new FileReader(configFile);     } catch (FileNotFoundException fnfX) {     }     Tasks taskList = new Tasks(configReader);     try {       configReader.close();     } catch (IOException ioX) {     }     TaskManager ex = new TaskManager(taskList);   } } interface TaskDelegate {   public boolean execute(Connection conn); } class TaskPanel extends JPanel {   public TaskPanel(Tasks taskList) {     this.taskList = taskList;     setLayout(new BorderLayout());     connPane = new ConnectionPane();     connPane.setBorder(new TitledBorder("Connection Data"));     taskPane = new TaskPane();     taskPane.setBorder(new TitledBorder("Tasks"));     add(connPane, BorderLayout.NORTH);     add(taskPane, BorderLayout.SOUTH);   }   private Tasks taskList;   private ConnectionPane connPane;   private TaskPane taskPane;   class ConnectionPane extends JPanel {     ConnectionPane() {       setLayout(new GridLayout(5, 2));       add(hostNameLabel);       add(hostNameField);       add(dbNameLabel);       add(dbNameField);       add(portNumberLabel);       add(portNumberField);       add(usernameLabel);       add(usernameField);       add(passwordLabel);       add(passwordField);     }     ConnectionData getConnectionData() {       String password = new String(passwordField.getPassword());       ConnectionData data = new ConnectionData(hostNameField.getText(),           dbNameField.getText(), portNumberField.getText(),           usernameField.getText(), password);       return (data);     }     private JLabel hostNameLabel = new JLabel("Host Name:");     private JLabel dbNameLabel = new JLabel("Database Name:");     private JLabel portNumberLabel = new JLabel("Port Number:");     private JLabel usernameLabel = new JLabel("Username:");     private JLabel passwordLabel = new JLabel("Password:");     private JTextField hostNameField = new JTextField(20);     private JTextField dbNameField = new JTextField(20);     private JTextField portNumberField = new JTextField("3306", 6);     private JTextField usernameField = new JTextField(20);     private JPasswordField passwordField = new JPasswordField(20);   }   class TaskPane extends JPanel {     TaskPane() {       int taskCount = TaskPanel.this.taskList.getTaskCount();       int rows = ((taskCount % COLS) == 0) ? (taskCount / COLS)           : ((taskCount / COLS) + 1);       setLayout(new GridLayout(rows, COLS));       taskButtons = new JButton[taskCount];       TaskHandler handler = new TaskHandler();       Enumeration tasks = taskList.getTasks();       int task = 0;       while (tasks.hasMoreElements()) {         TaskDefinition taskDef = (TaskDefinition) (tasks.nextElement());         if (!taskDef.isEnabled()) {           continue;         }         String taskName = taskDef.getName();         taskButtons[task] = new JButton(taskName);         taskButtons[task].addActionListener(handler);         add(taskButtons[task++]);       }     }     private JButton[] taskButtons;     final static int COLS = 2;   }   class TaskHandler implements ActionListener {     public void actionPerformed(ActionEvent ae) {       ConnectionData connData = connPane.getConnectionData();       Connection conn = connData.buildConnection();       if (conn == null) {         String msg = "Could not build connection. Check provided\n"             + "connection data and verify server availability.";         JOptionPane.showMessageDialog(TaskPanel.this, msg,             "Connection Failure", JOptionPane.ERROR_MESSAGE);         return;       }       String taskName = ae.getActionCommand();       Enumeration tasks = taskList.getTasks();       boolean dispatched = false;       while (tasks.hasMoreElements()) {         TaskDefinition taskDef = (TaskDefinition) (tasks.nextElement());         if (!taskDef.isEnabled()) {           continue;         }         if (taskName.equals(taskDef.getName())) {           try {             Class delegateClass = taskDef.getDelegate();             Object delegateObject = delegateClass.newInstance();             TaskDelegate delegate = (TaskDelegate) delegateObject;             dispatched = delegate.execute(conn);             if (!dispatched) {               String msg = "Could not execute task: "                   + taskDef.getName();               JOptionPane.showMessageDialog(TaskPanel.this, msg,                   "Task Failure", JOptionPane.ERROR_MESSAGE);             }           } catch (InstantiationException iX) {             String msg = "Failed to instantiate delegate for task: "                 + taskDef.getName();             JOptionPane.showMessageDialog(TaskPanel.this, msg,                 "Task Failure", JOptionPane.ERROR_MESSAGE);           } catch (IllegalAccessException iaX) {             String msg = "Cound not access delegate for task: "                 + taskDef.getName();             JOptionPane.showMessageDialog(TaskPanel.this, msg,                 "Task Failure", JOptionPane.ERROR_MESSAGE);           }           break;         }       }       if (!dispatched) {         try {           conn.close();         } catch (SQLException sqlX) {         }       }     }   } } class ConnectionData {   public ConnectionData(String hostName, String dbName, String port,       String username, String password) {     this.hostName = hostName;     this.dbName = dbName;     this.port = port;     this.username = username;     this.password = password;   }   public String getUsername() {     return (username);   }   public String getPassword() {     return (password);   }   public String getUrl() {     String url = "jdbc:mysql://" + hostName + ":" + port + "/" + dbName;     return (url);   }   public Connection buildConnection() {     try {       Class.forName("com.mysql.jdbc.Driver");     } catch (ClassNotFoundException cnfX) {       cnfX.printStackTrace(System.err);       return (null);     }     try {       Connection conn = DriverManager.getConnection(getUrl(),           getUsername(), getPassword());       return (conn);     } catch (SQLException sqlX) {       System.out.println(SqlExceptionReader.readException(sqlX));       return (null);     }   }   private String hostName;   private String dbName;   private String port;   private String username;   private String password; } class SqlExceptionReader {   public static String readException(SQLException sqlX) {     StringBuffer msg = new StringBuffer(1024);     SQLException nextX;     int exceptionNumber = 0;     do {       ++exceptionNumber;       msg.append("Exception " + exceptionNumber + ": \n");       msg.append("  Message: " + sqlX.getMessage() + "\n");       msg.append("  State  : " + sqlX.getSQLState() + "\n");       msg.append("  Code   : " + sqlX.getErrorCode() + "\n");     } while ((nextX = sqlX.getNextException()) != null);     return (msg.toString());   } } class Tasks {   public Tasks(InputStreamReader taskS) {     readTasks(taskS);   }   public int getTaskCount() {     return (taskDefs.size());   }   public Enumeration getTasks() {     return (taskDefs.elements());   }   private void readTasks(InputStreamReader taskS) {     try {       BufferedReader reader = new BufferedReader(taskS);       String taskLine;       while ((taskLine = reader.readLine()) != null) {         addTaskDefinition(taskLine);       }     } catch (IOException ioX) {       System.err.println("Failed to fully parse task file: " + ioX);     }   }   private void addTaskDefinition(String taskLine) {     StringTokenizer taskTok = new StringTokenizer(taskLine, DELIM);     if (taskTok.countTokens() != TOKEN_NUM) {       System.err.println("Invalid task definition: " + taskLine);       return;     }     Class taskClass = null;     String taskClassName = taskTok.nextToken();     try {       taskClass = Class.forName(taskClassName);     } catch (ClassNotFoundException cnfX) {       System.err.println("Class '" + taskClassName + "' not found: "           + cnfX);       return;     }     boolean taskEnabled = false;     if (taskTok.nextToken().equalsIgnoreCase("enabled")) {       taskEnabled = true;     }     String taskName = taskTok.nextToken();     TaskDefinition def = new TaskDefinition(taskName, taskClass,         taskEnabled);     taskDefs.add(def);   }   private Vector taskDefs = new Vector();   final static int TOKEN_NUM = 3;   final static String DELIM = ":"; } class TaskDefinition {   public TaskDefinition(String name, Class delegate, boolean enabled) {     this.name = name;     this.delegate = delegate;     this.enabled = enabled;   }   public String getName() {     return (name);   }   public Class getDelegate() {     return (delegate);   }   public boolean isEnabled() {     return (enabled);   }   private String name;   private Class delegate;   private boolean enabled; }                     JdbcEjb.zip( 35 k)