`

转载-在JBoss中配置多个数据库和数据源

阅读更多
 JBoss是一款非常强大的J2EE应用程序服务器,但是这种强大的功能也带来了复杂性。本文作者Marcus Zarra分析了如何在JBoss中配置多个数据库以及数据源。

  配置数据源

  JBoss的默认安装过程总共有三种配置选项:所有的(all)、默认的(default)和最小的(minimal)。如果你第一次启动JBoss服务器的时候没有附带任何参数,它自然就运行了默认配置。如果需要运行其它的配置,就必须使用-C参数运行启动脚本,如下所示:

${JBOSS.ROOT}/bin/run.sh -c minimal

  用这种方式启动JBoss就指示它使用最小的服务器配置代替默认的配置。但是试图改变JBoss自身的配置的时候,这种技术是非常有用的。你可以在不同的配置中进行修改操作,如果有必要就回滚到默认配置。可是,你在弄混数据源之前,应该把默认配置复制一份,这样就可以安全地操作该副本了(在本文中,我把自己的副本叫作example,因此在服务器目录中有四种配置信息:所有的、默认的、最小的和example)。

  在JBoss中改变默认数据源的第一步是配置一个新数据源。JBoss中所有的数据库配置都在你所工作的服务器目录下的deploy目录中定义的(在例子中是 server/example/deploy)。JBoss使用的默认数据库是纯Java数据库Hypersonic。这个数据库的配置信息位于 hsqldb-ds.xml文件中。这个XML配置文件描述了如何连接到Hypersonic数据库。删除这个文件中的所有注释之后,我们得到如下所示的配置信息:

<?xml version="1.0" encoding="UTF-8"?>
 <datasources>
  <local-tx-datasource>
   <jndi-name>DefaultDS</jndi-name>
   <connection-url>
    jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB
   </connection-url>
   <driver-class>org.hsqldb.jdbcDriver</driver-class>
   <user-name>sa</user-name>
   <password></password>
   <min-pool-size>5</min-pool-size>
   <max-pool-size>20</max-pool-size>
   <idle-timeout-minutes>0</idle-timeout-minutes>
   <track-statements/>
   <security-domain>HsqlDbRealm</security-domain>
   <depends>jboss:service=Hypersonic,database=localDB</depends>
  </local-tx-datasource>
  <mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic,database=localDB">
   <attribute name="Database">localDB</attribute>
   <attribute name="InProcessMode">true</attribute>
  </mbean>
</datasources>


  这些参数中的大多数与JDBC的参数相似。根(root)下的第一个部分是<local-tx-datasource>。这是你定义数据库以及如何连接该数据库的位置:驱动程序、URL、用户名和密码。你还定义了连接池中应该有多少个连接。

  第二步分包含了两个有趣的参数:

  · <security-domain>允许你在login-config.xml文件中而不是在数据源配置信息中配置数据库的用户名和密码。

  · <depends>指定该服务只有在它所依赖的服务启动后才启动。该参数允许你编写数据库应该正确运行的服务。<depends>标签还指示JBoss根据需要关闭某些数据项。示例中的这个标记表明mbean必须在数据库启动之前启动,在数据库关闭之后关闭。

  在定义好数据源之后,服务器的其它部分就可以使用它了。希望使用这个数据源的任何其它服务或配置都必须使用JNDI名称来引用它。在示例中,JNDI名称是DefaultDS。

  添加另一个数据源

  为了给JBoss添加另一个数据源,你需要建立一个新的配置文件。我希望建立一个数据源,它连接到我本机的MySQL数据库,并专门使用example数据库。为了达到这个目标,我建立了一个与前面一个类似的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
 <local-tx-datasource>
  <jndi-name>ExampleDS</jndi-name>
  <connection-url>jdbc:mysql://localhost/example</connection-url>
  <driver-class>org.gjt.mm.mysql.Driver</driver-class>
  <user-name>exampleUser</user-name>
  <password>examplePassword</password>
  <min-pool-size>5</min-pool-size>
  <max-pool-size>20</max-pool-size>
  <idle-timeout-minutes>0</idle-timeout-minutes>
  <track-statements/>
 </local-tx-datasource>
</datasources>


  我建立了名为ExampleDS的数据源,它通过JDBC,使用用户名exampleUser和密码examplePassword连接到一个 MySQL数据库。我还特别指定连接池最少有5个连接,最多不超过20个连接,并且这些连接不能空闲。接着我把这个文件存储为deploy目录中的 example-ds.xml(这个文件的名称并不重要,但是名称一致是有好处的)。

  由于我的新数据源不需要、也不依赖于任何其它的模块,配置信息中就没有<depends>标签。同时,由于我在这个文件中指定了使用数据库的用户名和密码,我也不需要参照安全域(security domain)。

  使用新的数据源

  现在我希望把JBoss中的一些服务移动到我的新数据源上。其原因很简单:尽管Hypersonic是一个良好的数据库,但是它不应该用于产品环境和/或高容量(high-traffic)系统;MySQL和其它几个数据库可以更好地扮演这个角色。

  Java消息服务

  JBoss服务器中使用数据库的一个最常见的部分是消息服务。服务器的这部分的容量很大,并且应该使用我的新数据源。Deploy/jms目录中的下面两个文件定义了消息服务如何使用数据源:

  · hsqldb-jdbc-state-service.xml
  · hsqldb-jdbc2-service.xml

  首先,我修改了其中一个文件的名称以突出数据库的类型:把hsqldb-jdbc-state-service.xml 更名为mysql-jdbc-state-service.xml。我对mysql-jdbc-state-service.xml文件只作了一点点修改:<depends>标签应该引用新的ExampleDS数据源而不是默认的DefaultDS。这可以确保该数据源在消息服务启动前启动了。我还改变了注释信息,表明我用MySQL数据库代替了默认的Hypersonic数据库。
下一步,应该删除并替换hsqldb-jdbc2- service.xml文件。由于这个文件定义了消息服务如何使用数据库,我们必须在该文件中提供特定数据库的信息。幸运的是,对于大多数通用的数据库来说,JBoss替我们完成了这项工作。我从${JBOSS.ROOT}/doc/examples/jms检索到MySQL特定的文件(mysql- jdbc2-service.xml),并把它放到deploy/jms目录中。我只对该文件作了一个很小的修改,把数据源的名称改变为 ExampleDS,与我在数据源配置文件中指定的JNDI名称相匹配。

  最后,为了使消息服务完全转变,我把conf/login-config.xml文件中的DefaultDS改为ExampleDS。这个设置告诉JBoss,与消息服务相关的登录信息也使用example数据库。

  调度管理器

  如果你要使用JBoss的调度管理器和它的数据库调度程序(scheduler),你也必须指向新的数据源。该配置文件位于 deploy/schedule-manager-service.xml。搜索这个文件中的DefaultDS,找到需要重新配置的mbean,我把该 mbean的DataSourceProperty(数据源属性)指向ExampleDS,替代了指向DefaultDS。

  请注意,一定要检查一个SQL语句,以确保使用你的数据库工作正常。

  默认的容器控制(Container-Managed)持续性

  为了改变默认的维持bean(bean-persistence)的数据库,你必须更新conf/standardjbosscmp-jdbc.xml 文件,把DefaultDS修改为ExampleDS。此外,你还必须更新<type-mapping>标签以匹配新数据库;这个标签的值位于该文件中更深入的地方。对于本文的例子,我把这个值改变为mySQL。

  你还应该采用相同的方法更新conf/standardjaws.xml文件:把DefaultDS改变为ExampleDS,并更新<type-mapping>标签,以反映使用的数据库的类型。

  包装

  为了确保所有部分都转换到了新数据源上,请删除deploy/hsqldb-ds.xml文件并启动JBoss。如果产生了任何错误,就说明你遗漏了某些配置文件。

  总之,我发现使用内建的Hypersonic数据库进行开发比管理外部的数据库带来的痛苦要少一些。但是在产品环境中,Hypersonic是不适合任务需要的。把JBoss连接到更加牢固的数据库对于维护服务器的性能大有帮助。

作者:http://blog.csdn.net/szmarx/

 

分享到:
评论

相关推荐

    在JBoss中配置多个数据库和数据源

    在JBoss中配置多个数据库和数据源 JBoss是一款非常强大的J2EE应用程序服务器,但是这种强大的功能也带来了复杂性。本文作者Marcus Zarra分析了如何在JBoss中配置多个数据库以及数据源

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    7.3.3 在JBoss中配置JavaMail 292 7.4 本章小结 294 第8章 会话EJB 295 8.1 EJB概述 296 8.1.1 EJB的概念和意义 296 8.1.2 EJB的发展历史 298 8.1.3 EJB的优势和使用场景 299 8.2 EJB的分类 301 8.2.1 Session Bean...

    分布式数据层TDDL.zip

    淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作 一个数据库一样操作多个库。但是...

    Jetty中文手册

    在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 在Jetty中部署应用 部署管理器 部署绑定 热部署 ...

    druid-1.0.19

    druid-1.0.19.jar Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴...

    基于SSM架构实现的大型分布式购物网站-B2C项目源码+项目说明.zip

    - 1、配置数据源 - 2、让spring容器管理SqlSessionFactory,单例存在 - 3、把mapper的代理对象放到spring容器中。使用扫描包的方式加载mapper的代理对象。 ###Service层 - 1、事务管理 - 2、需要把service实现类放...

    ssh(structs,spring,hibernate)框架中的上传下载

     文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...

    EJB3.0 实例教程 -- 切片1

    6.2 JBOSS数据源的配置......36 6.2.1 MySql数据源的配置...........37 6.2.2 Ms Sql Server2000数据源的配置..37 6.3 实体 BEAN发布前的准备工作...38 6.4 单表映射的实体BEAN..38 6.5 持久化实体管理器...

    JAVA上百实例源码以及开源项目源代码

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    EJB3.0 实例教程 -- 切片2

    6.2 JBOSS数据源的配置......36 6.2.1 MySql数据源的配置...........37 6.2.2 Ms Sql Server2000数据源的配置..37 6.3 实体 BEAN发布前的准备工作...38 6.4 单表映射的实体BEAN..38 6.5 持久化实体管理器...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 ...

    MySQL 5.1官方简体中文参考手册

    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...

    Activiti6.0教程例子下载

    它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。(我的理解就是:将部分或者全部的工作流程、逻辑让计算机帮你...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 ...

    MySQL5.1参考手册官方简体中文版

    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics