JBOSS 数据源配置并使用JNDI调用
-- 本文出自sleest (感谢yangjj ^_^)
场景分析:
某天系统的数据库维护方要求进行DG备库容灾演练,要把生产用RAC库模拟宕机并转移至DG备库上,由于是failover而不是switchover演练,于是期间不对外开放apache访问,要求服务启动时间较紧.
数据库的切换导致IP的变更,这样导致ap上正在跑的系统不得不重新配置数据库连接,基于目前的机制需要执行以下步骤:
a).停止服务群组
b).移除服务包
c).源服务包替换配置文件(这样还要求服务包的当前版本备份完好)
d).重新上传服务包
e).分发至群组,最后启动群组
f).当源库恢复正常时又得来一遍T T
这样处理显然比DG库改IP花费更高,虽然DG要改相应监听等操作,但据了解可以通过命令行即批处理减少每次的工作量.
于是引申如何在DB出现异常时服务快速恢复的问题
分析:
1.时间花费主要用在了重新部署服务包上,如何省略这个步骤,简单想有两个方案
a).重写使用数据源初始化连接池的方案
b).使用容器托管数据源,服务包通过JNDI进行请求
其中a方案否决,一不通用,二重写的话后面出问题又要重写人负责= =
因此使用容器托管数据源的方案.
环境:
JBOSS EAP 6 domain集群
服务使用spring管理
数据库oracle 11g
解决方案:
1.暂定使用ojdbc作为驱动,因此首先要有个ojdbc6.jar,传说其他版本可能会有部分问题,如14不兼容jdk1.6,_gz不支持11g等
2.让jboss加载该驱动:
建立如下图所示的目录结构:

其中module.xml的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.oracle">
<resources>
<!-- Insert resources here -->
<resource-root path="ojdbc6.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
(扯淡:由于jboss6 使用了类maven的结构化管理,即不想4那样jar基本都在一个lib目录下,而是通过module的概念引入,并且module之间允许规定依赖和排除,也可以全局配置module引入和服务包中jar的优先级,当然最麻烦的是hibernate冲突,因为那是用石头砸自己脚)
3.把这个目录放到结点端 $JBOSS_HOME/modules下;

