📄 jtpcc.java
字号:
{
errorMessage("Unable to load the database driver!");
databaseDriverLoaded = false;
restartInputAreas();
}
if(databaseDriverLoaded)
{
System.out.println("databaseDriverLoaded");
try
{
boolean limitIsTime = jRadioButtonTime.isSelected();
int numTerminals = -1, transactionsPerTerminal = -1, numWarehouses = -1;
int paymentWeightValue = -1, orderStatusWeightValue = -1, deliveryWeightValue = -1, stockLevelWeightValue = -1;
long executionTimeMillis = -1;
jOutputAreaControl.println("");
System.out.println("Test1");
try
{
numWarehouses = Integer.parseInt(jTextFieldNumWarehouses.getText());
if(numWarehouses <= 0)
throw new NumberFormatException();
}
catch(NumberFormatException e1)
{
errorMessage("Invalid number of warehouses!");
throw new Exception();
}
try
{
numTerminals = Integer.parseInt(jTextFieldNumTerminals.getText());
if(numTerminals <= 0 || numTerminals > 10*numWarehouses)
throw new NumberFormatException();
}
catch(NumberFormatException e1)
{
errorMessage("Invalid number of terminals!");
throw new Exception();
}
boolean debugMessages = (jCheckBoxDebugMessages.getSelectedObjects() != null);
if(limitIsTime)
{
try
{
executionTimeMillis = Long.parseLong(jTextFieldMinutes.getText()) * 60000;
if(executionTimeMillis <= 0)
throw new NumberFormatException();
}
catch(NumberFormatException e1)
{
errorMessage("Invalid number of minutes!");
throw new Exception();
}
System.out.println("Test2");
}
else
{
try
{
transactionsPerTerminal = Integer.parseInt(jTextFieldTransactionsPerTerminal.getText());
if(transactionsPerTerminal <= 0)
throw new NumberFormatException();
}
catch(NumberFormatException e1)
{
errorMessage("Invalid number of transactions per terminal!");
throw new Exception();
}
}
try
{
paymentWeightValue = Integer.parseInt(paymentWeight.getText());
orderStatusWeightValue = Integer.parseInt(orderStatusWeight.getText());
deliveryWeightValue = Integer.parseInt(deliveryWeight.getText());
stockLevelWeightValue = Integer.parseInt(stockLevelWeight.getText());
if(paymentWeightValue < 0 || orderStatusWeightValue < 0 || deliveryWeightValue < 0 || stockLevelWeightValue < 0)
throw new NumberFormatException();
}
catch(NumberFormatException e1)
{
errorMessage("Invalid number in mix percentage!");
throw new Exception();
}
if(paymentWeightValue + orderStatusWeightValue + deliveryWeightValue + stockLevelWeightValue > 100)
{
errorMessage("Sum of mix percentage parameters exceeds 100%!");
throw new Exception();
}
newOrderCounter = 0;
printMessage("Session #" + (++sessionCount) + " started!");
if(!limitIsTime)
printMessage("Creating " + numTerminals + " terminal(s) with " + transactionsPerTerminal + " transaction(s) per terminal...");
else
printMessage("Creating " + numTerminals + " terminal(s) with " + (executionTimeMillis/60000) + " minute(s) of execution...");
printMessage("Transaction Weights: " + (100 - (paymentWeightValue + orderStatusWeightValue + deliveryWeightValue + stockLevelWeightValue)) + "% New-Order, " + paymentWeightValue + "% Payment, " + orderStatusWeightValue + "% Order-Status, " + deliveryWeightValue + "% Delivery, " + stockLevelWeightValue + "% Stock-Level");
String reportFileName = reportFilePrefix + getFileNameSuffix() + ".txt";
//这里可能会有问题的,所以一定要处理一下。
System.out.println(reportFileName +"report 文件路径");
System.out.println(reportFileName);
fileOutputStream = new FileOutputStream(reportFileName);
System.out.println("测试一下");
printStreamReport = new PrintStream(fileOutputStream);
printStreamReport.println("Number of Terminals\t" + numTerminals);
printStreamReport.println("\nTerminal\tHome Warehouse");
printMessage("A complete report of the transactions will be saved to the file \'" + reportFileName + "\'");
System.out.println("测试一下1");
terminals = new jTPCCTerminal[numTerminals];
terminalOutputAreas = new JOutputArea[numTerminals];
terminalNames = new String[numTerminals];
terminalsStarted = numTerminals;
System.out.println("生成jTPCCTerminals");
try
{
String database = jTextFieldDatabase.getText();
String username = jTextFieldUsername.getText();
String password = jTextFieldPassword.getText();
System.out.println("Test3 链接数据库");
int[][] usedTerminals = new int[numWarehouses][10];
for(int i = 0; i < numWarehouses; i++)
for(int j = 0; j < 10; j++)
usedTerminals[i][j] = 0;
jOutputAreaErrors.clear();
jTabbedPane.addTab("Errors", imageIconDot, jOutputAreaErrors);
for(int i = 0; i < numTerminals; i++)
{
int terminalWarehouseID;
int terminalDistrictID;
do
{
terminalWarehouseID = (int)randomNumber(1, numWarehouses);
terminalDistrictID = (int)randomNumber(1, 10);
}
while(usedTerminals[terminalWarehouseID-1][terminalDistrictID-1] == 1);
usedTerminals[terminalWarehouseID-1][terminalDistrictID-1] = 1;
String terminalName = terminalPrefix + (i>=9 ? ""+(i+1) : "0"+(i+1));
Connection conn = null;
printMessage("Creating database connection for " + terminalName + "...");
conn = DriverManager.getConnection(database, username, password);
conn.setAutoCommit(false);
JOutputArea terminalOutputArea = new JOutputArea();
long maxChars = 150000/numTerminals;
if(maxChars > JOutputArea.DEFAULT_MAX_CHARS) maxChars = JOutputArea.DEFAULT_MAX_CHARS;
if(maxChars < 2000) maxChars = 2000;
terminalOutputArea.setMaxChars(maxChars);
jTPCCTerminal terminal = new jTPCCTerminal(terminalName, terminalWarehouseID, terminalDistrictID, conn, transactionsPerTerminal, terminalOutputArea, jOutputAreaErrors, debugMessages, paymentWeightValue, orderStatusWeightValue, deliveryWeightValue, stockLevelWeightValue, numWarehouses, this);
terminals[i] = terminal;
terminalOutputAreas[i] = terminalOutputArea;
terminalNames[i] = terminalName;
printStreamReport.println(terminalName + "\t" + terminalWarehouseID);
}
setActiveTerminalOutput(0);
jTabbedPane.addTab("Terminals", imageIconDot, jPanelTerminalOutputs);
sessionEndTargetTime = executionTimeMillis;
signalTerminalsRequestEndSent = false;
printStreamReport.println("\nTransaction\tWeight\n% New-Order\t" + (100 - (paymentWeightValue + orderStatusWeightValue + deliveryWeightValue + stockLevelWeightValue)) + "\n% Payment\t" + paymentWeightValue + "\n% Order-Status\t" + orderStatusWeightValue + "\n% Delivery\t" + deliveryWeightValue + "\n% Stock-Level\t" + stockLevelWeightValue);
printStreamReport.println("\n\nTransaction Number\tTerminal\tType\tExecution Time (ms)\t\tComment");
printMessage("Created " + numTerminals + " terminal(s) successfully!");
System.out.println("Test4 ");
}
catch(Exception e1)
{
try
{
printStreamReport.println("\nThis session ended with errors!");
printStreamReport.close();
fileOutputStream.close();
}
catch(IOException e2)
{
errorMessage("An error occurred writing the report!");
}
errorMessage("An error occurred!");
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e1.printStackTrace(printWriter);
printWriter.close();
jOutputAreaControl.println(stringWriter.toString());
throw new Exception();
}
jButtonStartTransactions.setEnabled(true); //测试一下
System.out.println("在这里启用StartTransaction按钮!");
}
catch(Exception ex)
{
restartInputAreas();
}
}
}
if(e.getSource() == jButtonStartTransactions)
{
jButtonStartTransactions.setEnabled(false);
System.out.println("执行StartTransaction按钮!");
sessionStart = getCurrentTime();
sessionStartTimestamp = System.currentTimeMillis();
sessionNextTimestamp = sessionStartTimestamp;
if(sessionEndTargetTime != -1)
sessionEndTargetTime += sessionStartTimestamp;
synchronized(terminals)
{
printMessage("Starting all terminals...");
transactionCount = 1;
for(int i = 0; i < terminals.length; i++)
(new Thread(terminals[i])).start();
}
printMessage("All terminals started executing " + sessionStart);
jButtonStopTransactions.setEnabled(true);
System.out.println("重新设置为有效!");
}
if(e.getSource() == jButtonStopTransactions)
{
signalTerminalsRequestEnd(false);
}
if(e.getSource() == jButtonSelectDatabase) setActiveConfigPanel(jPanelConfigDatabase, "Database");
if(e.getSource() == jButtonSelectTerminals) setActiveConfigPanel(jPanelConfigTerminals, "Terminals");
if(e.getSource() == jButtonSelectControls) setActiveConfigPanel(jPanelConfigControls, "Controls");
if(e.getSource() == jButtonSelectWeights) setActiveConfigPanel(jPanelConfigWeights, "Transaction Weights");
if(e.getSource() == jButtonNextTerminal) setNextActiveTerminal();
if(e.getSource() == jButtonPreviousTerminal) setPreviousActiveTerminal();
updateInformationLabel();
}
private void signalTerminalsRequestEnd(boolean timeTriggered)
{
jButtonStopTransactions.setEnabled(false);
synchronized(terminals)
{
if(!signalTerminalsRequestEndSent)
{
if(timeTriggered)
printMessage("The time limit has been reached.");
printMessage("Signalling all terminals to stop...");
signalTerminalsRequestEndSent = true;
for(int i = 0; i < terminals.length; i++)
if(terminals[i] != null)
terminals[i].stopRunningWhenPossible();
printMessage("Waiting for all active transactions to end...");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -