Spring Can';似乎无法在Liferay中使用JNDI JDBC资源

Spring Can';似乎无法在Liferay中使用JNDI JDBC资源,spring,jdbc,liferay,jndi,Spring,Jdbc,Liferay,Jndi,Liferay论坛在这个问题上没有乐趣,这个项目的时间也在滴答作响。这可能是因为我对春天缺乏了解 我在server.xml中定义了一个JNDI全局资源,在Tomcat 7/conf文件夹中的context.xml中定义了一个资源链接。我知道正在加载JNDI资源,因为我看到服务器启动时正在运行验证查询。到目前为止还不错 我有一个portlet,它只向其他portlet提供服务。在这个portlet中,我有一个hibernate.cfg.xml,它有一个会话工厂,也指向JDBC资源(不知道是否需要)

Liferay论坛在这个问题上没有乐趣,这个项目的时间也在滴答作响。这可能是因为我对春天缺乏了解

我在server.xml中定义了一个JNDI全局资源,在Tomcat 7/conf文件夹中的context.xml中定义了一个资源链接。我知道正在加载JNDI资源,因为我看到服务器启动时正在运行验证查询。到目前为止还不错

我有一个portlet,它只向其他portlet提供服务。在这个portlet中,我有一个hibernate.cfg.xml,它有一个会话工厂,也指向JDBC资源(不知道是否需要)。我在servicesportlet中还有一个ext-spring.xml文件,该文件包含以下内容:

<bean id="liferayHibernateSessionFactory" class="com.liferay.portal.spring.hibernate.PortletHibernateConfiguration" >
<property name="dataSource" ref="MyJDBCResource" />
</bean>

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

在ext-spring.xml中添加上述内容修复了部署时该服务portlet上出现bean错误的问题。在服务生成器构建的portlet中,创建了一个服务jar,我将该服务jar放在Tomcat_Home/lib/ext文件夹中,以便在portlet中使用portlet提供的服务。到现在为止,一直都还不错。但是,当我调用portlet方法调用另一个具有JNDI引用的portlet提供的服务时,我会得到一个“用户缺少特权或找不到对象”错误。它肯定是找不到的对象。当查询运行时,我在JNDI资源条目指定的JDBC连接上看不到任何活动,在深入查看连接属性时,我只看到正在使用的HSQLDB驱动程序。据我所知,它应该使用在我的全局资源JNDI条目中指定的MSSQL驱动程序

那么我做错了什么?我是否需要在调用服务的portlet中添加一些配置条目

这似乎很简单。在阅读许多关于使用JNDI/JDBC资源的文章时,我似乎正确地遵循了它们。在lr6.1.1和tomcat7中使用JNDI/JDBC资源是否有我错过的技巧


谢谢(真的希望得到一些答案!)。

首先,您可以尝试像这样重写JNDI资源引用:

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

此外,您可以在Spring中尝试不同的JNDI资源查找方法:

<jee:jndi-lookup id="MyJDBCResource" jndi-name="jdbc/MyJDBCResource" expected-type="javax.sql.DataSource" />

不确定第一种方法,但如果找不到JNDI资源,第二种方法肯定会提前失败。 希望这有帮助