注意是所有的节点端,而不是放在控制端就完事,虽然具体的配置文件[domain.xml]是在控制端配的,要不在启动服务时,注册datasource就会失败:
[org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 59) JBAS014613: 操作("add") 失败 -- 地址:([
("subsystem" => "datasources"),
("jdbc-driver" => "xxx.war")
4.启动jboss控制端,并在其控制台进行相关配置:

[1].进入profiles选项
[2].选择对应的配置文件,这里的profile和你对应群组指定的profile相对应,这里用的是domain下full-ha模式,目前没有尝试过full-ha工程的JNDI指向full配置的datasource,这也是为什么经常在改domain.xml的时候遇到很多相同的配置,实际是jboss划分了不同的配置域:


[3].Datasources选项卡
[4].add按钮弹出新增页面(这里奉劝先别删默认的example配置- -)
5.配置数据源别名和JNDI

6.Detected Driver是只读,给你看的

Specify Driver我在添加的时候报错:
Internal Server Error
{
"outcome" => "failed",
"result" => undefined,
"failure-description" => "JBAS010839: 操作失败或在所有服务器上回滚。",
"rolled-back" => true,
"server-groups" => {"main-server-group" => {"host" => {"slave1" => {"main-server33" => {"response" => {
"outcome" => "failed",
"result" => undefined,
"failure-description" => {"JBAS014771: 具有丢失/不可用依赖关系的服务" => ["jboss.driver-demander.java:jboss/datasources/oracleRacDS1 缺少 [jboss.jdbc-driver.xxxDs]"]},
"rolled-back" => true
}}}}}}
}
即这里似乎指定了jboss.jdbc-driver.的前缀,暂未了解何处指定;
7.配置数据库链接:

8.完成后默认是disable状态,具体的配置可以在其下的属性框中进行相应调整,这里的xxx是driver的别名,在具体的xml中会指向一个具体的class

比较特殊的属性在pool标签中通过键值对配置
9.保存后可以在domain.xml中找到profile name="full-ha"下的<subsystem xmlns="urn:jboss:domain:datasources:1.1">标签多了如下配置:
<datasource jta="true" jndi-name="java:jboss/datasources/oracleRacDS" pool-name="oracleRacDS" enabled="false" use-ccm="false" use-java-context="true">
<connection-url>[jdbc连接]</connection-url>
<driver-class>com.oracle.jdbc.driver.OracleDriver</driver-class>
<datasource-class>com.oracle</datasource-class>
<driver>[别名A]</driver>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>30</max-pool-size>
</pool>
<security>
<user-name>[用户名]</user-name>
<password>[密码]</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<timeout>
<idle-timeout-minutes>60</idle-timeout-minutes>
</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
<drivers>
<driver name="[别名A]" module="com.oracle">
<xa-datasource-class>oracle.jdbc.xa.OracleXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
其中仍需修改xa-datasource-class为如上红色部分.
10.最后重启控制端JBOSS再enable该数据源即可生效(服务端可以不用重启).
11.服务包中的datasource配置改为JNDI调用即可:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:jboss/datasources/oracleRacDS</value>
</property>
</bean>
12.重新部署服务包,启动群组时,在节点段的日志中看到如下信息即说明注册成功
[org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-18) JBAS010400: 绑定数据源 [java:jboss/datasources/oracleRacDS]
实践:
群组启动完成后服务端可以从数据库读取数据.
这是修改正enable状态的datasource会有如下错误:

说明无法修改.
此时如果将改datasource disable掉
服务端日志中将会出现如下异常:
javax.resource.ResourceException: IJ000451: The connection manager is shutdown: java:jboss/datasources/oracleRacDS
此时再enable也无法重连该连接;
结论:
通过使用JNDI指向jboss数据源的方式,可以将数据库调整时服务段所做的调整降为如下步骤:
a).停止服务群组
b).移除服务包
c).源服务包替换配置文件(这样还要求服务包的当前版本备份完好)
d).重新上传服务包
e).分发至群组,最后启动群组
f).当源库恢复正常时又得来一遍T T
b).disable数据源
c).修改数据源配置保存并enable
d).启动服务群组即可
e).源库恢复后同上
但时间节省了,繁杂的替换文件步骤节省了,出错率减小了.
JBOSS 数据源配置并使用JNDI调用的更多相关文章
- EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源
通过注解方式注入并使用其他EJB或者服务 真实项目EJB对象很多,EJB之间也可以互相调用, 在项目HelloWorld下新建接口Other在cn.hqu.ejb3下: public interfac ...
- EJB通过注解方式注入并使用其它EJB或者服务、配置JBoss数据源
版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Jerome_s/article/details/37103171 通过注解方式注入并使用其他EJB或者服务 ...
- Tomcat 6 部署工程总结,使用JNDI数据源配置
工程需要用JNDI数据源方式部署到tomcat,参考网上文章后,经过配置测试,摸索出来了. 环境说明: 数据库:Oracle9i Web服务器:tomcat-6.0.33 tomcat启动方式 ...
- Spring jndi数据源配置方法
xml配置: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverMana ...
- EJB配置jboss数据源
1.数据源的模板在\jboss-4.2.3.GA-jdk6\jboss-4.2.3.GA\docs\examples\jca\下2.编辑数据源文件,比如mysql-ds.xml,命名规则是名称-ds. ...
- mysql连接超时与jndi数据源配置
昨天有运营说添加活动不能用了,我就看了一下后台日志,发现访问数据库是报错: at java.lang.Thread.run(Thread.java:722) Caused by: com.mysql. ...
- 四、Solr数据源配置(JNDI、DIH)及定时重做索引
简介 Solr支持很多种创建索引的方式,包括网页,xml以及数据库,因为我这边做的是企业级的搜索,所以用的是数据库建立索引.其实从数据库建立索引,很大程度上取决于原来的数据库设计. 从数据库建立索引, ...
- Linux - tomcat -jndi数据源配置
Linux - tomcat -jndi数据源配置 tomcat/conf/context .xml 文件中修改如下 <Resource name="/jdbc/--" au ...
- Tomcat 5.5 JNDI Resource 配置 (tomcat数据源配置)
转自:http://blog.csdn.net/fenglibing/article/details/4528512 Tomcat 5.5 JNDI Resource 配置 Author Blog:h ...
随机推荐
- webbrowser获取无ID无Name控件并模拟点击
常见的获取控件并点击(自动登录): var txtUserID = wbsTask.Document.All["userName"]; var txtPsd = wbsTask.D ...
- openvpn之安装篇
之前整过openvpn,现把一些过程记录下来,方便以后查阅. #!/bin/bash cd /usr/local/srcyum install pam-devel.x86_64 -ywget http ...
- PCL点云曲面重建(1)
在测量较小的数据时会产生一些误差,这些误差所造成的不规则数据如果直接拿来曲面重建的话,会使得重建的曲面不光滑或者有漏洞,可以采用对数据重采样来解决这样问题,通过对周围的数据点进行高阶多项式插值来重建表 ...
- Java设计模式(8)组合模式(Composite模式)
Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树 ...
- Cocos2d-x绘制圆角矩形
/* * @brief 画圆角矩形 * @param origin 矩形开始点 * @param destination 矩形结束点 * @param radius 圆角半径 * @param seg ...
- Axiom3D:Ogre地形组件代码解析
大致流程. 这里简单介绍下,Axiom中采用的Ogre的地形组件的一些概念与如何生成地形. 先说下大致流程,然后大家再往下看.(只说如何生成地形与LOD,除高度纹理图外别的纹理暂时不管.) 1.生成T ...
- SpringMVC系列(三):REST风格
一.什么叫REST REST:即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所 ...
- Windows错误码大全
0000 操作已成功完成.0001 错误的函数.0002 系统找不到指定的文件.0003 系统找不到指定的路径.0004 系统无法打开文件.0005 拒绝访问.0006 句柄无效.0007 存储区控制 ...
- 手机web——自适应网页设计(html/css控制)http://mobile.51cto.com/ahot-409516.htm
http://mobile.51cto.com/ahot-409516.htm 一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的? 其实并不难. 首先,在网页代码的 ...
- om.ibm.ws.jsp.translator.JspTranslationException:JSPG0227E解决办法
原文链接:http://blog.163.com/rambosir@126/blog/static/124116406201212834417/ 今天在完成功能后,将jsp页面部署至websphere ...