📄 jtpcc.java
字号:
/*
* jTPCC - Open Source Java implementation of a TPC-C like benchmark
*
* Copyright (C) 2003, Raul Barbosa
* Copyright (C) 2004-2006, Denis Lussier
*
*/
import java.io.*;
import java.sql.*;
import java.util.*;
import java.text.*;
import javax.swing.*;
import javax.swing.border.*;
import client.JOutputArea;
import client.jTPCCConfig;
import java.awt.*;
import java.awt.event.*;
public class jTPCC extends JFrame implements jTPCCConfig, ActionListener, WindowListener
{
private JTabbedPane jTabbedPane;
private JPanel jPanelControl, jPanelConfigSwitch, jPanelTerminalOutputs, jPanelOutputSwitch;
private JButton jButtonNextTerminal, jButtonPreviousTerminal;
private JOutputArea jOutputAreaControl, jOutputAreaErrors;
private JLabel jLabelInformation, jPanelTerminalOutputsLabel;
private ImageIcon imageIconDot;
private int currentlyDisplayedTerminal;
private JButton jButtonSelectDatabase, jButtonSelectTerminals, jButtonSelectControls, jButtonSelectWeights;
private JPanel jPanelConfigDatabase, jPanelConfigTerminals, jPanelConfigControls, jPanelConfigWeights;
private Border jPanelConfigSwitchBorder;
private JTextField jTextFieldDatabase, jTextFieldUsername, jTextFieldPassword, jTextFieldDriver, jTextFieldNumTerminals, jTextFieldTransactionsPerTerminal, jTextFieldNumWarehouses, jTextFieldMinutes;
private JButton jButtonCreateTerminals, jButtonStartTransactions, jButtonStopTransactions;
private JTextField paymentWeight, orderStatusWeight, deliveryWeight, stockLevelWeight;
private JRadioButton jRadioButtonTime, jRadioButtonNum;
private JCheckBox jCheckBoxDebugMessages;
private jTPCCTerminal[] terminals;
private JOutputArea[] terminalOutputAreas;
private String[] terminalNames;
private boolean terminalsBlockingExit = false;
private Random random;
private long terminalsStarted = 0, sessionCount = 0, transactionCount;
private long newOrderCounter, sessionStartTimestamp, sessionEndTimestamp, sessionNextTimestamp=0, sessionNextKounter=0;
private long sessionEndTargetTime = -1, fastNewOrderCounter, recentTpmC=0;
private boolean signalTerminalsRequestEndSent = false, databaseDriverLoaded = false;
private FileOutputStream fileOutputStream;
private PrintStream printStreamReport;
private String sessionStart, sessionEnd;
public static void main(String args[])
{
new jTPCC();
}
public jTPCC()
{
super("BenchmarkSQL v" + JTPCCVERSION);
// load the ini file
Properties ini = new Properties();
// try {
// ini.load( new FileInputStream(System.getProperty("prop")));
//
// } catch (IOException e) {
// System.out.println("could not load properties file");
// }
// display the values we need
// System.out.println("driver=" + ini.getProperty("driver"));
// System.out.println("conn=" + ini.getProperty("conn"));
// System.out.println("user=" + ini.getProperty("user"));
// System.out.println("password=******");
this.random = new Random(System.currentTimeMillis());
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
this.setSize(800, 680);
this.setLocation(112, 30);
this.setIconImage((new ImageIcon("images/icon.gif")).getImage());
this.addWindowListener((WindowListener)this);
imageIconDot = new ImageIcon("images/dot.gif");
jPanelControl = new JPanel();
jPanelControl.setLayout(new BorderLayout());
JPanel jPanelConfig = new JPanel();
jPanelConfig.setLayout(new BorderLayout());
jPanelControl.add(jPanelConfig, BorderLayout.NORTH);
JPanel jPanelConfigSelect = new JPanel();
jPanelConfigSelect.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), " Options ", TitledBorder.CENTER, TitledBorder.TOP));
GridLayout jPanelConfigSelectLayout = new GridLayout(4, 1);
jPanelConfigSelectLayout.setVgap(10);
jPanelConfigSelect.setLayout(jPanelConfigSelectLayout);
jButtonSelectDatabase = new JButton("Database");
jButtonSelectDatabase.addActionListener(this);
jPanelConfigSelect.add(jButtonSelectDatabase);
jButtonSelectTerminals = new JButton("Terminals");
jButtonSelectTerminals.addActionListener(this);
jPanelConfigSelect.add(jButtonSelectTerminals);
jButtonSelectWeights = new JButton("Weights");
jButtonSelectWeights.addActionListener(this);
jPanelConfigSelect.add(jButtonSelectWeights);
jButtonSelectControls = new JButton("Controls");
jButtonSelectControls.addActionListener(this);
jPanelConfigSelect.add(jButtonSelectControls);
jPanelConfig.add(jPanelConfigSelect, BorderLayout.WEST);
jPanelConfigSwitch = new JPanel();
jPanelConfig.add(jPanelConfigSwitch, BorderLayout.CENTER);
jPanelConfigSwitchBorder = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "", TitledBorder.CENTER, TitledBorder.TOP);
jPanelConfigSwitch.setBorder(jPanelConfigSwitchBorder);
jPanelConfigDatabase = new JPanel();
jPanelConfigDatabase.setLayout(new GridLayout(3, 1));
JPanel jPanelConfigDatabase3 = new JPanel();
jPanelConfigDatabase.add(jPanelConfigDatabase3);
jPanelConfigDatabase3.add(new JLabel("URL"));
jTextFieldDatabase = new JTextField(ini.getProperty("conn", defaultDatabase));
jTextFieldDatabase.setPreferredSize(new Dimension(275, (int)jTextFieldDatabase.getPreferredSize().getHeight()));
jPanelConfigDatabase3.add(jTextFieldDatabase);
jPanelConfigDatabase3.add(new JLabel(" Driver"));
jTextFieldDriver = new JTextField(ini.getProperty("driver", defaultDriver));
jTextFieldDriver.setPreferredSize(new Dimension(200, (int)jTextFieldDriver.getPreferredSize().getHeight()));
jPanelConfigDatabase3.add(jTextFieldDriver);
jPanelConfigDatabase.add(new JPanel());
JPanel jPanelConfigDatabase2 = new JPanel();
jPanelConfigDatabase.add(jPanelConfigDatabase2);
jPanelConfigDatabase2.add(new JLabel("Username"));
jTextFieldUsername = new JTextField(ini.getProperty("user", defaultUsername));
jTextFieldUsername.setPreferredSize(new Dimension(80, (int)jTextFieldUsername.getPreferredSize().getHeight()));
jPanelConfigDatabase2.add(jTextFieldUsername);
jPanelConfigDatabase2.add(new JLabel(" Password"));
jTextFieldPassword = new JPasswordField(ini.getProperty("password", defaultPassword));
jTextFieldPassword.setPreferredSize(new Dimension(80, (int)jTextFieldPassword.getPreferredSize().getHeight()));
jPanelConfigDatabase2.add(jTextFieldPassword);
jPanelConfigTerminals = new JPanel();
jPanelConfigTerminals.setLayout(new GridLayout(2, 1));
JPanel jPanelConfigTerminals1 = new JPanel();
jPanelConfigTerminals.add(jPanelConfigTerminals1);
jPanelConfigTerminals1.add(new JLabel("Number of Terminals"));
jTextFieldNumTerminals = new JTextField(defaultNumTerminals);
jTextFieldNumTerminals.setPreferredSize(new Dimension(28, (int)jTextFieldNumTerminals.getPreferredSize().getHeight()));
jPanelConfigTerminals1.add(jTextFieldNumTerminals);
jPanelConfigTerminals1.add(new JLabel(" Warehouses"));
jTextFieldNumWarehouses = new JTextField(defaultNumWarehouses);
jTextFieldNumWarehouses.setPreferredSize(new Dimension(28, (int)jTextFieldNumWarehouses.getPreferredSize().getHeight()));
jPanelConfigTerminals1.add(jTextFieldNumWarehouses);
jPanelConfigTerminals1.add(new JLabel(" Debug Messages"));
jCheckBoxDebugMessages = new JCheckBox("", defaultDebugMessages);
jPanelConfigTerminals1.add(jCheckBoxDebugMessages);
JPanel jPanelConfigTerminals2 = new JPanel();
jPanelConfigTerminals.add(jPanelConfigTerminals2);
jPanelConfigTerminals2.add(new JLabel("Execute"));
JPanel jPanelConfigTerminals21 = new JPanel();
jPanelConfigTerminals21.setLayout(new GridLayout(2, 1));
jPanelConfigTerminals2.add(jPanelConfigTerminals21);
jTextFieldMinutes = new JTextField(defaultMinutes);
jTextFieldMinutes.setPreferredSize(new Dimension(35, (int)jTextFieldMinutes.getPreferredSize().getHeight()));
jPanelConfigTerminals21.add(jTextFieldMinutes);
jTextFieldTransactionsPerTerminal = new JTextField(defaultTransactionsPerTerminal);
jTextFieldTransactionsPerTerminal.setPreferredSize(new Dimension(35, (int)jTextFieldTransactionsPerTerminal.getPreferredSize().getHeight()));
jPanelConfigTerminals21.add(jTextFieldTransactionsPerTerminal);
JPanel jPanelConfigTerminals22 = new JPanel();
jPanelConfigTerminals22.setLayout(new GridLayout(2, 1));
jPanelConfigTerminals2.add(jPanelConfigTerminals22);
ButtonGroup buttonGroupTimeNum = new ButtonGroup();
jRadioButtonTime = new JRadioButton("Minutes", defaultRadioTime);
buttonGroupTimeNum.add(jRadioButtonTime);
jPanelConfigTerminals22.add(jRadioButtonTime);
jRadioButtonNum = new JRadioButton("Transactions per terminal", !defaultRadioTime);
buttonGroupTimeNum.add(jRadioButtonNum);
jPanelConfigTerminals22.add(jRadioButtonNum);
jPanelConfigWeights = new JPanel();
jPanelConfigWeights.setLayout(new GridLayout(2, 1));
jPanelConfigWeights.add(new JPanel());
JPanel jPanelConfigWeights1 = new JPanel();
jPanelConfigWeights.add(jPanelConfigWeights1);
jPanelConfigWeights1.add(new JLabel("Payment %"));
paymentWeight = new JTextField(defaultPaymentWeight);
paymentWeight.setPreferredSize(new Dimension(28, (int)paymentWeight.getPreferredSize().getHeight()));
jPanelConfigWeights1.add(paymentWeight);
jPanelConfigWeights1.add(new JLabel(" Order-Status %"));
orderStatusWeight = new JTextField(defaultOrderStatusWeight);
orderStatusWeight.setPreferredSize(new Dimension(28, (int)orderStatusWeight.getPreferredSize().getHeight()));
jPanelConfigWeights1.add(orderStatusWeight);
jPanelConfigWeights1.add(new JLabel(" Delivery %"));
deliveryWeight = new JTextField(defaultDeliveryWeight);
deliveryWeight.setPreferredSize(new Dimension(28, (int)deliveryWeight.getPreferredSize().getHeight()));
jPanelConfigWeights1.add(deliveryWeight);
jPanelConfigWeights1.add(new JLabel(" Stock-Level %"));
stockLevelWeight = new JTextField(defaultStockLevelWeight);
stockLevelWeight.setPreferredSize(new Dimension(28, (int)stockLevelWeight.getPreferredSize().getHeight()));
jPanelConfigWeights1.add(stockLevelWeight);
jPanelConfigControls = new JPanel();
jPanelConfigControls.setLayout(new GridLayout(2, 1));
jPanelConfigControls.add(new JPanel());
JPanel jPanelConfigControls1 = new JPanel();
jPanelConfigControls.add(jPanelConfigControls1);
jButtonCreateTerminals = new JButton("Create Terminals");
jButtonCreateTerminals.setEnabled(true);
jButtonCreateTerminals.addActionListener(this);
jPanelConfigControls1.add(jButtonCreateTerminals);
jButtonStartTransactions = new JButton("Start Transactions");
jButtonStartTransactions.setEnabled(false);
jButtonStartTransactions.addActionListener(this);
jPanelConfigControls1.add(jButtonStartTransactions);
jButtonStopTransactions = new JButton("Stop Transactions");
jButtonStopTransactions.setEnabled(false);
jButtonStopTransactions.addActionListener(this);
jPanelConfigControls1.add(jButtonStopTransactions);
setActiveConfigPanel(jPanelConfigDatabase, "Database");
jPanelTerminalOutputs = new JPanel();
jButtonPreviousTerminal = new JButton("< Previous");
jButtonPreviousTerminal.addActionListener(this);
jButtonNextTerminal = new JButton("Next >");
jButtonNextTerminal.addActionListener(this);
jPanelTerminalOutputs.setLayout(new BorderLayout());
JPanel jPanelTerminalOutputs1 = new JPanel();
jPanelTerminalOutputsLabel = new JLabel(" ");
jPanelTerminalOutputs1.add(jButtonPreviousTerminal);
jPanelTerminalOutputs1.add(jPanelTerminalOutputsLabel);
jPanelTerminalOutputs1.add(jButtonNextTerminal);
jPanelTerminalOutputs.add(jPanelTerminalOutputs1, BorderLayout.NORTH);
jPanelOutputSwitch = new JPanel();
jPanelOutputSwitch.setLayout(new BorderLayout());
jPanelOutputSwitch.add(new JOutputArea());
jPanelTerminalOutputs.add(jPanelOutputSwitch, BorderLayout.CENTER);
jOutputAreaErrors = new JOutputArea();
jOutputAreaControl = new JOutputArea
("+-------------------------------------------------------------+\n" +
" BenchmarkSQL v" + JTPCCVERSION + " (using JDBC Prepared Statements)\n" +
"+-------------------------------------------------------------+\n" +
" (c) 2003, Raul Barbosa (SourceForge.Net 'jTPCC' project)\n" +
" (c) 2004-2006, Denis Lussier\n" +
"+-------------------------------------------------------------+\n\n");
jPanelControl.add(jOutputAreaControl, BorderLayout.CENTER);
jLabelInformation = new JLabel("", JLabel.CENTER);
updateInformationLabel();
jTabbedPane = new JTabbedPane();
jTabbedPane.addTab("Control", imageIconDot, jPanelControl);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(jTabbedPane, BorderLayout.CENTER);
this.getContentPane().add(jLabelInformation, BorderLayout.SOUTH);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
updateInformationLabel();
if(e.getSource() == jButtonCreateTerminals)
{
removeAllTerminals();
stopInputAreas();
fastNewOrderCounter = 0;
try
{
String driver = jTextFieldDriver.getText();
jOutputAreaControl.println("");
printMessage("Loading database driver: \'" + driver + "\'...");
Class.forName(driver);
databaseDriverLoaded = true;
}
catch(Exception ex)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -