[关闭]
@maorongrong 2015-05-15T09:58:31.000000Z 字数 25702 阅读 666

容器中部署TPC_W

docker TPC_W Linux 原创


提示:以下文章属本人毕业设计原创,转载请注明出处
参考博文主-centos
参考博文辅-ubuntu

环境要求(Tomcat+mysql+jdbc)

1.下载TPC-W安装包(java版)

解压缩后就是一个文件夹tpcw1.0

#(/root)wget http://pharm.ece.wisc.edu/tpcw/tpcw.tar.gz

2.安装jdk

参考博文链接1
参考博文链接2
参考博文链接3

尝试:编译安装jdk

  1. #(/usr/local)mkdir java
  2. #(java)wget http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-x64-rpm.bin
  3. #chmod +x jdk-7-linux-x64-rpm.bin
  4. #./jdk-7-linux-x64-rpm.bin
  5. 报错如下:./jdk-6u22-linux-x64-rpm.bin: line 1: html: No such file or directory
  6. ./jdk-6u22-linux-x64-rpm.bin: line 2: head: No such file or directory
  7. ./jdk-6u22-linux-x64-rpm.bin: line 3: title: No such file or directory
  8. ./jdk-6u22-linux-x64-rpm.bin: line 4: META: No such file or directory
  9. ./jdk-6u22-linux-x64-rpm.bin: line 5: link: No such file or directory
  10. ./jdk-6u22-linux-x64-rpm.bin: line 6: link: No such file or directory
  11. ./jdk-6u22-linux-x64-rpm.bin: line 7: $'\r': command not found
  12. ./jdk-6u22-linux-x64-rpm.bin: line 8: body: No such file or directory
  13. ./jdk-6u22-linux-x64-rpm.bin: line 9: div: No such file or directory
  14. ./jdk-6u22-linux-x64-rpm.bin: line 10: table: No such file or directory
  15. ./jdk-6u22-linux-x64-rpm.bin: line 11: tr: No such file or directory
  16. ./jdk-6u22-linux-x64-rpm.bin: line 12: syntax error near unexpected token `<'
  17. ./jdk-6u22-linux-x64-rpm.bin: line 12: ` <td rowspan="2" valign="middle" nowrap>
  18. <a href="http://www.oracle.com"><img src="/errors/us/assets/oralogo-small.gif" width="154" height="19" hspa'e="10" vspace="25" border="0" >
  19. </a></td>

安装方法:

使用windows在ORACLE官网直接下载jdk-8u40-linux-x64.rpm(rpm安装包)和jdk-8u40-linux-x64.tar.gz(编译安装包),如果省去编译安装的麻烦,可以直接rpm安装:

  1. jdk-8u40-linux-x64.rpm传至/usr/local/
  2. #(/usr/local)rpm -ivh jdk-8u40-linux-x64.rpm
  3. 安装完成后,默认安装路径为 /usr/java/,因此$JAVA_HOME=/usr/java/jdk1.8.0_40

3.apache_tomcat安装

参考博文链接1
参考博文链接2
参考博文链接3

windows机在[apache官网下载](http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.0.20/bin/apache-tomcat-8.0.20.tar.gz) apache-tomcat-8.0.20.tar.gz 
将apache-tomcat-8.0.20.tar.gz传至/usr/local/
  1. #(/usr/local)tar -xvf apache-tomcat-8.0.20.tar.gz (local下多一个apache-tomcat-8.0.20目录)
  2. #(/usr/local)ln -s /usr/local/apache-tomcat-8.0.20/ /usr/local/tomcat
  3. 安装路径:/usr/local/apache-tomcat-8.0.20

4.安装MySQL Server端

centos6中使用此方法:
#yum install mysql-server

而在centos7中报错如下:

  1. #yum install mysql-server
  2. Loaded plugins: fastestmirror, product-id, subscription-manager
  3. This system is not registered with Subscription Management. You can use subscription-manager to register.
  4. Loading mirror speeds from cached hostfile
  5. No package mysql-server available.
  6. Error: Nothing to do
  7. #yum search mysql
  8. Loaded plugins: fastestmirror, product-id, subscription-manager
  9. This system is not registered with Subscription Management. You can use subscription-manager to register.
  10. Loading mirror speeds from cached hostfile
  11. ====================================== N/S matched: mysql ======================================
  12. MySQL-python.x86_64 : An interface to MySQL
  13. akonadi-mysql.x86_64 : Akonadi MySQL backend support
  14. apr-util-mysql.x86_64 : APR utility library MySQL DBD driver
  15. dovecot-mysql.x86_64 : MySQL back end for dovecot
  16. freeradius-mysql.x86_64 : MySQL support for freeradius
  17. libdbi-dbd-mysql.x86_64 : MySQL plugin for libdbi
  18. mysql-connector-java.noarch : Official JDBC driver for MySQL
  19. mysql-connector-odbc.x86_64 : ODBC driver for MySQL
  20. perl-DBD-MySQL.x86_64 : A MySQL interface for Perl
  21. php-mysql.x86_64 : A module for PHP applications that use MySQL databases
  22. php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
  23. qt-mysql.i686 : MySQL driver for Qt's SQL classes
  24. qt-mysql.x86_64 : MySQL driver for Qt's SQL classes
  25. qt3-MySQL.i686 : MySQL drivers for Qt 3's SQL classes
  26. qt3-MySQL.x86_64 : MySQL drivers for Qt 3's SQL classes
  27. redland-mysql.x86_64 : MySQL storage support for Redland
  28. rsyslog-mysql.x86_64 : MySQL support for rsyslog
  29. mariadb.x86_64 : A community developed branch of MySQL
  30. mariadb-devel.i686 : Files for development of MariaDB/MySQL applications
  31. mariadb-devel.x86_64 : Files for development of MariaDB/MySQL applications
  32. mariadb-libs.i686 : The shared libraries required for MariaDB/MySQL clients
  33. mariadb-libs.x86_64 : The shared libraries required for MariaDB/MySQL clients
  34. Name and summary matches only, use "search all" for everything.

centos7上mariadb与原有mysql区别与联系:
从最新版本的linux系统开始,默认的是 Mariadb而不是mysql!
使用系统自带的repos安装很简单:
yum install mariadb mariadb-server
systemctl start mariadb ==> 启动mariadb
systemctl enable mariadb ==> 开机自启动
mysql_secure_installation ==> 设置 root密码等相关
mysql -uroot -p123456 ==> 测试登录!

mysql官网 下载所需安装包

尝试一:手动安装mysql方法 (你需要到mysql官方下载rpm包或者源码包编译安装)
可参考此博文进行

尝试二:换成安装mariadb
参考该百度经验或者此链接

最终安装方法

直接采用此博文,因为很靠谱!! 这个可以作为参考

  1. 找到mysql5.6centosrepo源,终于解决mysql的安装问题:
  2. #(/usr/local)wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm(下载mysql的repo源)
  3. #(/usr/local)rpm -ivh mysql-community-release-el7-5.noarch.rpm (安装这个包后,会获得两个mysql的yum repo源)
  4. 结果如下:
  5. Preparing... ################################# [100%]
  6. Updating / installing...
  7. 1:mysql-community-release-el7-5 ################################# [100%]
  8. [amy@localhost local]$ cd /etc/yum.repos.d
  9. [amy@localhost yum.repos.d]$ ll
  10. total 12
  11. -rw-r--r--. 1 root root 615 Mar 27 07:01 CentOS7-Base-163.repo
  12. -rw-r--r-- 1 root root 1209 Jan 29 2014 mysql-community.repo
  13. -rw-r--r-- 1 root root 1060 Jan 29 2014 mysql-community-source.repo
  14. # yum install mysql-community-server
  15. Loaded plugins: fastestmirror, product-id, subscription-manager
  16. This system is not registered with Subscription Management. You can use subscription-manager to register.
  17. base | 3.6 kB 00:00:00
  18. extras | 3.4 kB 00:00:00
  19. mysql-connectors-community | 2.5 kB 00:00:00
  20. mysql-tools-community | 2.5 kB 00:00:00
  21. mysql56-community | 2.5 kB 00:00:00
  22. ...................
  23. Installed:
  24. mysql-community-libs.x86_64 0:5.6.23-3.el7 mysql-community-server.x86_64 0:5.6.23-3.el7
  25. Dependency Installed:
  26. mysql-community-client.x86_64 0:5.6.23-3.el7 mysql-community-common.x86_64 0:5.6.23-3.el7
  27. Replaced:
  28. mariadb-libs.x86_64 1:5.5.41-2.el7_0
  29. Complete!

安装Mysql后配置

  1. centos67中都要执行的步骤)成功安装之后重启mysql服务
  2. # service mysqld restart
  3. 查看mysql配置文件/etc/my.cnf
  4. [amy@localhost etc]$ cat my.cnf
  5. ## For advice on how to change settings please see
  6. ..........
  7. datadir=/var/lib/mysql
  8. socket=/var/lib/mysql/mysql.sock
  9. # Disabling symbolic-links is recommended to prevent assorted security risks
  10. symbolic-links=0
  11. # Recommended in standard MySQL setup
  12. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  13. [mysqld_safe]
  14. log-error=/var/log/mysqld.log
  15. pid-file=/var/run/mysqld/mysqld.pid
  16. 查找mysql的安装路径
  17. #[root@docker188 usr]# find /usr -name mysql
  18. /usr/bin/mysql
  19. /usr/lib64/mysql
  20. /usr/share/mysql

初次安装完Mysql后,默认没有密码,需要设置密码:
(法一)
#mysql_secure_installation
MySQL安全配置向导mysql_secure_installation详解
(法二)
初次安装mysql后root账户是没有密码的,置密码的方法 : mysql -u root

  1. 根据mysql的命令行来更改:
  2. mysql> use mysql;
  3. mysql> update user set password=PASSWORD("GIVE-NEW-ROOT-PASSWORD") where User='root';
  4. mysql> flush privileges;
  5. mysql> quit
  6. 成功登陆:
  7. [root@docker188 usr]# mysql -uroot -proot

