Maorongrong smile like sunshine

容器中部署TPC_W

2015-05-13

A stupid new learner write stupid words, just ignore it.

参考博文主-centos 参考博文辅-ubuntu

环境要求(Tomcat+mysql+jdbc)

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

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

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

安装jdk

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

尝试:编译安装jdk

# (/usr/local)mkdir java
# (java)wget http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-x64-rpm.bin
# chmod +x jdk-7-linux-x64-rpm.bin
# ./jdk-7-linux-x64-rpm.bin
报错如下:./jdk-6u22-linux-x64-rpm.bin: line 1: html: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 2: head: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 3: title: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 4: META: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 5: link: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 6: link: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 7: $'\r': command not found
./jdk-6u22-linux-x64-rpm.bin: line 8: body: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 9: div: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 10: table: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 11: tr: No such file or directory
./jdk-6u22-linux-x64-rpm.bin: line 12: syntax error near unexpected token `<'
./jdk-6u22-linux-x64-rpm.bin: line 12: `      <td rowspan="2" valign="middle" nowrap>
<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" >
</a></td>

安装方法:

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

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

apache_tomcat安装

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

windows机在apache官网下载 apache-tomcat-8.0.20.tar.gz 并传至/usr/local/

# (/usr/local)tar -xvf apache-tomcat-8.0.20.tar.gz   (local下多一个apache-tomcat-8.0.20目录)
# (/usr/local)ln -s /usr/local/apache-tomcat-8.0.20/ /usr/local/tomcat
安装路径:/usr/local/apache-tomcat-8.0.20

### 安装MySQL Server端

centos6中使用此方法:

#yum install mysql-server

而在centos7中报错如下:

# yum install mysql-server
 Loaded plugins: fastestmirror, product-id, subscription-manager
This system is not registered with Subscription Management. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
No package mysql-server available.
Error: Nothing to do
# yum search mysql
 Loaded plugins: fastestmirror, product-id, subscription-manager
This system is not registered with Subscription Management. You can use subscription-manager to register.
Loading mirror speeds from cached hostfile
====================================== N/S matched: mysql ======================================
MySQL-python.x86_64 : An interface to MySQL
akonadi-mysql.x86_64 : Akonadi MySQL backend support
apr-util-mysql.x86_64 : APR utility library MySQL DBD driver
dovecot-mysql.x86_64 : MySQL back end for dovecot
freeradius-mysql.x86_64 : MySQL support for freeradius
libdbi-dbd-mysql.x86_64 : MySQL plugin for libdbi
mysql-connector-java.noarch : Official JDBC driver for MySQL
mysql-connector-odbc.x86_64 : ODBC driver for MySQL
perl-DBD-MySQL.x86_64 : A MySQL interface for Perl
php-mysql.x86_64 : A module for PHP applications that use MySQL databases
php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
qt-mysql.i686 : MySQL driver for Qt's SQL classes
qt-mysql.x86_64 : MySQL driver for Qt's SQL classes
qt3-MySQL.i686 : MySQL drivers for Qt 3's SQL classes
qt3-MySQL.x86_64 : MySQL drivers for Qt 3's SQL classes
redland-mysql.x86_64 : MySQL storage support for Redland
rsyslog-mysql.x86_64 : MySQL support for rsyslog
mariadb.x86_64 : A community developed branch of MySQL
mariadb-devel.i686 : Files for development of MariaDB/MySQL applications
mariadb-devel.x86_64 : Files for development of MariaDB/MySQL applications
mariadb-libs.i686 : The shared libraries required for MariaDB/MySQL clients
mariadb-libs.x86_64 : The shared libraries required for MariaDB/MySQL clients

  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 参考该百度经验或者此链接

  • 最终安装方法

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

找到mysql5.6的centos的repo源,终于解决mysql的安装问题:                         
# (/usr/local)wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm(下载mysql的repo源)                                
# (/usr/local)rpm -ivh mysql-community-release-el7-5.noarch.rpm    (安装这个包后,会获得两个mysql的yum repo源)
 结果如下:                                                                     
Preparing...                          ################################# [100%]  
Updating / installing...                                                        
   1:mysql-community-release-el7-5    ################################# [100%]

[amy@localhost local]$ cd /etc/yum.repos.d
[amy@localhost yum.repos.d]$ ll
total 12
-rw-r--r--. 1 root root  615 Mar 27 07:01 CentOS7-Base-163.repo
-rw-r--r--  1 root root 1209 Jan 29  2014 mysql-community.repo
-rw-r--r--  1 root root 1060 Jan 29  2014 mysql-community-source.repo

