项目上线一波三折~
项目上线前提service 给系统服务部(简称系服),让准备jboss4.2+jdk1.5环境。准备的是jboss4.5+jdk1.5的环境
应用采用jdbc连接数据库,jboss只是负责启动应用即可。但系服说 东方钢铁要采用oracle-ds.xml 这种方式连接。幸好应用两种连接数据库方式(jndi、jdbc)都具备。在测试服务器上模拟了和正式服务器一样的环境。
1.修改了application-db.xml的数据库连接:
*************************************************************************************
<!-- jndi datasource -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/appDS"/>
</bean>
<bean id="cleanDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/appDS"/>
</bean>
*************************************************************************************
Jboss如何将应用与oracle-ds.xml中jndi配置一一对应:在/WEB-INF/下新建 jboss-web.xml,同web平级。
2.在jboss-web.xml中配置oracle-ds.xml中配置的jndi-name(jndi标识)
*************************************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC
"-//JBoss//DTD Web Application 2.4//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_4_0.dtd">
<jboss-web>
<resource-ref>
<res-ref-name>appDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<jndi-name>java:/test_portal</jndi-name>
</resource-ref>
<!--<context-root>/</context-root> -->
</jboss-web>
*************************************************************************************
3.web.xml中配置:
*************************************************************************************
<resource-ref>
<res-ref-name>appDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
*************************************************************************************
4.oracle-ds.xml中配置JNDI连接信息:
*************************************************************************************
<local-tx-datasource>
<jndi-name>test_portal</jndi-name>
<connection-url>jdbc:oracle:thin:@XX.XX.XX.XX:port:(train)</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>admin</user-name>
<password>123</password>
<connection-property name="char.encoding">GBK</connection-property>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<min-pool-size>2</min-pool-size>
<max-pool-size>20</max-pool-size>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
</local-tx-datasource>
*************************************************************************************
配置的时候注意几个细节:
jboss启动时要检查颜色区域,相同颜色区域要一一对应,不然启动会报异常。就因 appDS 和 appDs 大小写没注意折腾好久。
还有jboss-web.xml中:
<context-root>/</context-root> 作用:启动jboss后ie访问:http://localhost:8080/ 直接可以访问该应用。所以若ie地址栏得输入应用名的话这地方可以不写。ok解决成功!
*************************************************************************************
这里得谢谢 博客:http://blog.csdn.net/lovingprince/article/details/6577920 的提点。
*************************************************************************************
但系服上线时仍有错,心想环境一样。怎么我们这边测试环境可以他们那边的正式环境就不行了呢,就换了个数据源。
查看错误日志后报了个log4j问题。网上搜了下是log4j版本太低。通知系服换jboss /server/default/lib jar包。
更换jar包后又有错,说:
jboss启动异常org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: oracle.jdbc.driver.OracleDriver; - nested throwable: (java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver)) 是oracle jdbc驱动和jdk版本不匹配导致。
后查看测试环境jdk。这才发现。测试环境是jboss-4.0.5+jdk1.6 oracle驱动采用的是 ojdbc6.jar
正式环境jboss-4.0.5+jdk1.5 oracle驱动采用的是 ojdbc6.jar ,所以将ojdbc14.jar包将ojdbc6.jar包替换掉。
oracle6.jar支持jdk1.6
oracle14.jar支持jdk1.4,jdk1.5。
**************************************************************************************
oracle驱动与jdk版本匹配 相关博客:http://tiantian0521.blog.163.com/blog/static/4172088320117294265766/
**************************************************************************************
jboss启动正常!