2007-11-07
JNDI中的组件私有环境,公共环境和部署时映射
j2ee难用,其中一个原因是jndi不好用,明明已经配置好名字为dataSource的数据源,但是在部署JPA时,老是抛异常说找不到数据源。今天在用jboss时,终于又明白了一些。
原来j2ee中的组件是有它自己独自的环境的,位于java:/comp/env这个jndi目录下。每个组件不能访问另外一个组件的私有环境,实现组件各自独立。同时,又有一些jndi目录和名字是公共的,如java:/下的其它一些名字,还有一些是只能给本地访问的,还有一些是能够给远程访问的,这个就不说了。
如果一个组件想要获得另外一个组件,那么需要在它的部署描述符里说明,比如:
<resource-ref> <description>Dollys DataSource</description> <res-ref-name>jdbc/mydatasource</res-ref-name> <res-ref-type>javax.sql.DataSource</res-ref-type> <res-auth>Container</res-auth> </resource-ref>
这里说这个组件需要依赖于一个叫java:/comp/env/jdbc/mydatasource的数据源。但是这个数据源又从哪里来呢??!!注意了!原来是要在部署时写另外一个特定于服务器种类的数据源映射文件,如下面的jboss示例:
<resource-ref> <res-ref-name>jdbc/mydatasource</res-ref-name> <jndi-name>java:DefaultDS</jndi-name> </resource-ref>
上面这一段可能位于jboss-web.xml等jboss特定的部署描述符里。目的就是告诉jboss,把全局的java:DefaultDS映射到这个组件的java:/comp/env/jdbc/mydatasource。就是这一步,很时候之所以部署失败,找不到jndi都是因为少了这样一个映射导致的。
如果不想写上面的特定于服务器的部署描述符,我估计可以通过指定一个公共的jndi来解决,如下:
<resource-ref> <description>Dollys DataSource</description> <res-ref-name>java:DefaultDS</res-ref-name> <res-ref-type>javax.sql.DataSource</res-ref-type> <res-auth>Container</res-auth> </resource-ref>
问题虽然解决了,可是突然觉得好恶心,搞得这么复杂有必要吗?!!j2ee果然不是为了做小项目来的。
发表评论
- 浏览: 3146 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
链接
最新评论
-
优化jboss以提高性能
为何看不全,只显示一部分呢!?
-- by lenhome -
优化richfaces,给seam提 ...
受教了 3Q~
-- by 40020072 -
用htmlparser解析google搜 ...
因为,没有配置java_home,或者可以再cmd下运行。
-- by water84222 -
用htmlparser解析google搜 ...
为什么,我下载后的只有filterbuilder.cmd,而且双击后,没有任何反 ...
-- by water84222 -
通过Annotation和Struts2 ...
d
-- by evonli






评论排行榜