2012-12-11 2 views
0

Liferay 포럼에서이 문제에 대한 기쁨을 느끼지 못하며이 프로젝트에 대한 시간이 촉박합니다. 이것은 스프링에 대한 지식이 부족하기 때문에 발생할 수 있습니다.Liferay에서 작동하는 JNDI JDBC 리소스를 가져올 수 없습니다.

server.xml에 정의 된 JNDI 전역 리소스와 Tomcat 7/conf 폴더의 context.xml에있는 리소스 링크가 있습니다. 서버가 시작될 때 유효성 검사 쿼리가 실행되는 것을 볼 수 있기 때문에 JNDI 리소스가로드되고 있음을 알고 있습니다. 여태까지는 그런대로 잘됐다.

다른 포틀릿에 서비스를 제공하는 포틀릿 만 있습니다. 이 포틀릿에는 JDBC 리소스를 가리키는 세션 팩토리가있는 hibernate.cfg.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> 

배치에 따라 그 서비스 포틀릿에 콩 오류 문제를 해결 내선-spring.xml 위의 추가 : 나는 또한 다음을 가지고있는 서비스 포틀릿에서 EXT-spring.xml 파일이 있습니다. 해당 서비스 빌더 내장 포틀릿에서 서비스 항아리가 생성되었고 Tomcat_Home/lib/ext 폴더에 해당 서비스 항아리가 저장되어 포틀릿에서 제공하는 서비스를 사용할 수있게되었습니다. 여태까지는 그런대로 잘됐다. 그러나 JNDI 참조로 다른 포틀릿에서 제공하는 서비스를 호출하는 포틀릿 메소드를 호출 할 때 "사용자에게 권한이 없거나 객체를 찾을 수 없음"오류가 발생합니다. 확실히 개체를 찾을 수 없습니다. 쿼리가 실행되면 JNDI 리소스 항목에 지정된 JDBC 연결에 대한 활동이 전혀없고 연결 속성을 드릴 다운하는 동안 사용중인 HSQLDB 드라이버 만 볼 수 있습니다. 내 글로벌 리소스 JNDI 항목에 지정된 MSSQL 드라이버를 사용해야합니다.

그래서 내가 뭘 잘못 했니? 이 서비스를 호출하는 포틀릿에 구성 항목을 추가해야합니까?

이렇게 간단 해 보입니다. JNDI/JDBC 리소스 사용에 대한 지침을 제공하는 많은 게시물을 읽으면 올바르게 따라 갔던 것 같습니다. 내가 놓친 LR 6.1.1과 Tomcat 7에서 JNDI/JDBC 자원을 사용하는 데 어떤 트릭이 있습니까?

감사합니다. (정말로 답변을 원합니다!) 당신은 Spring에서 JNDI 리소스 조회에 대한 다른 접근을 시도 할 수도

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

: 먼저

답변

1

,이 같은 JNDI 자원 참조를 다시 시도 할 수 첫째 approch에 대한

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

확실하지 않음을, JNDI 자원을 찾을 수없는 경우에는 초를 확실히 실패하게됩니다. 희망이 도움이됩니다.

관련 문제