⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jtpcc.java

📁 业界最为经典的SQL性能测试工具
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            {
                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 + -