jboss下部署配置spring jndi

项目cros :   

环境:            

 jboss-4.2.3.GA
                spring2.5.6
        去jboss官方下载jboss服务器,http://www.jboss.org/jbossas/downloads/。建议下载jboss-4.2.3.GA这个版本的jboss,个人感觉还是这个版本的jboss比较稳定
        解压下载下来的jboss压缩文件,笔者解压到D:\jboss-4.2.3.GA
        笔者以oracle数据库来说明如何在jboss下配置jndi 以及整合spring
        拷贝oracle-ds文件
        去D:\jboss-4.2.3.GA\docs\examples\jca目录下拷贝oracle-ds文件到D:\jboss-4.2.3.GA\server\default\deploy目录下改名即可
        大致内容如下:

<? xml version="1.0" encoding="UTF-8" ?>
< datasources >
  
< local-tx-datasource >
    
< jndi-name > KBSDS </ jndi-name >
    
< connection-url > jdbc:oracle:thin:@192.168.4.243:1521:future </ connection-url >
    
< driver-class > oracle.jdbc.driver.OracleDriver </ driver-class >
    
< use-java-context > false </ use-java-context >
    
< user-name > knowledge </ user-name >
    
< password > knowledge </ password >
    
< min-pool-size > 5 </ min-pool-size >
    
< max-pool-size > 20 </ max-pool-size >
    
< exception-sorter-class-name > org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter </ exception-sorter-class-name >
      
< metadata >
         
< type-mapping > Oracle9i </ type-mapping >
      
</ metadata >
  
</ local-tx-datasource >
</ datasources >
jndi-name:不用多说了,当然是为该jndi取一名称这里使用KBSDS
其他几个属性不做过多解释
use-java-context:属性默认为true,如未配置该属性或该属性配置为true,那么jboss在启动的时候jndi的名称前会加上java:   这里我们jndi的名称为KBSDS,那么未配置该属性或该属性为true的话,你在spring中使用jndi时指定的jndiName就应该为java:KBSDS,若配置为false,那么jboss服务器不会为你加上java: 你在spring中jndiName应当配置为KBSDS,即与jndi-name属性值等同。这里为了方便期间设置该属性为false
        拷贝oracle驱动
        拷贝oracle驱动 class12.jar到jboss的如下目录
        D:\jboss-4.2.3.GA\lib
        D:\jboss-4.2.3.GA\server\default\lib
        切记数据库驱动拷贝到D:\jboss-4.2.3.GA\server\default\lib目录下,否则即使你jndi配置的再怎么正确都会报如下错误,该错误在jboss启动的时候并不会报出,只有在正式遇数据库进行交互的时候才会报此错误,大概错误是这样的。此处花了好长时间才解决。
org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection  for  transaction; nested exception is org.jboss.util.NestedSQLException: Could not create connection;  -  nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver  class  specified  for  URL:  class : oracle.jdbc.driver.OracleDriver, url: jdbc:oracle:thin:@ 192.168 . 4.243 : 1521 :future);  -  nested throwable: (org.jboss.resource.JBossResourceException: Could not create connection;  -  nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver  class  specified  for  URL:  class : oracle.jdbc.driver.OracleDriver, url: jdbc:oracle:thin:@ 192.168 . 4.243 : 1521 :future))
    org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:
238 )
    org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:
374 )
    org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:
263 )
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:
101 )
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
171 )
    org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:
89 )
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
171 )
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:
204 )
    $Proxy67.managerLogin(Unknown Source)
    com.future.knowledges.action.ManagerAction.execute(ManagerAction.java:
62 )
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39 )
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25 )
        配置spring配置文件
在applicationContext.xml中配置如下信息:
< bean name = " dataSource "   class = " org.springframework.jndi.JndiObjectFactoryBean " >  
        
< property name = " jndiName " >
            
< value > KBSDS </ value >
        
</ property >
    
</ bean >
此种方式指定jndiName为KBSDS并未java:前缀,需要你手动在jboss的jndi配置文件中设置use-java-context属性为fasle,若未设置该属性或设置为true那么此处应该是这样子的
< bean name = " dataSource "   class = " org.springframework.jndi.JndiObjectFactoryBean " >  
        
< property name = " jndiName " >
            
< value > java:KBSDS </ value >
        
</ property >
    
</ bean >
需要你手动加上java:前缀后面跟jboss下配置的jndi的名称
其实这里的配置主要是根据jboss服务器启动时控制台给出的信息来配置的
设置use-java-context为false时控制台给出的jndi信息
11 : 13 : 34 , 250  INFO  [ConnectionFactoryBindingService] Bound ConnectionManager  ' jboss.jca:service=ConnectionFactoryBinding,name=JmsXA '  to JNDI name  ' java:JmsXA '
11 : 13 : 34 , 359  INFO  [WrapperDataSourceService] Bound ConnectionManager  ' jboss.jca:service=DataSourceBinding,name=KBSDS '  to JNDI name  ' KBSDS '
11 : 13 : 34 , 406  INFO  [TomcatDeployer] deploy, ctxPath =/ KBS, warUrl = / deploy / KBS.war /
11 : 13 : 34 , 781  INFO  [[ / KBS]] Initializing Spring root WebApplicationContext
设置use-java-context为true或不设置时控制台给出的jndi信息
11 : 25 : 15 , 921  INFO  [ConnectionFactoryBindingService] Bound ConnectionManager  ' jboss.jca:service=ConnectionFactoryBinding,name=JmsXA '  to JNDI name  ' java:JmsXA '
11 : 25 : 15 , 984  INFO  [ConnectionFactoryBindingService] Bound ConnectionManager  ' jboss.jca:service=DataSourceBinding,name=KBSDS '  to JNDI name  ' java:KBSDS '
11 : 25 : 16 , 031  INFO  [TomcatDeployer] deploy, ctxPath =/ KBS, warUrl = / deploy / KBS.war /

注意对比两次控制台分别打印的信息,从中很容易发现,其实就是use-java-context属性的作用。关于该属性,大家可以去参看jboss的官方文档。这里就不细说了。
到此jboss下配置jndi 以及整合spring已经成功配置起来了,接下来就是一些细化了,大家可以去查询jboss的关于jndi配置的文档。
其实在jboss下配置jndi远远比在tomcat下配置jndi简单的多。
总结下来就这几步
拷贝jndi模板到server\default\deploy目录下,并做修改,这里面模板文件均是以数据库类型-ds.xml命名的。
拷贝数据库驱动到\server\default\lib目录和jboss安装目录\lib下即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值