5.下载并配置JDBC MySQL驱动

  1. mysql-connector-java-5.1.26-bin.jar
  2. #(/usr/local/apache-tomcat-8.0.20/webapps/servlet/WEB-INF/lib)rz(从桌面传jar包)

6.环境变量设置

  1. 根据自己安装软件的路径在/etc/profile文件末尾添加:
  2. # vi /etc/profile
  3. export JAVA_HOME=/usr/java/jdk1.8.0_40
  4. export CATALINA_HOME=/usr/local/apache-tomcat-8.0.20
  5. export PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
  6. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/servlet-api.jar:$CATALINA_HOME/webapps/servlet/WEB-INF/lib/mysql-connector-java-5.1.26-bin.jar:$CLASSPATH
  7. 保存后使当前配置生效:
  8. #source /etc/profile (若提示命令找不到,则使用下面一行的命令)
  9. #. /etc/profile (注意.和/etc/profile之间有空格)
  10. 然后再使用命令查看是否安装成功,命令如下:
  11. [amy@localhost etc]$ java -version
  12. java version "1.8.0_40"
  13. Java(TM) SE Runtime Environment (build 1.8.0_40-b26)
  14. Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode) 说明安装成功了

安装TPC_W并修改部分源码

7.修改源码

所有要修改的文件: tpcw1.0\populate\populate_images
                  tpcw1.0\populate\TPCW_Populate.java
                  tpcw1.0\servlets\TPCW_Database.java
                  tpcw1.0\servlets\TPCW_Util.java
                  tpcw1.0\rbe\RBE.java
                  tpcw1.0/rbe/EB.java
                  tpcw1.0/rbe/util/Debug.java
                  tpcw1.0/rbe/util/CharSetStrPattern.java
                  tpcw1.0/rbe/util/Histogram.java
                  ${CATALINA_HOME}/webapps/servlet/WEB-INF/web.xml

修改内容参照此博文

