【发布时间】:2014-12-17 16:16:23
【问题描述】:
在我的应用程序中,我需要查找用于数据库连接的 jndi 资源。
我有一个 EAR,其中包含我的 EJB 项目和远程无状态 ejb:ABean.jar
阅读Using Spring and Hibernate with WebSphere Application Server我定义
在 EAR 项目的application.xml 中:
<module>
<ejb>ABean.jar</ejb>
</module>
<resource-ref>
<res-ref-name>jdbc/b</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
在我的春季环境中:
<jee:jndi-lookup
id="aDataSource"
jndi-name="jdbc/b"
cache="true"
expected-type="javax.sql.DataSource"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="META-INF/persistence.xml"/>
<property name="dataSource" ref="aDataSource" />
<property name="persistenceUnitName" value="APU"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.DB2390Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
</bean>
现在,如果我通过 WebSphere 控制台安装应用程序,它会要求我将 jndi 资源分配给 jdbc/b(这没关系),但如果我尝试调用 ejb,则会抛出 NameNotFoundException,因为 @ 987654328@未找到!
更好地阅读我看到的上一个链接:
对于 EJB JAR 文件,应在需要访问数据源的每个 EJB 中声明相同的资源引用。
所以我尝试将资源引用定义到我的ejb-jar.xml
<enterprise-beans>
<session>
<ejb-name>TestServiceBean</ejb-name>
<ejb-class>it.test.TestServiceBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<resource-ref>
<res-ref-name>jdbc/b</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>
</session>
</enterprise-beans>
我尝试再次安装(我还将jndi资源分配给jdbc/b)并且对ejb的调用成功运行,但是如果我有n个ejb,我是否需要将n次相同的jndi资源分配给n 用于 jdbc/b 的 ejb 资源引用?
我的配置有什么问题?难道不可能从所有ejb“指向”同一个resource-ref吗?有完整的例子吗?
【问题讨论】:
标签: spring hibernate ejb websphere lookup