Files
Druid/src/test/java/com/alibaba/druid/pool/ui/DruidDataSourceUIManager.java
T
2011-05-22 14:23:41 +00:00

445 lines
22 KiB
Java

package com.alibaba.druid.pool.ui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import com.alibaba.druid.pool.DruidDataSource;
public class DruidDataSourceUIManager extends JFrame {
private static final long serialVersionUID = 1L;
private DruidDataSource dataSource;
private SpringLayout layout = new SpringLayout();
private JButton btnInitDataSource = new JButton("Init Pool");
private JButton btnCloseDataSource = new JButton("Close Pool");
private JButton btnConnect = new JButton("Get Connection");
private JButton btnClose = new JButton("Close Connection");
private JPanel mainPanel = new JPanel();
private JScrollPane scrollPane = new JScrollPane(mainPanel);
private JLabel lbUrl = new JLabel("URL : ");
private JTextField txtUrl = new JTextField("jdbc:mock:");
private JLabel lbDriverClass = new JLabel("DriverClassName : ");
private JTextField txtDriverClass = new JTextField();
private JLabel lbUser = new JLabel("User : ");
private JTextField txtUser = new JTextField();
private JLabel lbPassword = new JLabel("Password : ");
private JTextField txtPassword = new JTextField();
private JLabel lbConnectionProperties = new JLabel("Connection Properties : ");
private JTextField txtConnectionProperties = new JTextField();
private JLabel lbInitialSize = new JLabel("InitialSize : ");
private JTextField txtInitialSize = new JTextField("0");
private JLabel lbMaxActive = new JLabel("MaxActive : ");
private JTextField txtMaxActive = new JTextField("8");
private JLabel lbMaxIdle = new JLabel("MaxIdle : ");
private JTextField txtMaxIdle = new JTextField("8");
private JLabel lbMinIdle = new JLabel("MinIdle : ");
private JTextField txtMinIdle = new JTextField("0");
private JLabel lbMaxWait = new JLabel("MaxWait : ");
private JTextField txtMaxWait = new JTextField("-1");
private JLabel lbMinEvictableIdleTimeMillis = new JLabel("MinEvictableIdleTimeMillis : ");
private JTextField txtMinEvictableIdleTimeMillis = new JTextField("1800000");
private DruidDataStatusPanel statusPanel = new DruidDataStatusPanel();
private JLabel lbConnecting = new JLabel("Connecting : ");
private JTextField txtConnecting = new JTextField("0");
private JLabel lbValidationQuery = new JLabel("ValidationQuery : ");
private JTextField txtValidationQuery = new JTextField("");
private AtomicInteger connectingCount = new AtomicInteger();
private Thread statusThread;
private final ConcurrentLinkedQueue<Connection> activeConnections = new ConcurrentLinkedQueue<Connection>();
public DruidDataSourceUIManager(){
this.setLayout(new BorderLayout());
this.setSize(800, 600);
Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包
Dimension screenSize = kit.getScreenSize(); // 获取屏幕的尺寸
int screenWidth = screenSize.width / 2; // 获取屏幕的宽
int screenHeight = screenSize.height / 2; // 获取屏幕的高
int height = this.getHeight();
int width = this.getWidth();
setLocation(screenWidth - width / 2, screenHeight - height / 2);
this.getContentPane().add(scrollPane, BorderLayout.CENTER);
mainPanel.setLayout(layout);
mainPanel.add(lbUrl);
layout.putConstraint(SpringLayout.NORTH, lbUrl, 10, SpringLayout.NORTH, mainPanel);
layout.putConstraint(SpringLayout.WEST, lbUrl, 10, SpringLayout.WEST, mainPanel);
layout.putConstraint(SpringLayout.EAST, lbUrl, 200, SpringLayout.WEST, lbUrl);
mainPanel.add(txtUrl);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtUrl, 0, SpringLayout.VERTICAL_CENTER, lbUrl);
layout.putConstraint(SpringLayout.WEST, txtUrl, 10, SpringLayout.EAST, lbUrl);
layout.putConstraint(SpringLayout.EAST, txtUrl, -10, SpringLayout.EAST, mainPanel);
// ////
mainPanel.add(lbDriverClass);
layout.putConstraint(SpringLayout.NORTH, lbDriverClass, 10, SpringLayout.SOUTH, lbUrl);
layout.putConstraint(SpringLayout.WEST, lbDriverClass, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbDriverClass, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtDriverClass);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtDriverClass, 0, SpringLayout.VERTICAL_CENTER, lbDriverClass);
layout.putConstraint(SpringLayout.WEST, txtDriverClass, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtDriverClass, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbUser);
layout.putConstraint(SpringLayout.NORTH, lbUser, 10, SpringLayout.SOUTH, lbDriverClass);
layout.putConstraint(SpringLayout.WEST, lbUser, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbUser, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtUser);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtUser, 0, SpringLayout.VERTICAL_CENTER, lbUser);
layout.putConstraint(SpringLayout.WEST, txtUser, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtUser, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbPassword);
layout.putConstraint(SpringLayout.NORTH, lbPassword, 10, SpringLayout.SOUTH, lbUser);
layout.putConstraint(SpringLayout.WEST, lbPassword, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbPassword, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtPassword);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtPassword, 0, SpringLayout.VERTICAL_CENTER, lbPassword);
layout.putConstraint(SpringLayout.WEST, txtPassword, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtPassword, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbConnectionProperties);
layout.putConstraint(SpringLayout.NORTH, lbConnectionProperties, 10, SpringLayout.SOUTH, lbPassword);
layout.putConstraint(SpringLayout.WEST, lbConnectionProperties, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbConnectionProperties, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtConnectionProperties);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtConnectionProperties, 0, SpringLayout.VERTICAL_CENTER, lbConnectionProperties);
layout.putConstraint(SpringLayout.WEST, txtConnectionProperties, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtConnectionProperties, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbInitialSize);
layout.putConstraint(SpringLayout.NORTH, lbInitialSize, 10, SpringLayout.SOUTH, lbConnectionProperties);
layout.putConstraint(SpringLayout.WEST, lbInitialSize, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbInitialSize, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtInitialSize);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtInitialSize, 0, SpringLayout.VERTICAL_CENTER, lbInitialSize);
layout.putConstraint(SpringLayout.WEST, txtInitialSize, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtInitialSize, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbMaxActive);
layout.putConstraint(SpringLayout.NORTH, lbMaxActive, 10, SpringLayout.SOUTH, lbInitialSize);
layout.putConstraint(SpringLayout.WEST, lbMaxActive, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbMaxActive, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtMaxActive);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtMaxActive, 0, SpringLayout.VERTICAL_CENTER, lbMaxActive);
layout.putConstraint(SpringLayout.WEST, txtMaxActive, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtMaxActive, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbMaxIdle);
layout.putConstraint(SpringLayout.NORTH, lbMaxIdle, 10, SpringLayout.SOUTH, lbMaxActive);
layout.putConstraint(SpringLayout.WEST, lbMaxIdle, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbMaxIdle, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtMaxIdle);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtMaxIdle, 0, SpringLayout.VERTICAL_CENTER, lbMaxIdle);
layout.putConstraint(SpringLayout.WEST, txtMaxIdle, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtMaxIdle, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbMinIdle);
layout.putConstraint(SpringLayout.NORTH, lbMinIdle, 10, SpringLayout.SOUTH, lbMaxIdle);
layout.putConstraint(SpringLayout.WEST, lbMinIdle, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbMinIdle, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtMinIdle);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtMinIdle, 0, SpringLayout.VERTICAL_CENTER, lbMinIdle);
layout.putConstraint(SpringLayout.WEST, txtMinIdle, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtMinIdle, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbMaxWait);
layout.putConstraint(SpringLayout.NORTH, lbMaxWait, 10, SpringLayout.SOUTH, lbMinIdle);
layout.putConstraint(SpringLayout.WEST, lbMaxWait, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbMaxWait, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtMaxWait);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtMaxWait, 0, SpringLayout.VERTICAL_CENTER, lbMaxWait);
layout.putConstraint(SpringLayout.WEST, txtMaxWait, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtMaxWait, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbMinEvictableIdleTimeMillis);
layout.putConstraint(SpringLayout.NORTH, lbMinEvictableIdleTimeMillis, 10, SpringLayout.SOUTH, lbMaxWait);
layout.putConstraint(SpringLayout.WEST, lbMinEvictableIdleTimeMillis, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbMinEvictableIdleTimeMillis, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtMinEvictableIdleTimeMillis);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtMinEvictableIdleTimeMillis, 0, SpringLayout.VERTICAL_CENTER, lbMinEvictableIdleTimeMillis);
layout.putConstraint(SpringLayout.WEST, txtMinEvictableIdleTimeMillis, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtMinEvictableIdleTimeMillis, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(lbValidationQuery);
layout.putConstraint(SpringLayout.NORTH, lbValidationQuery, 10, SpringLayout.SOUTH, lbMinEvictableIdleTimeMillis);
layout.putConstraint(SpringLayout.WEST, lbValidationQuery, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbValidationQuery, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtValidationQuery);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtValidationQuery, 0, SpringLayout.VERTICAL_CENTER, lbValidationQuery);
layout.putConstraint(SpringLayout.WEST, txtValidationQuery, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtValidationQuery, 0, SpringLayout.EAST, txtUrl);
// ////
mainPanel.add(btnInitDataSource);
layout.putConstraint(SpringLayout.NORTH, btnInitDataSource, 10, SpringLayout.SOUTH, lbValidationQuery);
layout.putConstraint(SpringLayout.WEST, btnInitDataSource, 0, SpringLayout.WEST, lbUrl);
btnInitDataSource.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
init_actionPerformed(e);
}
});
mainPanel.add(btnCloseDataSource);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, btnCloseDataSource, 0, SpringLayout.VERTICAL_CENTER, btnInitDataSource);
layout.putConstraint(SpringLayout.WEST, btnCloseDataSource, 10, SpringLayout.EAST, btnInitDataSource);
btnCloseDataSource.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
closeDataSource_actionPerformed(e);
}
});
btnCloseDataSource.setEnabled(false);
mainPanel.add(btnConnect);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, btnConnect, 0, SpringLayout.VERTICAL_CENTER, btnInitDataSource);
layout.putConstraint(SpringLayout.WEST, btnConnect, 10, SpringLayout.EAST, btnCloseDataSource);
btnConnect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
connect_actionPerformed(e);
}
});
mainPanel.add(btnClose);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, btnClose, 0, SpringLayout.VERTICAL_CENTER, btnInitDataSource);
layout.putConstraint(SpringLayout.WEST, btnClose, 10, SpringLayout.EAST, btnConnect);
btnClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Connection conn = activeConnections.poll();
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
});
mainPanel.add(statusPanel);
layout.putConstraint(SpringLayout.NORTH, statusPanel, 10, SpringLayout.SOUTH, btnInitDataSource);
layout.putConstraint(SpringLayout.SOUTH, statusPanel, 90, SpringLayout.NORTH, statusPanel);
layout.putConstraint(SpringLayout.WEST, statusPanel, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, txtMaxWait, 0, SpringLayout.EAST, mainPanel);
// ////
mainPanel.add(lbConnecting);
layout.putConstraint(SpringLayout.NORTH, lbConnecting, 10, SpringLayout.SOUTH, statusPanel);
layout.putConstraint(SpringLayout.WEST, lbConnecting, 0, SpringLayout.WEST, lbUrl);
layout.putConstraint(SpringLayout.EAST, lbConnecting, 0, SpringLayout.EAST, lbUrl);
mainPanel.add(txtConnecting);
layout.putConstraint(SpringLayout.VERTICAL_CENTER, txtConnecting, 0, SpringLayout.VERTICAL_CENTER, lbConnecting);
layout.putConstraint(SpringLayout.WEST, txtConnecting, 0, SpringLayout.WEST, txtUrl);
layout.putConstraint(SpringLayout.EAST, txtConnecting, 100, SpringLayout.WEST, txtConnecting);
txtConnecting.setEditable(false);
}
public void connect_actionPerformed(ActionEvent e) {
Thread connectThread = new Thread() {
public void run() {
try {
connectingCount.incrementAndGet();
txtConnecting.setText(Integer.toString(connectingCount.get()));
Connection conn = dataSource.getConnection();
connectingCount.decrementAndGet();
txtConnecting.setText(Integer.toString(connectingCount.get()));
activeConnections.add(conn);
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
connectThread.start();
}
public void closeDataSource_actionPerformed(ActionEvent e) {
dataSource.close();
txtUrl.setEnabled(true);
txtDriverClass.setEnabled(true);
txtConnectionProperties.setEnabled(true);
txtUser.setEnabled(true);
txtPassword.setEnabled(true);
txtInitialSize.setEnabled(true);
txtMaxActive.setEnabled(true);
txtMaxIdle.setEnabled(true);
txtMinIdle.setEnabled(true);
txtMaxWait.setEnabled(true);
txtMinEvictableIdleTimeMillis.setEnabled(true);
btnInitDataSource.setEnabled(true);
btnCloseDataSource.setEnabled(false);
statusThread.interrupt();
}
public void init_actionPerformed(ActionEvent e) {
try {
dataSource = new DruidDataSource();
dataSource.setUrl(txtUrl.getText().trim());
dataSource.setDriverClassName(txtDriverClass.getText().trim());
dataSource.setConnectionProperties(txtConnectionProperties.getText().trim());
dataSource.setUsername(txtUser.getText().trim());
dataSource.setPassword(txtPassword.getText().trim());
dataSource.setInitialSize(Integer.parseInt(txtInitialSize.getText().trim()));
dataSource.setMaxActive(Integer.parseInt(txtMaxActive.getText().trim()));
dataSource.setMaxIdle(Integer.parseInt(txtMaxIdle.getText().trim()));
dataSource.setMinIdle(Integer.parseInt(txtMinIdle.getText().trim()));
dataSource.setMaxWait(Integer.parseInt(txtMaxWait.getText().trim()));
dataSource.setMinEvictableIdleTimeMillis(Integer.parseInt(txtMinEvictableIdleTimeMillis.getText().trim()));
Connection conn = dataSource.getConnection();
conn.close();
txtDriverClass.setText(dataSource.getDriverClassName());
txtMinEvictableIdleTimeMillis.setText(Long.toString(dataSource.getMinEvictableIdleTimeMillis()));
txtUrl.setEnabled(false);
txtDriverClass.setEnabled(false);
txtConnectionProperties.setEnabled(false);
txtUser.setEnabled(false);
txtPassword.setEnabled(false);
txtInitialSize.setEnabled(false);
txtMaxActive.setEnabled(false);
txtMaxIdle.setEnabled(false);
txtMinIdle.setEnabled(false);
txtMaxWait.setEnabled(false);
txtMinEvictableIdleTimeMillis.setEnabled(false);
btnInitDataSource.setEnabled(false);
btnCloseDataSource.setEnabled(true);
statusThread = new Thread("Watch Status") {
public void run() {
for (;;) {
statusPanel.set("CreateCount", dataSource.getCreateCount());
statusPanel.set("CreateErrorCount", dataSource.getCreateErrorCount());
statusPanel.set("CreateTimespanMillis", dataSource.getCreateTimespanMillis());
statusPanel.set("CreateTimespanNano", dataSource.getCreateTimespanNano());
statusPanel.set("DestroyCount", dataSource.getDestroyCount());
statusPanel.set("ConnectCount", dataSource.getConnectCount());
statusPanel.set("ConnectErrorCount", dataSource.getConnectErrorCount());
statusPanel.set("CloseCount", dataSource.getCloseCount());
statusPanel.set("RecycleCount", dataSource.getRecycleCount());
statusPanel.set("ActiveCount", dataSource.getActiveCount());
statusPanel.set("PoolingCount", dataSource.getPoolingCount());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
break;
}
}
}
};
statusThread.start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
DruidDataSourceUIManager manager = new DruidDataSourceUIManager();
manager.pack();
manager.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
manager.setVisible(true);
}
});
}
}