# yum install mysql-community-server

Loaded plugins: fastestmirror, product-id, subscription-manager
This system is not registered with Subscription Management. You can use subscription-manager to register.
base                                                                     | 3.6 kB  00:00:00     
extras                                                                   | 3.4 kB  00:00:00     
mysql-connectors-community                                               | 2.5 kB  00:00:00     
mysql-tools-community                                                    | 2.5 kB  00:00:00     
mysql56-community                                                        | 2.5 kB  00:00:00     
...................
Installed:
  mysql-community-libs.x86_64 0:5.6.23-3.el7    mysql-community-server.x86_64 0:5.6.23-3.el7   

Dependency Installed:
  mysql-community-client.x86_64 0:5.6.23-3.el7   mysql-community-common.x86_64 0:5.6.23-3.el7  

Replaced:
  mariadb-libs.x86_64 1:5.5.41-2.el7_0                                                          

Complete!
  • 安装Mysql后配置
(centos6、7中都要执行的步骤)成功安装之后重启mysql服务
# service mysqld restart
查看mysql配置文件/etc/my.cnf
[amy@localhost etc]$ cat my.cnf
# # For advice on how to change settings please see
..........
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid                                                                                                                              
查找mysql的安装路径                                                             
# [root@docker188 usr]# find /usr -name mysql                                    
/usr/bin/mysql                                                                  
/usr/lib64/mysql                                                                
/usr/share/mysql                                                                

初次安装完Mysql后,默认没有密码,需要设置密码:

(法一)

#mysql_secure_installation MySQL安全配置向导mysql_secure_installation详解

(法二)

初次安装mysql后root账户是没有密码的,置密码的方法 : mysql -u root

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

下载并配置JDBC MySQL驱动

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

环境变量设置

 根据自己安装软件的路径在/etc/profile文件末尾添加:
# vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_40
export CATALINA_HOME=/usr/local/apache-tomcat-8.0.20
export PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
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

保存后使当前配置生效:
# source /etc/profile  (若提示命令找不到,则使用下面一行的命令)
# . /etc/profile   (注意.和/etc/profile之间有空格)

然后再使用命令查看是否安装成功,命令如下:
[amy@localhost etc]$ java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)  说明安装成功了

安装TPC_W并修改部分源码

修改源码

所有要修改的文件: 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

[amy@localhost populate]$ pwd
/home/amy/tpcw1.0/populate
[amy@localhost populate]$ cat populate_images
文件一:tpcw1.0\populate\populate_images
① #!/usr/local/bin/perl ------> #!/usr/bin/perl
② $DEST_DIR="/local_home/cain/Images";------>   
$DEST_DIR="/usr/local/apache-tomcat-6.0.26/webapps/tpcw/Images";
文件二: tpcw1.0\populate\TPCW_Populate.java
③ private static final String driverName = "com.mysql.jdbc.Driver";                    private  static final String dbName = "jdbc:mysql://localhost:3306/tpcw2";
将代码中所有数据库插入语句中涉及的表名均改为小写,以解决填充数据库时因该表不存在而报错。
④ PreparedStatement statement = con.prepareStatement  
        ("INSERT INTO address(ADDR_ID,ADDR_STREET1,ADDR_STREET2,ADDR_CITY,ADDR_STATE,ADDR_ZIP,ADDR_CO_ID) VALUES (?, ?, ?, ?, ?, ?, ?)");
⑤ 更改数据库连接涉及的用户、密码信息:
    try {  
     Class.forName(driverName);
          con=DriverManager.getConnection(dbName,"root","password");//(dbName);
        con.setAutoCommit(false);
         }
文件三: tpcw1.0\servlets\TPCW_Database.java
⑥ static String driverName = "com.mysql.jdbc.Driver";
⑦ static String jdbcPath = "jdbc:mysql://localhost:3306/tpcw2";
⑧ private static final boolean use_connection_pool = false;
⑨ try {
         Class.forName(driverName).newInstance();
         Connection con;
         while(true){
         try{
           con = DriverManager.getConnection(jdbcPath, "root", "password");
           break;
          }
        }
⑩ 将代码中的所有db2语句改成MySql语句。
所有语句中FETCH FIRST 5 ROWS ONLY更改为limit 5
        更改错误表名及数据库操作
11  PreparedStatement updateLogin = con.prepareStatement
	    ("UPDATE customer SET c_login = CURRENT_TIMESTAMP, c_expiration = (CURRENT_TIMESTAMP + INTERVAL 2 HOUR) WHERE c_id = ?");
		/*("UPDATE customer SET c_login = CURRENT TIMESTAMP, c_expiration = CURRENT TIMESTAMP + 2 HOURS WHERE c_id = ?");*/
12 	 PreparedStatement insert_cart = con.prepareStatement
		("INSERT into shopping_cart (sc_id, sc_time) VALUES ((select temp.cc from ( SELECT COUNT(*) cc FROM shopping_cart) temp),CURRENT_TIMESTAMP)");
/*		    ("INSERT into shopping_cart (sc_id, sc_time) " +
		     "VALUES ((SELECT COUNT(*) FROM shopping_cart)," +
		     "CURRENT TIMESTAMP)");*/
13  PreparedStatement statement = con.prepareStatement
		("INSERT into cc_xacts (cx_o_id, cx_type, cx_num, cx_name, cx_expire, cx_xact_amt, cx_xact_date, cx_co_id) " +
		 "VALUES (?, ?, ?, ?, ?, ?, CURRENT_DATE, (SELECT co_id FROM address, country WHERE addr_id = ? AND addr_co_id = co_id))");
/*		("INSERT into cc_xacts (cx_o_id, cx_type, cx_num, cx_name, cx_expire, cx_xact_amt, cx_xact_date, cx_co_id) " +
				 "VALUES (?, ?, ?, ?, ?, ?, CURRENT DATE, (SELECT co_id FROM address, country WHERE addr_id = ? AND addr_co_id = co_id))");
			    */
14 PreparedStatement insert_row = con.prepareStatement
	    		("INSERT into orders (o_id, o_c_id, o_date, o_sub_total, " +
	    				 "o_tax, o_total, o_ship_type, o_ship_date, " +
	    				 "o_bill_addr_id, o_ship_addr_id, o_status) " +
	    				 "VALUES (?, ?, CURRENT_DATE, ?, 8.25, ?, ?, CURRENT_DATE + INTERVAL ? DAY, ?, ?, 'Pending')");
/*		("INSERT into orders (o_id, o_c_id, o_date, o_sub_total, " +
		 "o_tax, o_total, o_ship_type, o_ship_date, " +
		 "o_bill_addr_id, o_ship_addr_id, o_status) " +
		 "VALUES (?, ?, CURRENT DATE, ?, 8.25, ?, ?, CURRENT DATE + ? DAYS, ?, ?, 'Pending')");*/
    文件四: tpcw1.0\servlets\TPCW_Util.java
15 public static final String SESSION_ID="jsessionid=";
    文件五: tpcw1.0\rbe\RBE.java
16 public static String www1 = "http://localhost:8080/";
        new StrStrPattern(";jsessionid=");
        public static final String field_sessionID = ";jsessionid=";
17 修改下面4个文件中,
public class Debug {  public static void assert(boolean assertCond, String message)
将函数名assert改成assert1,以解决直接编译出错问题。
       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 ```

TPC-W TPC-W Java Implementation TPCW_home_interaction TPCW_home_interaction TPCW_shopping_cart_interaction TPCW_shopping_cart_interaction TPCW_order_inquiry_servlet TPCW_order_inquiry_servlet TPCW_order_display_servlet TPCW_order_display_servlet TPCW_search_request_servlet TPCW_search_request_servlet TPCW_execute_search TPCW_execute_search TPCW_new_products_servlet TPCW_new_products_servlet TPCW_best_sellers_servlet TPCW_best_sellers_servlet TPCW_product_detail_servlet TPCW_product_detail_servlet TPCW_customer_registration_servlet TPCW_customer_registration_servlet TPCW_buy_request_servlet TPCW_buy_request_servlet TPCW_buy_confirm_servlet TPCW_buy_confirm_servlet TPCW_admin_request_servlet TPCW_admin_request_servlet TPCW_admin_response_servlet TPCW_admin_response_servlet TPCW_home_interaction /TPCW_home_interaction TPCW_shopping_cart_interaction /TPCW_shopping_cart_interaction TPCW_order_inquiry_servlet /TPCW_order_inquiry_servlet TPCW_order_display_servlet /TPCW_order_display_servlet TPCW_search_request_servlet /TPCW_search_request_servlet TPCW_execute_search /TPCW_execute_search TPCW_new_products_servlet /TPCW_new_products_servlet TPCW_best_sellers_servlet /TPCW_best_sellers_servlet TPCW_product_detail_servlet /TPCW_product_detail_servlet TPCW_customer_registration_servlet /TPCW_customer_registration_servlet TPCW_buy_request_servlet /TPCW_buy_request_servlet TPCW_buy_confirm_servlet /TPCW_buy_confirm_servlet TPCW_admin_request_servlet /TPCW_admin_request_servlet TPCW_admin_response_servlet /TPCW_admin_response_servlet

### 在MySQL中创建数据库tpcw2

[amy@docker188 ~]$ mysql -uroot -proot Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. …… Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> CREATE DATABASE tpcw2; Query OK, 1 row affected (0.00 sec) mysql> exit ```

开始安装TPC-W

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

在数据库tpcw2中生成数据

错误一及解决方法:

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

错误二及解决方法: ``` 运行文件TPCW_Populate.class报错如下: [amy@docker188 populate]$ java TPCW_Populate Beginning TPCW Database population. java.sql.SQLException: Access denied for user ‘root’@’localhost’ (using password: NO) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) ………

解决方法:在188服务器搭建mysql时给了root用户密码root,代码中没有给密码.代码更改如下: try {
Class.forName(driverName);
con = DriverManager.getConnection(dbName, “root”, “root”);//(dbName);此处添加密码root con.setAutoCommit(false);//解决java.sql.SQLException: Can’t call commit when autocommit=true
}

删除TPCW_Populate.class文件,重新编译运行。 错误三及解决方法: [amy@docker188 populate]$ javac -encoding gbk TPCW_Populate.java [amy@docker188 populate]$ java TPCW_Populate Beginning TPCW Database population. Already dropped table ADDRESS Already dropped table AUTHOR Already dropped table CC_XACTS Already dropped table COUNTRY Already dropped table CUSTOMER Already dropped table ITEM Already dropped table ORDER_LINE Already dropped table ORDERS Already dropped table SHOPPING_CART Already dropped table SHOPPING_CART_LINE Done deleting tables! Created table ADDRESS Created table AUTHOR Created table CC_XACTS Created table COUNTRY Created table CUSTOMER Created table ITEM Created table ORDER_LINE Created table ORDERS Created table SHOPPING_CART Created table SHOPPING_CART_LINE Done creating tables! Populating ADDRESS Table with 288000 addresses 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 Populating AUTHOR Table with 2500 authors Unable to populate AUTHOR table com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘tpcw2.AUTHOR’ doesn’t exist at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361) at TPCW_Populate.populateAuthorTable(TPCW_Populate.java:333) at TPCW_Populate.main(TPCW_Populate.java:93)

出现报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘tpcw2.AUTHOR’ doesn’t exist 代码更改如下:try { PreparedStatement statement = con.prepareStatement (“INSERT INTO author(A_ID,A_FNAME,A_LNAME,A_MNAME,A_DOB,A_BIO) VALUES (?, ?, ?, ?, ?, ?)”); 依次同上,报错:Unable to populate COUNTRY table com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘tpcw2.COUNTRY’ doesn’t exist 成功执行的样子: [amy@docker188 populate]$ javac -encoding gbk TPCW_Populate.java [amy@docker188 populate]$ java TPCW_Populate Beginning TPCW Database population. Already dropped table ADDRESS Already dropped table AUTHOR Already dropped table CC_XACTS Already dropped table COUNTRY Already dropped table CUSTOMER Already dropped table ITEM Already dropped table ORDER_LINE Already dropped table ORDERS Already dropped table SHOPPING_CART Already dropped table SHOPPING_CART_LINE Done deleting tables! Created table ADDRESS Created table AUTHOR Created table CC_XACTS Created table COUNTRY Created table CUSTOMER Created table ITEM Created table ORDER_LINE Created table ORDERS Created table SHOPPING_CART Created table SHOPPING_CART_LINE Done creating tables! Populating ADDRESS Table with 288000 addresses 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 Populating AUTHOR Table with 2500 authors Populating COUNTRY with 92 countries Populating CUSTOMER Table with 144000 customers Complete (in 10,000’s): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Populating ITEM table with 10000 items Populating ORDERS, ORDER_LINES, CC_XACTS with 129600 orders Complete (in 10,000’s): 1 2 3 4 5 6 7 8 9 10 11 12 Adding Indexes Done 继续配置 [amy@docker188 populate]$ sudo cp TPCW_Populate.class ${CATALINA_HOME}/webapps/servlet/WEB-INF/classes [sudo] password for amy: [amy@docker188 populate]$ cd ${CATALINA_HOME}/webapps/servlet/WEB-INF/ [amy@docker188 WEB-INF]$ ll total 0 drwxr-xr-x 2 root root 32 Mar 29 22:41 classes drwxr-xr-x 2 root root 48 Mar 27 22:18 lib ```

生成并部署图片

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

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

编译并部署servlets

[amy@docker188 servlets]$ javac *.java
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
(当前目录下每个都生成字节码,没报错就行。)

# cp *.class ${CATALINA_HOME}/webapps/servlet/WEB-INF/classes (总是忘记这一步)
# vi  ${CATALINA_HOME}/webapps/servlet/WEB-INF/web.xml

编译RBE

[amy@docker188 util]$ pwd
/home/amy/tpcw1.0/rbe/util
[amy@docker188 util]$ javac *.java
(执行完什么反应也没有,说明没错)

[amy@docker188 util]$ cd ../args
[amy@docker188 args]$ mkdir -p rbe/util
[amy@docker188 args]$ cp ../util/*.class rbe/util/
[amy@docker188 args]$ pwd
/home/amy/tpcw1.0/rbe/args
[amy@docker188 args]$ cd rbe/util/
[amy@docker188 util]$ ll
total 44
-rw-r--r-- 1 amy amy  749 Mar 30 09:25 AbCharStrPattern.class
-rw-r--r-- 1 amy amy  421 Mar 30 09:25 CharRangeStrPattern.class
-rw-r--r-- 1 amy amy 1975 Mar 30 09:25 CharSetStrPattern.class
-rw-r--r-- 1 amy amy  364 Mar 30 09:25 CharStrPattern.class
-rw-r--r-- 1 amy amy  629 Mar 30 09:25 Debug.class
-rw-r--r-- 1 amy amy  508 Mar 30 09:25 DebugError.class
-rw-r--r-- 1 amy amy 2970 Mar 30 09:25 Histogram.class
-rw-r--r-- 1 amy amy 2833 Mar 30 09:25 Pad.class
-rw-r--r-- 1 amy amy 1007 Mar 30 09:25 StringPattern.class
-rw-r--r-- 1 amy amy 1063 Mar 30 09:25 StrStrPattern.class
-rw-rw-r-- 1 amy amy 3004 Mar 30 09:25 TestPattern.class

[amy@docker188 args]$ mkdir rbe/args
[amy@docker188 args]$ javac *.java
Note: ArgDB.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[amy@docker188 args]$ cp *.class rbe/args/
[amy@docker188 args]$ mv rbe ../
[amy@docker188 args]$ pwd
/home/amy/tpcw1.0/rbe/args
[amy@docker188 args]$ cd ..
[amy@docker188 rbe]$
[amy@docker188 rbe]$ javac *.java
EB.java:317: warning: unreachable catch clause
    catch (IOException ioe) {
    ^
  thrown type MalformedURLException has already been caught
Note: RBE.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 warning

测试成功安装

测试TPC-W:

启动tomcat
[amy@docker188 bin]$ pwd
/usr/local/apache-tomcat-8.0.20/bin
[amy@docker188 bin]$ sudo ./startup.sh
[sudo] password for amy:
Using CATALINA_BASE:   /usr/local/apache-tomcat-8.0.20
Using CATALINA_HOME:   /usr/local/apache-tomcat-8.0.20
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.0.20/temp
Using JRE_HOME:        /
Using CLASSPATH:       /usr/local/apache-tomcat-8.0.20/bin/bootstrap.jar:/usr/local/apache-tomcat-8.0.20/bin/tomcat-juli.jar
Tomcat started.

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

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

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

运行TPC-W

[amy@docker188 ~]$ cd tpcw1.0/
[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: mysqk>GRANT USAGE ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION; mysql>grant all privileges on *.* to 'test'@'%' identified by 'test'; mysql>flush privileges;//刷新系统权限表 下面这种方法会报错: mysql>insert into mysql.user(Host,User,Password) values("%","test",password("test"));会报错!!! (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服务器。


Similar Posts

上一篇 Ubuntu安装JDK

Comments