在 Liferay 6.2 插件中获取 JNDI 数据源

Get JNDI datasource in Liferay 6.2 Plugin

我有一个 Liferay 6.2 挂钩,我正在尝试获取在 Weblogic 12c 容器中配置的 JNDI 数据源 运行 Liferay。

数据源配置正确,同一 Weblogic 托管服务器中的其他 Web 应用程序 运行 可以访问该数据源,所以我知道这不是问题所在。

我正在使用 Spring 检索数据源,使用与服务器上其他网络应用程序 运行 完全相同的配置。

我已在 web.xml 中将数据源声明为资源引用,使用与服务器上其他 Web 应用程序 运行 完全相同的配置。

我看到的错误消息是:

javax.naming.NameNotFoundException:尝试在 /app/webapp/liferay-portal-6.2.0-ce-ga1.war/1037207272 中查找 comp/env/jdbc/bootstrap 时;剩余姓名 'comp/env/jdbc/bootstrap'

好像 Weblogic 的 JNDI 上下文对挂钩不可用。

spring-config.xml

<?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:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">

<bean id="bootstrapDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/bootstrap"/>
</bean>

</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<resource-ref>
    <description>Datasource</description>
    <res-ref-name>jdbc/bootstrap</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

</web-app>

谢谢 保罗

我从 jndiName 属性 值中删除了 "java:comp/env/" 前缀。这解决了这个问题。这很奇怪,因为我在容器中的其他应用程序需要 "java:comp/env/" 前缀。

spring-config.xml

<?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:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">

<bean id="bootstrapDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/bootstrap"/>
</bean>

</beans>