主要修改
1、改变mysql连接数
2、改变sql语句
3、Mysql与jar文件版本一致
4、private static final boolean use_connection_pool = true;
5、public static final int maxConn = 500;
6、CURRENT_TIMESTAMP
7、CURRENT_DATE
8、INTERVAL 2 HOUR

  1. [amy@localhost populate]$ pwd
  2. /home/amy/tpcw1.0/populate
  3. [amy@localhost populate]$ cat populate_images
  4. 文件一:tpcw1.0\populate\populate_images
  5. ① #!/usr/local/bin/perl ------> #!/usr/bin/perl
  6. ② $DEST_DIR="/local_home/cain/Images";------>
  7. $DEST_DIR="/usr/local/apache-tomcat-6.0.26/webapps/tpcw/Images";
  8. 文件二: tpcw1.0\populate\TPCW_Populate.java
  9. ③ private static final String driverName = "com.mysql.jdbc.Driver"; private  static final String dbName = "jdbc:mysql://localhost:3306/tpcw2";
  10. 将代码中所有数据库插入语句中涉及的表名均改为小写,以解决填充数据库时因该表不存在而报错。
  11. ④ PreparedStatement statement = con.prepareStatement  
  12.         ("INSERT INTO address(ADDR_ID,ADDR_STREET1,ADDR_STREET2,ADDR_CITY,ADDR_STATE,ADDR_ZIP,ADDR_CO_ID) VALUES (?, ?, ?, ?, ?, ?, ?)");
  13. ⑤ 更改数据库连接涉及的用户、密码信息:
  14. try {  
  15.      Class.forName(driverName);
  16. con=DriverManager.getConnection(dbName,"root","password");//(dbName);
  17.       con.setAutoCommit(false);
  18. }
  19. 文件三: tpcw1.0\servlets\TPCW_Database.java
  20. ⑥ static String driverName = "com.mysql.jdbc.Driver";
  21. ⑦ static String jdbcPath = "jdbc:mysql://localhost:3306/tpcw2";
  22. ⑧ private static final boolean use_connection_pool = false;
  23. ⑨ try {
  24. Class.forName(driverName).newInstance();
  25. Connection con;
  26. while(true){
  27. try{
  28. con = DriverManager.getConnection(jdbcPath, "root", "password");
  29. break;
  30. }
  31. }
  32. ⑩ 将代码中的所有db2语句改成MySql语句。
  33. 所有语句中FETCH FIRST 5 ROWS ONLY更改为limit 5
  34. 更改错误表名及数据库操作
  35. 11  PreparedStatement updateLogin = con.prepareStatement
  36. ("UPDATE customer SET c_login = CURRENT_TIMESTAMP, c_expiration = (CURRENT_TIMESTAMP + INTERVAL 2 HOUR) WHERE c_id = ?");
  37. /*("UPDATE customer SET c_login = CURRENT TIMESTAMP, c_expiration = CURRENT TIMESTAMP + 2 HOURS WHERE c_id = ?");*/
  38. 12  PreparedStatement insert_cart = con.prepareStatement
  39. ("INSERT into shopping_cart (sc_id, sc_time) VALUES ((select temp.cc from ( SELECT COUNT(*) cc FROM shopping_cart) temp),CURRENT_TIMESTAMP)");
  40. /* ("INSERT into shopping_cart (sc_id, sc_time) " +
  41. "VALUES ((SELECT COUNT(*) FROM shopping_cart)," +
  42. "CURRENT TIMESTAMP)");*/
  43. 13  PreparedStatement statement = con.prepareStatement
  44. ("INSERT into cc_xacts (cx_o_id, cx_type, cx_num, cx_name, cx_expire, cx_xact_amt, cx_xact_date, cx_co_id) " +
  45. "VALUES (?, ?, ?, ?, ?, ?, CURRENT_DATE, (SELECT co_id FROM address, country WHERE addr_id = ? AND addr_co_id = co_id))");
  46. /* ("INSERT into cc_xacts (cx_o_id, cx_type, cx_num, cx_name, cx_expire, cx_xact_amt, cx_xact_date, cx_co_id) " +
  47. "VALUES (?, ?, ?, ?, ?, ?, CURRENT DATE, (SELECT co_id FROM address, country WHERE addr_id = ? AND addr_co_id = co_id))");
  48. */
  49. 14 PreparedStatement insert_row = con.prepareStatement
  50. ("INSERT into orders (o_id, o_c_id, o_date, o_sub_total, " +
  51. "o_tax, o_total, o_ship_type, o_ship_date, " +
  52. "o_bill_addr_id, o_ship_addr_id, o_status) " +
  53. "VALUES (?, ?, CURRENT_DATE, ?, 8.25, ?, ?, CURRENT_DATE + INTERVAL ? DAY, ?, ?, 'Pending')");
  54. /* ("INSERT into orders (o_id, o_c_id, o_date, o_sub_total, " +
  55. "o_tax, o_total, o_ship_type, o_ship_date, " +
  56. "o_bill_addr_id, o_ship_addr_id, o_status) " +
  57. "VALUES (?, ?, CURRENT DATE, ?, 8.25, ?, ?, CURRENT DATE + ? DAYS, ?, ?, 'Pending')");*/
  58. 文件四: tpcw1.0\servlets\TPCW_Util.java
  59. 15 public static final String SESSION_ID="jsessionid=";
  60. 文件五: tpcw1.0\rbe\RBE.java
  61. 16 public static String www1 = "http://localhost:8080/";
  62. new StrStrPattern(";jsessionid=");
  63. public static final String field_sessionID = ";jsessionid=";
  64. 17 修改下面4个文件中,
  65. public class Debug {  public static void assert(boolean assertCond, String message)
  66. 将函数名assert改成assert1,以解决直接编译出错问题。
  67. tpcw1.0/rbe/EB.java
  68. tpcw1.0/rbe/util/Debug.java
  69. tpcw1.0/rbe/util/CharSetStrPattern.java
  70. tpcw1.0/rbe/util/Histogram.java

修改${CATALINA_HOME}/webapps/servlet/WEB-INF/web.xml

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  6. <display-name>TPC-W</display-name>
  7. <description>
  8. TPC-W Java Implementation
  9. </description>
  10. <servlet>
  11. <servlet-name>TPCW_home_interaction</servlet-name>
  12. <servlet-class>TPCW_home_interaction</servlet-class>
  13. </servlet>
  14. <servlet>
  15. <servlet-name>TPCW_shopping_cart_interaction</servlet-name>
  16. <servlet-class>TPCW_shopping_cart_interaction</servlet-class>
  17. </servlet>
  18. <servlet>
  19. <servlet-name>TPCW_order_inquiry_servlet</servlet-name>
  20. <servlet-class>TPCW_order_inquiry_servlet</servlet-class>
  21. </servlet>
  22. <servlet>
  23. <servlet-name>TPCW_order_display_servlet</servlet-name>
  24. <servlet-class>TPCW_order_display_servlet</servlet-class>
  25. </servlet>
  26. <servlet>
  27. <servlet-name>TPCW_search_request_servlet</servlet-name>
  28. <servlet-class>TPCW_search_request_servlet</servlet-class>
  29. </servlet>
  30. <servlet>
  31. <servlet-name>TPCW_execute_search</servlet-name>
  32. <servlet-class>TPCW_execute_search</servlet-class>
  33. </servlet>
  34. <servlet>
  35. <servlet-name>TPCW_new_products_servlet</servlet-name>
  36. <servlet-class>TPCW_new_products_servlet</servlet-class>
  37. </servlet>
  38. <servlet>
  39. <servlet-name>TPCW_best_sellers_servlet</servlet-name>
  40. <servlet-class>TPCW_best_sellers_servlet</servlet-class>
  41. </servlet>
  42. <servlet>
  43. <servlet-name>TPCW_product_detail_servlet</servlet-name>
  44. <servlet-class>TPCW_product_detail_servlet</servlet-class>
  45. </servlet>
  46. <servlet>
  47. <servlet-name>TPCW_customer_registration_servlet</servlet-name>
  48. <servlet-class>TPCW_customer_registration_servlet</servlet-class>
  49. </servlet>
  50. <servlet>
  51. <servlet-name>TPCW_buy_request_servlet</servlet-name>
  52. <servlet-class>TPCW_buy_request_servlet</servlet-class>
  53. </servlet>
  54. <servlet>
  55. <servlet-name>TPCW_buy_confirm_servlet</servlet-name>
  56. <servlet-class>TPCW_buy_confirm_servlet</servlet-class>
  57. </servlet>
  58. <servlet>
  59. <servlet-name>TPCW_admin_request_servlet</servlet-name>
  60. <servlet-class>TPCW_admin_request_servlet</servlet-class>
  61. </servlet>
  62. <servlet>
  63. <servlet-name>TPCW_admin_response_servlet</servlet-name>
  64. <servlet-class>TPCW_admin_response_servlet</servlet-class>
  65. </servlet>
  66. <servlet-mapping>
  67. <servlet-name>TPCW_home_interaction</servlet-name>
  68. <url-pattern>/TPCW_home_interaction</url-pattern>
  69. </servlet-mapping>
  70. <servlet-mapping>
  71. <servlet-name>TPCW_shopping_cart_interaction</servlet-name>
  72. <url-pattern>/TPCW_shopping_cart_interaction</url-pattern>
  73. </servlet-mapping>
  74. <servlet-mapping>
  75. <servlet-name>TPCW_order_inquiry_servlet</servlet-name>
  76. <url-pattern>/TPCW_order_inquiry_servlet</url-pattern>
  77. </servlet-mapping>
  78. <servlet-mapping>
  79. <servlet-name>TPCW_order_display_servlet</servlet-name>
  80. <url-pattern>/TPCW_order_display_servlet</url-pattern>
  81. </servlet-mapping>
  82. <servlet-mapping>
  83. <servlet-name>TPCW_search_request_servlet</servlet-name>
  84. <url-pattern>/TPCW_search_request_servlet</url-pattern>
  85. </servlet-mapping>
  86. <servlet-mapping>
  87. <servlet-name>TPCW_execute_search</servlet-name>
  88. <url-pattern>/TPCW_execute_search</url-pattern>
  89. </servlet-mapping>
  90. <servlet-mapping>
  91. <servlet-name>TPCW_new_products_servlet</servlet-name>
  92. <url-pattern>/TPCW_new_products_servlet</url-pattern>
  93. </servlet-mapping>
  94. <servlet-mapping>
  95. <servlet-name>TPCW_best_sellers_servlet</servlet-name>
  96. <url-pattern>/TPCW_best_sellers_servlet</url-pattern>
  97. </servlet-mapping>
  98. <servlet-mapping>
  99. <servlet-name>TPCW_product_detail_servlet</servlet-name>
  100. <url-pattern>/TPCW_product_detail_servlet</url-pattern>
  101. </servlet-mapping>
  102. <servlet-mapping>
  103. <servlet-name>TPCW_customer_registration_servlet</servlet-name>
  104. <url-pattern>/TPCW_customer_registration_servlet</url-pattern>
  105. </servlet-mapping>
  106. <servlet-mapping>
  107. <servlet-name>TPCW_buy_request_servlet</servlet-name>
  108. <url-pattern>/TPCW_buy_request_servlet</url-pattern>
  109. </servlet-mapping>
  110. <servlet-mapping>
  111. <servlet-name>TPCW_buy_confirm_servlet</servlet-name>
  112. <url-pattern>/TPCW_buy_confirm_servlet</url-pattern>
  113. </servlet-mapping>
  114. <servlet-mapping>
  115. <servlet-name>TPCW_admin_request_servlet</servlet-name>
  116. <url-pattern>/TPCW_admin_request_servlet</url-pattern>
  117. </servlet-mapping>
  118. <servlet-mapping>
  119. <servlet-name>TPCW_admin_response_servlet</servlet-name>
  120. <url-pattern>/TPCW_admin_response_servlet</url-pattern>
  121. </servlet-mapping>
  122. </web-app>

8.在MySQL中创建数据库tpcw2

  1. [amy@docker188 ~]$ mysql -uroot -proot
  2. Warning: Using a password on the command line interface can be insecure.
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. ......
  5. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  6. mysql> CREATE DATABASE tpcw2;
  7. Query OK, 1 row affected (0.00 sec)
  8. mysql> exit

9.开始安装TPC-W

  1. [amy@docker188 ~]$ sudo mkdir -p ${CATALINA_HOME}/webapps/tpcw/Images
  2. [amy@docker188 ~]$ sudo mkdir -p ${CATALINA_HOME}/webapps/servlet/WEB-INF/classes

10.在数据库tpcw2中生成数据

错误一及解决方法:

  1. [amy@docker188 populate]$ pwd
  2. /home/amy/tpcw1.0/populate
  3. [amy@docker188 populate]$ sudo systemctl start mysqld.service
  4. [amy@docker188 populate]$ javac TPCW_Populate.java
  5. TPCW_Populate.java:266: error: unmappable character for encoding UTF8
  6. //myql??????linux?????????д?Сд???, ???com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'tpcw2.ADDRESS'
  7. ^
  8. [amy@docker188 populate]$ javac -encoding gbk TPCW_Populate.java
  9. [amy@docker188 populate]$ ll
  10. total 72
  11. -rwxr-xr-x 1 amy amy 141 Feb 25 2000 Makefile
  12. -rwxr-xr-x 1 amy amy 1659 Mar 27 23:06 populate_images
  13. -rw-rw-r-- 1 amy amy 26044 Mar 29 20:33 TPCW_Populate.class (说明编译成功)
  14. -rwxr-xr-x 1 amy amy 35621 Mar 29 08:57 TPCW_Populate.java

错误二及解决方法:

  1. 运行文件TPCW_Populate.class报错如下:
  2. [amy@docker188 populate]$ java TPCW_Populate
  3. Beginning TPCW Database population.
  4. java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)
  5. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
  6. .........
  7. 解决方法:在188服务器搭建mysql时给了root用户密码root,代码中没有给密码.代码更改如下:
  8. try {
  9. Class.forName(driverName);
  10. con = DriverManager.getConnection(dbName, "root", "root");//(dbName);此处添加密码root
  11. con.setAutoCommit(false);//解决java.sql.SQLException: Can't call commit when autocommit=true
  12. }
  13. 删除TPCW_Populate.class文件,重新编译运行。

错误三及解决方法:

  1. [amy@docker188 populate]$ javac -encoding gbk TPCW_Populate.java
  2. [amy@docker188 populate]$ java TPCW_Populate
  3. Beginning TPCW Database population.
  4. Already dropped table ADDRESS
  5. Already dropped table AUTHOR
  6. Already dropped table CC_XACTS
  7. Already dropped table COUNTRY
  8. Already dropped table CUSTOMER
  9. Already dropped table ITEM
  10. Already dropped table ORDER_LINE
  11. Already dropped table ORDERS
  12. Already dropped table SHOPPING_CART
  13. Already dropped table SHOPPING_CART_LINE
  14. Done deleting tables!
  15. Created table ADDRESS
  16. Created table AUTHOR
  17. Created table CC_XACTS
  18. Created table COUNTRY
  19. Created table CUSTOMER
  20. Created table ITEM
  21. Created table ORDER_LINE
  22. Created table ORDERS
  23. Created table SHOPPING_CART
  24. Created table SHOPPING_CART_LINE
  25. Done creating tables!
  26. Populating ADDRESS Table with 288000 addresses
  27. Complete (in 10,000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  28. Populating AUTHOR Table with 2500 authors
  29. Unable to populate AUTHOR table
  30. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'tpcw2.AUTHOR' doesn't exist
  31. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  32. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  33. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  34. at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
  35. at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
  36. at com.mysql.jdbc.Util.getInstance(Util.java:386)
  37. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
  38. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
  39. at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122)
  40. at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
  41. at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
  42. at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818)
  43. at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157)
  44. at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460)
  45. at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377)
  46. at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361)
  47. at TPCW_Populate.populateAuthorTable(TPCW_Populate.java:333)
  48. at TPCW_Populate.main(TPCW_Populate.java:93)
  49. 出现报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'tpcw2.AUTHOR' doesn't exist
  50. 代码更改如下:try {
  51. PreparedStatement statement = con.prepareStatement
  52. ("INSERT INTO author(A_ID,A_FNAME,A_LNAME,A_MNAME,A_DOB,A_BIO) VALUES (?, ?, ?, ?, ?, ?)");
  53. 依次同上,报错:Unable to populate COUNTRY table
  54. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'tpcw2.COUNTRY' doesn't exist

成功执行的样子:

  1. [amy@docker188 populate]$ javac -encoding gbk TPCW_Populate.java
  2. [amy@docker188 populate]$ java TPCW_Populate
  3. Beginning TPCW Database population.
  4. Already dropped table ADDRESS
  5. Already dropped table AUTHOR
  6. Already dropped table CC_XACTS
  7. Already dropped table COUNTRY
  8. Already dropped table CUSTOMER
  9. Already dropped table ITEM
  10. Already dropped table ORDER_LINE
  11. Already dropped table ORDERS
  12. Already dropped table SHOPPING_CART
  13. Already dropped table SHOPPING_CART_LINE
  14. Done deleting tables!
  15. Created table ADDRESS
  16. Created table AUTHOR
  17. Created table CC_XACTS
  18. Created table COUNTRY
  19. Created table CUSTOMER
  20. Created table ITEM
  21. Created table ORDER_LINE
  22. Created table ORDERS
  23. Created table SHOPPING_CART
  24. Created table SHOPPING_CART_LINE
  25. Done creating tables!
  26. Populating ADDRESS Table with 288000 addresses
  27. Complete (in 10,000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  28. Populating AUTHOR Table with 2500 authors
  29. Populating COUNTRY with 92 countries
  30. Populating CUSTOMER Table with 144000 customers
  31. Complete (in 10,000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14
  32. Populating ITEM table with 10000 items
  33. Populating ORDERS, ORDER_LINES, CC_XACTS with 129600 orders
  34. Complete (in 10,000's): 1 2 3 4 5 6 7 8 9 10 11 12
  35. Adding Indexes
  36. Done
  37. 继续配置
  38. [amy@docker188 populate]$ sudo cp TPCW_Populate.class ${CATALINA_HOME}/webapps/servlet/WEB-INF/classes
  39. [sudo] password for amy:
  40. [amy@docker188 populate]$ cd ${CATALINA_HOME}/webapps/servlet/WEB-INF/
  41. [amy@docker188 WEB-INF]$ ll
  42. total 0
  43. drwxr-xr-x 2 root root 32 Mar 29 22:41 classes
  44. drwxr-xr-x 2 root root 48 Mar 27 22:18 lib

11.生成并部署图片

  1. [amy@docker188 ImgGen]$ cd ImgFiles
  2. [amy@docker188 ImgFiles]$ pwd
  3. /home/amy/tpcw1.0/ImgGen/ImgFiles
  4. [amy@docker188 ImgFiles]$ make
  5. 执行后没有error,只有warning
请问make 和 make install 时出现什么提示证明编译安装成功呢?
(1)
观察你能看到的最后几行
出现error就没成功
出现waring可以无视

(2)
如果编译出错的话,make就会停止,然后打印出一堆Error,如果成功编译完了,是没有E rror、错误等字样出现的。判断是否成功只要看make打印信息的末尾是不是有Error。如果想见证一下错误,就在源代码里故意弄几个错误,make最后就会出错,然后可以观察一下错误信息。
  1. [amy@docker188 ImgFiles]$ pwd
  2. /home/amy/tpcw1.0/ImgGen/ImgFiles
  3. [amy@docker188 ImgFiles]$ cd ..
  4. [amy@docker188 ImgGen]$ pwd
  5. /home/amy/tpcw1.0/ImgGen
  6. [amy@docker188 ImgGen]$ cd ../populate
  7. [amy@docker188 populate]$ pwd
  8. /home/amy/tpcw1.0/populate
  9. [amy@docker188 populate]$ sudo perl populate_images 执行正常
  10. [amy@docker188 populate]$ sudo cp ../images/* ${CATALINA_HOME}/webapps/tpcw/Images

12.编译并部署servlets

  1. [amy@docker188 servlets]$ javac *.java
  2. Note: Some input files use or override a deprecated API.
  3. Note: Recompile with -Xlint:deprecation for details.
  4. Note: Some input files use unchecked or unsafe operations.
  5. Note: Recompile with -Xlint:unchecked for details.
  6. (当前目录下每个都生成字节码,没报错就行。)
  7. #cp *.class ${CATALINA_HOME}/webapps/servlet/WEB-INF/classes (总是忘记这一步)
  8. #vi ${CATALINA_HOME}/webapps/servlet/WEB-INF/web.xml

13.编译RBE

  1. [amy@docker188 util]$ pwd
  2. /home/amy/tpcw1.0/rbe/util
  3. [amy@docker188 util]$ javac *.java
  4. (执行完什么反应也没有,说明没错)
  5. [amy@docker188 util]$ cd ../args
  6. [amy@docker188 args]$ mkdir -p rbe/util
  7. [amy@docker188 args]$ cp ../util/*.class rbe/util/
  8. [amy@docker188 args]$ pwd
  9. /home/amy/tpcw1.0/rbe/args
  10. [amy@docker188 args]$ cd rbe/util/
  11. [amy@docker188 util]$ ll
  12. total 44
  13. -rw-r--r-- 1 amy amy 749 Mar 30 09:25 AbCharStrPattern.class
  14. -rw-r--r-- 1 amy amy 421 Mar 30 09:25 CharRangeStrPattern.class
  15. -rw-r--r-- 1 amy amy 1975 Mar 30 09:25 CharSetStrPattern.class
  16. -rw-r--r-- 1 amy amy 364 Mar 30 09:25 CharStrPattern.class
  17. -rw-r--r-- 1 amy amy 629 Mar 30 09:25 Debug.class
  18. -rw-r--r-- 1 amy amy 508 Mar 30 09:25 DebugError.class
  19. -rw-r--r-- 1 amy amy 2970 Mar 30 09:25 Histogram.class
  20. -rw-r--r-- 1 amy amy 2833 Mar 30 09:25 Pad.class
  21. -rw-r--r-- 1 amy amy 1007 Mar 30 09:25 StringPattern.class
  22. -rw-r--r-- 1 amy amy 1063 Mar 30 09:25 StrStrPattern.class
  23. -rw-rw-r-- 1 amy amy 3004 Mar 30 09:25 TestPattern.class
  24. [amy@docker188 args]$ mkdir rbe/args
  25. [amy@docker188 args]$ javac *.java
  26. Note: ArgDB.java uses unchecked or unsafe operations.
  27. Note: Recompile with -Xlint:unchecked for details.
  28. [amy@docker188 args]$ cp *.class rbe/args/
  29. [amy@docker188 args]$ mv rbe ../
  30. [amy@docker188 args]$ pwd
  31. /home/amy/tpcw1.0/rbe/args
  32. [amy@docker188 args]$ cd ..
  33. [amy@docker188 rbe]$
  34. [amy@docker188 rbe]$ javac *.java
  35. EB.java:317: warning: unreachable catch clause
  36. catch (IOException ioe) {
  37. ^
  38. thrown type MalformedURLException has already been caught
  39. Note: RBE.java uses or overrides a deprecated API.
  40. Note: Recompile with -Xlint:deprecation for details.
  41. Note: Some input files use unchecked or unsafe operations.
  42. Note: Recompile with -Xlint:unchecked for details.
  43. 1 warning

测试成功安装

14.测试TPC-W:

  1. 启动tomcat
  2. [amy@docker188 bin]$ pwd
  3. /usr/local/apache-tomcat-8.0.20/bin
  4. [amy@docker188 bin]$ sudo ./startup.sh
  5. [sudo] password for amy:
  6. Using CATALINA_BASE: /usr/local/apache-tomcat-8.0.20
  7. Using CATALINA_HOME: /usr/local/apache-tomcat-8.0.20
  8. Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.0.20/temp
  9. Using JRE_HOME: /
  10. Using CLASSPATH: /usr/local/apache-tomcat-8.0.20/bin/bootstrap.jar:/usr/local/apache-tomcat-8.0.20/bin/tomcat-juli.jar
  11. Tomcat started.

访问http://localhost:8080/servlet/TPCW_home_interaction页面测试是否安装成功
(localhost换成部署你环境的主机ip;如果是容器,localhost为docker守护进程所在宿主机的ip,8080端口换成你主机映射docker容器的端口(如主机49154->8080,则端口写49154))

浏览器无结果:参考方法 IPTABLES问题1 IPTABLES问题2

  1. 可以vi 打开 /etc/sysconfig/iptables 的文件中追加
  2. -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
  3. #iptables -F 这个命令可以清除CentOS中iptables自带防火墙默认规则

15.运行TPC-W

  1. [amy@docker188 ~]$ cd tpcw1.0/
  2. [amy@docker188 ~]$java rbe.RBE -EB rbe.EBTPCW1Factory 30 -OUT test.m -RU 100 -MI 1000 -RD 100 -www http://127.0.0.1/ -CUST 10000 -ITEM 10000

模拟试试:(可以进数据库查看当前访问进程)
mysql> show processlist;

在mysql数据库中加入允许远程访问的test用户,用户密码也是test:

  1. mysqk>GRANT USAGE ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;
  2. mysql>grant all privileges on *.* to 'test'@'%' identified by 'test';
  3. mysql>flush privileges;//刷新系统权限表

下面这种方法会报错:

  1. mysql>insert into mysql.user(Host,User,Password) values("%","test",password("test"));会报错!!!
  2. Mysql添加用户错误:ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value解决方法)

查看网络可能用到的命令
netstat -apn | grep 8080
iptables -l
iptables -h
iptables -L
sudo systemctl stop iptables.service

在容器中部署TPC_W的方法

基础镜像尽量选择centos6(centos7在安装mysql的时候你会很痛苦,service命令等都精简的没了)
其他部分同上面安装方法一样,只是可能需要 #yum install tar wget等
若yum源链接总是提示超时,可以在/etc/yum.conf末尾添加timeout=1200

在centos6起的docker容器中,默认没有make命令,需要:
#yum -y install gcc automake autoconf libtool make

TPC_W目录结构

ImgGen/ 包含由TPC提供的随机图像生成程序
images/ 包含对TPC-W网页的标准图像,如导航,按钮,标志,等
matlab/ 该目录包含一组MATLAB脚本,可用于可视化一个TPC-W运行时的统计数据。这些脚本利用由RBE创建的一个matlab文件
populate/ 该目录包含可用于填充DB2数据库的Java程序,名为TPCW_Populate.java。这个程序可以忍受所有TPC指定数据库缩放规则。在填充数据库之前,必须先创建数据库(其中必须有对JDBC接口的支持)。在运行TPCW_Populate程序之前,你需要设置NUM_EBS和NUM_ITEMS变量,来设置相应的DB大小你也需要改变DRIVERNAME和DBNAME变量,以满足您的特定数据库的安装。
rbe/ 该目录包含所有实现远程浏览器的源代码。为了构建RBE,运行“javac RBE / *”,从TPCW安装目录.运行rbe的一个示例命令行被设置在文件“runtpcw”。更多关于RBE的信息可以在RBE目录里面的README文件中找到根据您的Web服务器是如何编码的会话ID(使用URL重写),你可能需要改变文件RBE.java里的“yourSessionID”变量在这个文件里的makefile可用于构建这些类目录。在运行makefile文件之前,你需要编辑它,为你的Web服务器指定TPCW_HOME,和SERVLET_HOME和CLASS_HOME变量到相应的目录。这种分配已经过测试,与Apache JServ的,Sun Java Web Server 2.0中,IBM的WebSphere标准版,和Jigsaw Web服务器。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注