JBOSS设置数据源和测试页面-jboss5.0.1
步骤:
1,设置数据源配置文件
2,添加数据库驱动程序到jboss 的lib包中,在jboss_home/server/xxxx/lib/下
3,测试数据库连接,如果命名为miotour,那么使用中就是java:/miotour
DataSource ds =(DataSource)ctx.lookup(“java:/miotour”);
首先,需要说明的是,Jboss 的数据源有两种。
从截图中可以看到,在数据源的部分有两种类型的数据源。
local-tx-datasource
no-tx-datasource
xa-datasource
在 Jboss 的docs/examples/jca中有各种数据库的数据源配置模版
数据源配置文件总是以*-ds.xml文件命名
local-tx-datasource —–仅支持本地事务
这是最常用的,配置LocalTxConnectionManager服务,该ConnectionManager只支持“本地事 务”,确切的说,只支持一个数据源的事务,不支持分布事务,本地不是说数据源指定的数据库在本地,可以在任何地方,但local-tx- datasource不能在一个事务中访问两个数据源,即使这两个数据源配置是一样的。
xa-datasource —–分布式事务
该数据源配置XATxConnectionManager服务。XA事务也就是通常所说的分布式事务。在一个事务中可以有多个资源(如数据源),但 这些资源必须能够支持XA事务,支持XA事务的数据库在docs/examples/jca目录中都有一个xa-ds.xml文件
所以,我给大家提供一个local-tx-datasource 的默认配置文件。
下载地址:http://download.miotour.com/jboss /dataosource/miotour-ds.zip
下载地址:http://download.miotour.com/jboss /dataosource/test.zip
配置文件:除去红色部分需要设置外,其余都是Jboss 自动添加
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<datasources>
<
local-tx-datasource >
<jndi-name>
miotour
</jndi-name>
<rar-name>
jboss -local-jdbc.rar</rar-name>
<use-java-context>true</use-java-context>
<connection-definition>javax.sql.DataSource</connection-definition>
<jmx-invoker-name>
jboss :service=invoker,type=jrmp</jmx-invoker-name>
<min-pool-size>0</min-pool-size>
<max-pool-size>10</max-pool-size>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>30</idle-timeout-minutes>
<prefill>false</prefill>
<background-validation>false</background-validation>
<background-validation-millis>0</background-validation-millis>
<validate-on-match>true</validate-on-match>
<statistics-formatter>org.
jboss .resource.statistic.pool.JBossDefaultSubPoolStatisticFormatter</statistics-formatter>
<isSameRM-override-value>false</isSameRM-override-value>
<allocation-retry>0</allocation-retry>
<allocation-retry-wait-millis>5000</allocation-retry-wait-millis>
<security-domain xsi:type=”securityMetaData” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”/>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
<type-mapping>Oracle9i</type-mapping>
<local-transaction/>
<user-name>
miotour
</user-name>
<password>
miotour
</password>
<check-valid-connection-sql>SELECT * FROM DUAL</check-valid-connection-sql>
<exception-sorter-class-name>org.
jboss .resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
<set-tx-query-timeout>false</set-tx-query-timeout>
<query-timeout>0</query-timeout>
<use-try-lock>60000</use-try-lock>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<connection-url>jdbc:oracle:thin:@10.10.10.10:1521:miotour</connection-url>
</
local-tx-datasource >
</datasources>
2,测试数据库的文件
<%@ page contentType=”text/html;charset=utf-8″%>
<%@ page import=”java.sql.*”%>
<%@ page import=”javax.sql.*”%>
<%@ page import=”javax.naming.*”%>
<html>
<body>
<% Context ctx = new InitialContext();
Connection conn=null;
ctx = new InitialContext();
DataSource ds =(DataSource)ctx.lookup(“java:/miotour”);
conn = ds.getConnection();
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql=”select * from vender”;
ResultSet rs=stmt.executeQuery(sql);
%>
<% while(rs.next()) {
out.println(rs.getString(1));
out.println(rs.getString(2));
out.println(rs.getString(3));
}
%>
<% out.print(“successed!”);
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
spring配置文件中
<!--在mysql-ds.xml中设置
use-java-context为false后 ,
注意没有前缀java:-->
<
jee:jndi-lookup
id
="dataSource"
jndi-name
="dabase1"
/>
<
bean
id
="txManager"
class
="org.springframework.transaction.jta.JtaTransactionManager"
>
<!--手动注入,否则会报transactionmanager not bound-->
<
property
name
="transactionManagerName "
value
="java:/TransactionManager "
/>
</
bean
>
conf/standardjbosscmp-jdbc.xml 里的
<defaults>
<datasource>java:/ configuration_db</datasource>也要改成
<defaults>
<datasource>configuration_db </datasource>
遗留问题:
如果使用默认设置use-java-context为true,然后使用jndi name为java:数据源名,很奇怪,在jboss项目启动有错误
在tomcat中要换回 java:/数据源名
在spring容器中使用jndi的获得数据库连接的配置中,tomcat要加前缀java:comp/env/,而websphere不用
websphere没用过,他和jboss都属于应用服务器.tomcat只是一个web容器!一个应用服务器可以包含很多容器.
websphere不用因为服务器已经替你封装好了