2012-12-11 71 views
0

在Liferay论坛上对这个问题没有喜悦,并且时钟在这个项目上正在运行。这可能是由于我缺乏对Spring的知识。似乎无法获得在Liferay中工作的JNDI JDBC资源

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

我有一个portlet只为其他portlet提供服务。在那个portlet中,我有一个hibernate.cfg.xml,它有一个会话工厂,它也指向JDBC资源(不知道这是否需要)。我也有具有以下服务门户的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豆错误。在该服务构建器构建的portlet中,创建了一个服务jar,并将该服务jar放入Tomcat_Home/lib/ext文件夹中,以便我可以在portlet中使用portlet提供的服务。到现在为止还挺好。但是,当我调用通过JNDI引用调用另一个portlet提供的服务的portlet方法时,出现“用户缺少权限或对象未找到”错误。确实是找不到对象。当查询运行时,我在JNDI资源条目指定的JDBC连接上看到完全没有任何活动,并且在连接属性上向下钻取,我只看到正在使用的HSQLDB驱动程序。它应该正在使用我的全局资源JNDI条目中指定的MSSQL驱动程序据我了解。

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

这看起来很简单。在阅读许多关于使用JNDI/JDBC资源的指导时,我似乎正确地遵循了它们。在LR 6.1.1和Tomcat 7中使用我错过的JNDI/JDBC资源有一些技巧吗?

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

回答

1

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

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

也,你可以尝试在春天的JNDI资源查找不同的方法:

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

不知道关于第一个计算策略,但是如果没有找到JNDI资源,第二个将会明显失败。 希望这有助于。

相关问题