我们使用的Weblogic服务器已配置为允许JNDI数据源名称,如"appds".
对于开发(localhost),我们可能正在运行Tomcat,并且当在server.xml的<context>部分中声明时,Tomcat将在JNDI树中的"java:comp/env/jdbc/*"上挂起JNDI数据源.
问题:在Weblogic中,JNDI查找是"appds",而在Tomcat中,似乎我必须提供正式的"java:comp/env/jdbc/appds".我担心Tomcat版本是一个隐含的标准,但不幸的是,我不能改变Weblogic的配置...所以这意味着我们最终得到两个不同的spring配置文件(我们使用的是spring 2.5)来促进不同的环境.
有没有一种优雅的方式来解决这个问题.我可以直接在Tomcat中查看JNDI名称吗?Spring可以在两个地方都有名字和外观吗?谷歌搜索或建议会很棒.
我有DataSource,它在context.xml中的Tomcat 6上配置为MyDataSource.我正在通过以下方式获取它:
DataSource dataSource;
try {
dataSource = (DataSource) new InitialContext().lookup("java:comp/env/MyDataSource");
} catch (NamingException e) {
throw new DaoConfigurationException(
"DataSource '" + url + "' is missing in JNDI.", e);
}
Run Code Online (Sandbox Code Playgroud)
一切正常.现在我将此代码导出到Jboss AP 6.我将我的dataSource及其连接池配置为local-tx dataSource,名称相同.
当我执行上面的代码时,我收到了NamingException异常.经过一番调查后,我发现在Jboss下调用我的DataSource的正确方法是
dataSource = (DataSource) new InitialContext().lookup("java:/MyDataSource");
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释一下我为什么要在Jboss下的JNDI路径中省略"comp/env"?
问候,
我正在寻找一个很好的解决方案,用于在war的context.xml中外化JNDI连接池信息,这样当应用程序从dev移动到QA到prod时,war文件将不需要重新编译.理想情况下,URL,驱动程序,用户名和密码将被变量化,然后通过为每个环境定制的属性文件进行填充.如果无法做到这一点,是否有其他建议如何处理跨环境的战争而不重新编译目标环境?Maven提供的配置文件需要针对特定环境的构建.
提前致谢.