浏览 6875 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-30
你会发现,你在客户端查找不到你刚刚配置的数据源. <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下来的配置文件. 以它为例. 我们看一下, 在客户端来查找这个新配置的数据源会出现什么情况呢. 客户端代码如下: 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")); 结果是一大堆异常: 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的小哥们留意... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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的配置中可以增加一个参数用于去除这些前缀,这个我还没试过。 |
|
返回顶楼 | |
发表时间:2008-10-16
它的意思是这样的.默认情况下,当你的程序运行在jboss 同一台JVM当中你可以通过JNDI.得到这个datasource... 而当你的程序运行在其它的JVM当中,你通过JNDI是查询不到这个datasource 的. 只有当你把<use-java-context>设置成false时,你才可以在其它JVM上通过JNDI来得到DS. ![]() |
|
返回顶楼 | |
发表时间:2008-11-17
不错,原来如此,多谢了
|
|
返回顶楼 | |
发表时间:2008-11-20
楼主好像没有看懂英文的意思额
|
|
返回顶楼 | |
发表时间:2008-12-25
为什么我加了<use-java-context>false</use-java-context>
还是找不到数据源啊?? |
|
返回顶楼 | |
发表时间:2008-12-25
身为高级知识分子,我相信大家即使读不懂上面的英文,金山词霸总是会使用的.
本文亮点:) |
|
返回顶楼 | |
发表时间:2008-12-25
You can locate this documents in http://www.jboss.org/file-access/default/members/jbossas/freezone/docs/Server_Configuration_Guide/beta500/html/ch13s15.html.
Seems still "work in progress", but really you can refer to it jboss-5 Cfg guide. |
|
返回顶楼 | |
发表时间:2008-12-25
最后修改:2008-12-25
terencewong 写道 You can locate this documents in http://www.jboss.org/file-access/default/members/jbossas/freezone/docs/Server_Configuration_Guide/beta500/html/ch13s15.html.
Seems still "work in progress", but really you can refer to it jboss-5 Cfg guide. I got a response: "Sorry, you don't have access to this resource " How did you get that? |
|
返回顶楼 | |
发表时间:2009-01-06
非常感谢楼主,我也遇到了同样的问题,就是找不到原因,谢啦
|
|
返回顶楼 | |