2012-12-11 111 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資源,第二個將會明顯失敗。 希望這有助於。

相關問題