JBOSS发布JNDI数据源

基本环境: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数据源成功


你可能感兴趣的:(jboss)