解决Jboss4.2.2 JNDI 资源无法找到的问题

由于最近网站一直出现Connection cannot open的问题,所以决定更换默认的Hibernate数据源。

方式有很多,可以考虑Hibernate推荐的连接池c3p0或者proxool,虽然dbcp也比较有名,但由hiberater已不对其进行支持所以也没有考虑,据说是因为Bug太多,具体也没去验证。

首先尝试了proxool,配置好后Connection cannot open的问题的确解决,但是proxool对spring的支持貌似存在一些问题,一些int型的参数不能在spring中注入。

配置文件如下:

<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
	    <property name="driver" value="com.mysql.jdbc.Driver" />
	    <property name="driverUrl" value="jdbc:mysql://localhost:3306/test?user=msyql
&amp;password=pwd&amp;characterEncoding=UTF-8
&amp;zeroDateTimeBehavior=convertToNull" />
	    <property name="user" value="mysql" />
	    <property name="password" value="pwd" />
	    <property name="alias" value="test" />
	    <property name="houseKeepingTestSql" value="select CURRENT_DATE" />
</bean>

 如果设置了maxConnection这些int型的参数spring会报类型转换错误,为了通过检测所以都删掉了,但这样的配置不会有很好的效果。

 

经过一些考虑,用第三方的数据源,不如使用jboss自带的连接池,所以开始配置jndi:

配置步骤如下:

1、拷贝$JBOSS_HOME/docs/examples/jca/mysql-ds.xml到$JBOSS_HOME/server/default/deploy/mysql-ds.xml

     由于我是用的是mysql数据库,所以拷贝了mysql-ds.xml,其他数据库拷贝对应的文件。

2、拷贝好文件后对mysql-ds.xml进行配置,方法比较简单,这里就不贴代码了。

     但配置中加了几个元素

    <min-pool-size>5</min-pool-size> 最小连接数
    <max-pool-size>100</max-pool-size> 最大连接数

3、拷贝mysql驱动到jboss的lib下,否则启动加载时会报错

4、修改spring配置文件

     由于spring提供了对jndi的支持,所以配置比较简单,但是实现的类要写对。代码如下:

 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    	<property name="jndiName" value="java:/MySqlDS"/>
   	<property name="lookupOnStartup" value="true"/>
</bean>

这里的jndiName要和mysql-ds.xml中配置的jndiName对应,但是名字前要加上java:/

 到这里配置基本结束了,启动jboss看是否运行正常。

 如果命令行中输出了:

 Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=MySqlDS' to JNDI name 'java:MySqlDS'

 则说明jboss已经找到了这个jndi,但是意外的是spring在bind这个jndi的时候却抛出了MySqlDS没有找到的异常。

 

 尝试按照完善的方法尝试了多个jndi的别名都无效,如MySqlDS 、java:MySqlDS 、java:comp/env/MySqlDS。

 最后,只能先尝试在mysql-ds.xml中加入

 <use-java-context>false</use-java-context> 这个参数默认为true,设置为false后可以使用MySqlDS直接访问 JNDI,所以再修改spring配置文件为

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    	<property name="jndiName" value="MySqlDS"/>
   	<property name="lookupOnStartup" value="true"/>
</bean

 这种方法的确可行。

 

 但还是没有找到为什么不能用java:/MySqlDS的原因,而且<use-java-context>false</use-java-context>存在着一定的安全隐患。所以我们来看看为什么使用java:/MySqlDS无法绑定。

 经过了一系列的折腾,最后发现竟然是一个jboss-archive-browsing.jar的包造成的,所以删掉lib中的这个包后就能正常用java:/MySqlDS访问了。

希望对网上有同样问题的朋友有所帮助。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值