Tomcat vs Weblogic JNDI Lookup

2022-09-01 18:57:44

我们使用的 Weblogic 服务器已配置为允许 JNDI 数据源名称,如“appds”。

对于开发(localhost),我们可能正在运行Tomcat,当在server.xml的<context>部分中声明时,Tomcat会将JNDI数据源挂起在JNDI树中的“java:comp/env/jdbc/*”上。

问题:在Weblogic中,JNDI查找是“appds”,而在Tomcat中,似乎我必须提供正式的“java:comp/env/jdbc/appds”。恐怕Tomcat版本是一个隐含的标准,但不幸的是,我无法更改Weblogic的配置......这意味着我们最终会得到两个不同的spring配置文件(我们使用spring 2.5)来促进不同的环境。

有没有一种优雅的方法来解决这个问题。我可以直接在Tomcat中查找JNDI名称吗?春天可以举个名字,看看这两个地方吗?谷歌搜索或建议会很棒。


答案 1

如何在 Web 应用程序中使用单个 JNDI 名称

我自己也为此挣扎了几个月。最好的解决方案是使您的应用程序可移植,以便您在Tomcat和Weblogic中具有相同的JNDI名称。

为此,您将 和 更改为指向单个 jndi 名称,并提供到每个供应商特定 jndi 名称的映射。web.xmlspring-beans.xml

我已将每个文件放在下面。

你需要:

  • Web 中的条目.xml,用于应用使用单个名称<resource-ref />
  • 一个文件,用于将 jndi 名称映射到 WebLogic 管理的资源WEB-INF/weblogic.xml
  • 一个文件,用于将你的 jndi 名称映射到 Tomcat 管理的资源META-INF/context.xml
    • 这可以是在Tomcat安装中,也可以在您的应用程序中。

作为一般规则,最好在应用中使用 like 和 jndi 名称,并避免在 它们前面加上 前缀。jdbc/MyDataSourcejms/ConnFactoryjava:comp/env/

此外,数据源和连接工厂最好由容器管理并与 JNDI 一起使用。在应用程序中实例化数据库连接池是一个常见的错误。

春天

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

<jee:jndi-lookup jndi-name="jdbc/appds"
                 id="dataSource" />
</beans>

网.xml

<resource-ref>
    <description>My data source</description>
    <res-ref-name>jdbc/appds</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

网络逻辑.xml

<?xml version="1.0" encoding="UTF-8" ?>
<weblogic-web-app
    xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://xmlns.oracle.com/weblogic/weblogic-web-app http://http://www.oracle.com/technology/weblogic/weblogic-web-app/1.1/weblogic-web-app.xsd">

<resource-description>
    <jndi-name>appds</jndi-name>
    <res-ref-name>jdbc/appds</res-ref-name>
</resource-description>
</weblogic-web-app>

META-INF/context.xml(用于Tomcat)

<Context>
    <ResourceLink global="jdbc/appds" name="jdbc/appds" type="javax.sql.DataSource"/>
</Context>

答案 2

JndiLocatorSupport有一个属性 。将此设置为 true 时,将自动在前缀前加上“java:comp/env/”。因此,我认为在从Tomcat移动到Weblogic时区分此参数是正确的。resourceRef


推荐