二、给JBoss配置MySql数据源
下面的JBOSS_HOME是指JBoss的安装路径,比如/usr/local/jboss
1、把MySql的驱动拷到JBoss的$JBOSS_HOME/server/default/lib目录下,并把它加入到CLASSPATH环境变量中。
比如MySql驱动是mysql-connector-java-5.0.3-bin.jar那么把下面一行加入到~/.bash_profile
文件中:
CLASSPATH=$CLASSPATH:/JBOSS_HOME/server/default/lib/mysql-connector-java-5.0.3-bin.jar
2、把$JBOSS_HOME/docs/examples/jca/mysql-ds.xml文件拷到$JBOSS_HOME/server/default/deploy目录下,
然后把内容修改成如下内容:
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>123456</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
注意,用户名和密码要改成你实际的用户名和密码,localhost可以改成实际的主机名。
这个时候JBoss只能够使用8080端口,把开
$JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/server.xml
文件,找到如下内容:
<Connector port="8080" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"/>
把port="8080"改成port="80",这样JBoss就可以使用80端口号了
三、测试例子
打开mysql,使用test数据库,创建一个表mytable,并插入几条记录,命令如下:
CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), addr VARCHAR(30));
insert into mytable(name, sex, addr) values("plusboy", 'M', "Guangzhou");
insert into mytable(name, sex, addr) values("YanDingcheng", 'M', "Guangzhou");
编写一个myTest.jsp程序用于测试,把该文件放到目录
$JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/ROOT.war
下面。
文件名:myTest.jsp
String driverName
= "com.mysql.jdbc.Driver";String userName
= "root";String userPasswd
= "";String dbName
= "test";String tableName
= "mytable";
String url
="jdbc:mysql://lvs1/"+dbName+"?user="+userName+"&password="+userPasswd;Class.forName(driverName).newInstance();
Connection connection
=DriverManager.getConnection(url);Statement statement
= connection.createStatement();String sql
= "SELECT * FROM " + tableName;ResultSet rs
= statement.executeQuery(sql);//获得数据结果集合
ResultSetMetaData rmeta = rs.getMetaData();
//确定数据集的列数,亦字段数
int numColumns=rmeta.getColumnCount();
// 输出每一个数据值
out.print("name");
out.print(
"|");out.print(
"sex");out.print(
"|");out.print(
"addr"); out.print("<br>");while(rs.next()) {
out.print(rs.getString(
1)+" ");out.print(
"|");out.print(rs.getString(
2)+" ");out.print(
"|");out.print(rs.getString(
3));out.print(
"<br>");}
out.print(
"<br>");out.print(
"数据库操作成功,恭喜你");rs.close();
statement.close();
connection.close();
%>重启JBoss和MySql。
在浏览器地址栏输入http://localhost/myTest.jsp
哈哈,数据库操作成功。
四、解决MySql重启后JBoss重连问题
jboss的连接池支持根据SQLException的类型来确定是应用的异常还是不可恢复的数据库连接的异常,因此可以在
datasource 的配置里加上
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>
这样就不需要每次获取连接的时候都执行一次查询了,性能提高了很多,
只有当发生SQLException并且他侦测到这个异常导致连接无法使用时才会丢弃这个连接