HDa*_*ave 6 spring tomcat jndi jetty tomcat6
我使用Spring配置我的Java Web App,在Spring配置中,我通过JNDI为Jetty获取数据源,如下所示:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myDataSource" />
但这不适用于Tomcat.使用Tomcat我必须这样做:
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
什么是解决这个问题的最佳方法?我已经在使用JNDI作为外部化配置的方法,所以我不能外化我的外部化配置!同时我完全不喜欢有两个单独的Spring配置文件.救命!!!
我在这里找到了答案,但我认为它有点复杂,但它确实让我想到使用博客发现的非常酷的ServerDetector类.
一旦我可以动态地计算出我正在运行的服务器类型,我就可以使用Spring表达式语言来完成剩下的工作:
<jee:jndi-lookup id="myAppDataSource"
jndi-name="#{ (AppServerType == 'Jetty' ? 'jdbc/' : 'java:comp/env/jdbc/') +
'myAppDataSource' }" />
Run Code Online (Sandbox Code Playgroud)
简单!
经过一些试验,我发现可以强制Jetty使用与Tomcat相同的JNDI路径。以下代码片段来自我的jetty-env.xml
文件:
<New id="myDataSource" class="org.mortbay.jetty.plus.naming.Resource">
<!-- We MUST specify the entire JNDI path here to force compliance with the Tomcat/J2EE convention -->
<Arg>java:comp/env/jdbc/myDataSource</Arg>
<Arg>
<New class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean">
<Set name="uniqueResourceName">sbeDatabase</Set>
...............
</New>
</Arg>
</New>
Run Code Online (Sandbox Code Playgroud)
不知道这是否理想,但是否可行。
更新:
如果将jetty-env.xml文件放入WAR中,则可以使用该文件...但是出于某种原因,您可以将该配置移到WAR之外,并放入Jetty的“ contexts”目录中的上下文片段文件中,然后抛出异常:
检查一下:http : //jira.codehaus.org/browse/JETTY-273
归档时间: |
|
查看次数: |
6965 次 |
最近记录: |