`

关于jboss 5.0.0 上配置数据源要注意的一个问题

阅读更多
关于jboss 5.0.0 上配置数据源要注意的一个问题
同weblogic不同,在jboss中配置数据源并没有可视化的控制台.一般.大家都是到%JBOSS_HOME%\docs\examples\jca目录下,找到自己所要配置的数据源的模板文件,然后修改jndi-name,connection-url,driver-class,user-name,password,等等,然后把修改后的配置文件丢到要使用的domain下的deploy目录下就可以了,但是这时住往会有个问题.
你会发现,你在客户端查找不到你刚刚配置的数据源.

Xml代码
<datasources> 
  <local-tx-datasource> 
    <jndi-name>MySqlDS</jndi-name> 
    <connection-url>jdbc:mysql://mysql-hostname:3306/jbossdb</connection-url> 
    <driver-class>com.mysql.jdbc.Driver</driver-class> 
    <user-name>x</user-name> 
    <password>y</password> 
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name> 
    <metadata> 
       <type-mapping>mySQL</type-mapping> 
    </metadata> 
  </local-tx-datasource> 
</datasources> 

<datasources>
  <local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://mysql-hostname:3306/jbossdb</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>x</user-name>
    <password>y</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

上面是一个从%JBOSS_HOME%\docs\examples\jca目录下copy下来的配置文件.
以它为例.
我们看一下, 在客户端来查找这个新配置的数据源会出现什么情况呢.


客户端代码如下:
   Java代码
Properties  prop=new Properties();  
   prop.put(Context.INITIAL_CONTEXT_FACTORY,  
   "org.jnp.interfaces.NamingContextFactory");  
   prop.put(Context.PROVIDER_URL, "localhost:1099");  
   Context  context=new InitialContext(prop);  
   context.lookup("MySqlDS")); 

Properties  prop=new Properties();
   prop.put(Context.INITIAL_CONTEXT_FACTORY,
   "org.jnp.interfaces.NamingContextFactory");
   prop.put(Context.PROVIDER_URL, "localhost:1099");
   Context  context=new InitialContext(prop);
   context.lookup("MySqlDS"));
  

结果是一大堆异常:
Java代码
Exception in thread "main" javax.naming.NameNotFoundException: MySqlDS not bound  
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:542)  
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:550)  
    at org.jnp.server.NamingServer.getObject(NamingServer.java:556)  
    at org.jnp.server.NamingServer.lookup(NamingServer.java:296)  
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
   

Exception in thread "main" javax.naming.NameNotFoundException: MySqlDS not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:542)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:550)
at org.jnp.server.NamingServer.getObject(NamingServer.java:556)
at org.jnp.server.NamingServer.lookup(NamingServer.java:296)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 


JNDI查找不到"MySqlDS"这个名称..
为什么呢?
我们去JBOSS的控制台去查看JNDI树结构.

Other components with java:comp namespace
java: Namespace
  +- ClusteredXAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
  +- jaas (class: javax.naming.Context)
  |   +- messaging (class: org.jboss.security.plugins.SecurityDomainContext)
  +- TransactionPropagationContextImporter (class: com.arjuna.ats.internal.jbossatx.jta.PropagationContextManager)
  +- MySqlDS (class: org.jboss.resource.adapter.jdbc.WrapperDataSource)

很明显"MySqlDS"做为key被绑定在JNDI上了.那么为什么还会出错呢...

: )我浪费了很长时间在找这个错误的过程中,中间甚至一度以为,JBOSS不支持在服务器外获取数据源.后来一个家伙好像在写EJB3.0的时候也遇到这个问题,并且找来了下面这个项文文档..让我惊为天人啊...

<use-java-context> - A boolean indicating if the jndi-name should be prefixed with java: which causes the DataSource to only be accessible from within the jboss server vm. The default is true.

Configuring a DataSource for remote usage
As of jboss-4.0.0 there is support for accessing a DataSource from a remote client. The one change that is necessary for the client to be able to lookup the DataSource from JNDI is to specify use-java-context=false as shown here:

<datasources>  <local-tx-datasource>    <jndi-name>GenericDS</jndi-name>    <use-java-context>false</use-java-context>    <connection-url>...</connection-url>...
This results in the DataSource being bound under the JNDI name "GenericDS" instead of the default of "java:/GenericDS" which restricts the lookup to the same VM as the jboss server.

身为高级知识分子,我相信大家即使读不懂上面的英文,金山词霸总是会使用的.
它说的大概意思就是.
当你指定<use-java-context>的值为false时,你就可以在jboss运行的VM外的VM上查找到这个DataSource.
这个属性默认.为true   :( 
即,默认情况下你是不可以在JBOSS的VM外来查找这个数据源. 

其实吧,这个问题看起来很普通,解决起来也很简单只是加了一行代码,但是.JBOSS服务器的提供厂商是否有想过,一个example配置文件中,具然少了这种重要的配置信息.
至少你把它配上,然后注掉也好啊.

PS:上述数据源的配置如果不
      填加 <use-java-context>false</use-java-context>
   你基本上就会现,你在JBOSS上写的第一组EntityBean都会报找不到数据源的错误.     
   各位学习EJB3.0的小哥们留意...
    




20:14 浏览 (156) 论坛浏览 (467) 评论 (4) 分类: jboss 相关推荐 评论
xiaoqulai 20 小时前   回复
楼主好像没有看懂英文的意思额
reachingstar 2008-11-17   回复
不错,原来如此,多谢了
7upCat 2008-10-16   回复

它的意思是这样的.默认情况下,当你的程序运行在jboss 同一台JVM当中你可以通过JNDI.得到这个datasource...

而当你的程序运行在其它的JVM当中,你通过JNDI是查询不到这个datasource 的.
只有当你把<use-java-context>设置成false时,你才可以在其它JVM上通过JNDI来得到DS.



tocow 2008-10-16   回复
<use-java-context> - A boolean indicating if the jndi-name should be prefixed with java: which causes the DataSource to only be accessible from within the jboss server vm. The default is true.

从英文的意思来看是需要这样来查找Jndi吧,context.lookup("java:MySqlDS");

 
tomcat下硬编码获取数据源:
InitialContext initialContext = new InitialContext();
Context envContext = (Context) initialContext.lookup("java:comp/env");
DataSource ds = (DataSource) envContext.lookup("MySqlDS");
Connection conn = ds.getConnection();

如果spring获取datasource,bean的配置中可以增加一个参数用于去除这些前缀,这个我还没试过。
分享到:
评论

相关推荐

    JBoss 下配置 Oracle 数据源

    在 JBoss 中配置 Oracle 数据源需要经过以上四个步骤:复制配置文件、编辑配置文件、编辑 jbosscmp-jdbc.xml 文件、编辑 login-config.xml 文件。只有通过这些步骤,才能正确地配置 Oracle 数据源,并实现企业级应用...

    jboss配置数据源

    jboss配置数据源是指在jboss服务器上配置oracle数据库的数据源,以便在jboss应用程序中使用oracle数据库。下面是jboss配置数据源的详细步骤: 首先,需要将oracle的JDBC驱动程序复制到ClassPath下,通常是将其复制...

    tomcat jboss数据源配置.rar

    本主题主要聚焦于"tomcat jboss数据源配置.rar",这是一个关于如何在Tomcat 5.5和JBoss 4.0中配置数据源,特别是与Oracle数据库交互的详细过程。下面将深入探讨这两个关键组件以及数据源配置的相关知识点。 首先,...

    jboss-5.0.0.GA

    JBoss是著名的开源Java应用服务器,它由JBoss社区开发并维护,是Red Hat公司产品线的一...通过解压并按照官方文档配置,用户可以在本地环境中搭建起一个功能齐全的JBoss应用服务器,从而进行Java EE应用的开发和测试。

    jboss-5.0.0.GA 官方正式版

    5.0.0.GA版本是JBoss的一个重要里程碑,它在稳定性、性能和功能上都有显著提升。 JBoss 5.0.0 GA(General Availability)的核心特性包括: 1. **模块化架构**:JBoss 5引入了模块化设计,将不同组件和服务分离,...

    JBoss7.1.1配置MySql数据源

    通过以上步骤,你可以在JBoss 7.1.1上成功配置MySQL数据源,使得你的Java EE应用程序能够顺利地与MySQL数据库进行交互。这个过程对于任何需要与数据库通信的Java应用服务器部署都是至关重要的。如果你遇到任何问题,...

    JBoss7配置Mysql5.1数据源.pdf

    在JBoss上配置Mysql数据源是一个常见的操作,主要用于整合JBoss与Mysql数据库,以便于应用服务器能够管理和操作数据库资源。以下是根据JBoss7和Mysql5.1的配置所涉及的知识点: 1. 数据源的定义与重要性:数据源是...

    JBOSS5.0.0.GA1安装部署手册.rar

    本手册将详细讲解如何安装和部署JBoss 5.0.0.GA1版本,这一版本是JBoss的一个重要里程碑,引入了许多新特性和性能优化。 **一、系统需求** 在开始安装前,你需要确保你的系统满足以下基本要求: 1. **操作系统**: ...

    JBoss配置mySQL数据源

    JBoss配置mySQL数据源 有需要的就下载吧。。。。

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

    在JBoss中配置多个数据库和数据源是非常复杂的,因为JBoss是一款非常强大的J2EE应用程序服务器。配置多个数据库和数据源需要了解JBoss的配置选项和数据源的配置信息。 首先,需要了解JBoss的配置选项。JBoss的默认...

    jboss-5.0.0.GA初学者简单配置

    这里我们主要探讨的是 JBoss 5.0.0.GA 版本的初学者配置,这个版本需要 JDK 1.6 或以上版本的支持。下面将详细阐述配置 JBoss 5.0.0.GA 的步骤。 首先,确保您已经安装了 JDK 1.6。可以通过在命令行输入 `java -...

    配置jboss数据源

    通过上述步骤,你就能在JBOSS中成功配置一个EJB 3.0的数据源。这个过程对于任何使用JBOSS运行EJB应用的开发者来说都是至关重要的,因为它直接影响到应用的稳定性和性能。在实际开发中,还需要根据项目规模、并发量等...

    6.3 JBoss下Oracle9i数据源配置

    当我们需要在JBoss应用服务器上配置Oracle9i作为数据源时,这通常涉及到应用程序与数据库之间的连接管理,以便于程序能够安全、高效地访问数据库中的数据。这篇博客"6.3 JBoss下Oracle9i数据源配置"可能详细阐述了这...

    JBOSS_5.0.0GA的集群搭建

    JBoss 是一个开源的企业级应用服务器,而 JBoss 5.0.0 GA 版本在当时是一个重要的里程碑,提供了对 Java EE 5 规范的支持。集群搭建是确保高可用性和可伸缩性的重要手段,它允许多个 JBoss 实例协同工作,共同处理...

    jboss配置MySql的JNDI

    本文将深入解析如何在JBoss中配置MySQL的JNDI数据源,确保应用程序能够高效、稳定地访问数据库资源。 ### JBoss与JNDI的关联 JBoss作为一个高性能的Java应用服务器,提供了丰富的功能支持企业级应用开发。JNDI作为...

    JBOSS4数据源配置大全

    本文将详细介绍如何在JBoss 4.0上配置多种常见数据库的数据源。 #### 二、JBoss的EJB部署描述符 JBoss 4.0使用JDBC配置文件来管理数据库连接,这些配置文件为EJB和其他J2EE应用程序提供数据源。要使用除...

    jboss 配置jndi数据源

    jboss 配置jndi数据源,deploy下配置oracle-ds.xml

    在Jboss4.0下对MySql数据源的设置方法

    在JBoss 4.0环境下配置MySQL数据源的步骤涉及多个环节,主要是为了确保JBoss应用服务器能够正确地连接和操作MySQL数据库。以下是对每个步骤的详细解释: **步骤一:添加MySQL JDBC驱动** 首先,你需要获取适用于...

Global site tag (gtag.js) - Google Analytics