基本环境:JBOSS-5.1.0GA
JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。可去JBOSS官网下载最新的JBOSS服务器。下面开始介绍JBOSS发布数据源,并通过Java代码测试
第一步:启动JBOSS
我们安装了JDK后,将下载下来的JBOSS解压,打开解压后的jboss目录,在bin目录下点击jbosssvc.exe启动JBOSS,但是发现JBOSS报异常,不能正常启动,异常为:
Deployment "AttachmentStore" is in error due to: java.lang.IllegalArgumentException: Wrong arguments. new for target java.lang.reflect.Constructor expected=[java.net.URI] actual=[java.io.File]
JBOSS部署"AttachmentStore"依赖java.io.File,但却没有传入java.io.File
解决方法:在jboss解压后文件里面找到server\default\conf\bootstrap\profile.xml将名称为AttachmentStore的bean修改为:
<bean name="AttachmentStore" class="org.jboss.system.server.profileservice.repository.AbstractAttachmentStore">
<constructor><parameter class="java.io.File"><inject bean="BootstrapProfileFactory" property="attachmentStoreRoot" /></parameter></constructor>
<property name="mainDeployer"><inject bean="MainDeployer" /></property>
<property name="serializer"><inject bean="AttachmentsSerializer" /></property>
<property name="persistenceFactory"><inject bean="PersistenceFactory" /></property>
</bean>
再次启动JBOSS,启动正常。
第二步:发布数据源
我使用的数据库是MySQL,
1、首先将mysql的驱动jar文件拷贝到jboss解压文件后server\default\lib目录里面,
2、在docs\examples\jca找到mysql-ds.xml将该文件拷贝到server\default\deploy目录下面
3、打开mysql-ds.xml可以看到数据的链接配置,根据自己的数据库修改好配置,下面是我自己的配置,大家可以根据自己的数据库,具体进行修改
<local-tx-datasource>
<jndi-name>MySqlDataSource</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:mysql://localhost:3306/localserver</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>sa123</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>
配置好后,启动Jboss,打开浏览器,访问http://localhost:8080/jmx-console/,在页面左侧点击jboss.jca,右侧可查看到
name=MySqlDataSource,service=DataSourceBinding
name=MySqlDataSource,service=LocalTxCM
name=MySqlDataSource,service=ManagedConnectionFactory
name=MySqlDataSource,service=ManagedConnectionPool
说明MySQL数据源发布成功
第三步:通过Java代码测试数据源
打开eclipse新建一个Java项目,将JBOSS解压后目录下的client文件夹里面所有的jar包引入项目,引入junit测试包,新建一个jndi.properties文件,配置JBOSS JNDI的URL和factory如下:
java.naming.provider.url=jnp://localhost
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
新建测试类,
public class TestDataSource {
@Test
public void getDataSource() throws NamingException, SQLException{
//jndi上下文
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("MySqlDataSource");
Connection connection = ds.getConnection();
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM user WHERE user_id = 1");
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
System.out.println(rs.getInt(1));
}
}
}
启动Jboss,执行测试,发现数据源不能拿到的,但是我们的数据源是发布成功的,查找资料后发现需要在发布的数据源mysql-ds.xml里面加上<use-java-context>false</use-java-context>
然后执行测试,测试可通过,到此JBOSS发布JNDI数据源成功