无法从[JBOSS 7.1.1.FINAL和Seam 2.2.1.CR2]中的WAR访问JAR中的Seam组件
问题:我有一个ejb-jar-1.jar,它定义ejb和实体。项目结构如下所示。在部署期间,所有EJB都已成功引导>启动,它们的JNDI位置将打印在日志文件中。我的WAR文件中有一个类,它需要访问驻留在无法从[JBOSS 7.1.1.FINAL和Seam 2.2.1.CR2]中的WAR访问JAR中的Seam组件,jboss,jboss7.x,seam,jndi,jboss-seam,Jboss,Jboss7.x,Seam,Jndi,Jboss Seam,问题:我有一个ejb-jar-1.jar,它定义ejb和实体。项目结构如下所示。在部署期间,所有EJB都已成功引导>启动,它们的JNDI位置将打印在日志文件中。我的WAR文件中有一个类,它需要访问驻留在ejb-jar-1.jar中的实体上定义的命名查询。当运行这段代码时,它抛出一个illegalArgumentException,表示找不到命名查询。另一方面,我也无法获得对部署ejb-jar1.jar时启动的SEAM组件的引用。我从app-war.war文件打印了JNDI树,它没有来自ejb-j
ejb-jar-1.jar
中的实体上定义的命名查询。当运行这段代码时,它抛出一个illegalArgumentException,表示找不到命名查询。另一方面,我也无法获得对部署ejb-jar1.jar
时启动的SEAM组件的引用。我从app-war.war文件打印了JNDI树,它没有来自ejb-jar-1.jar
的任何JNDI资源。因此,我认为这是一个上下文问题,在app-war.war中无法看到ejb-jar-1.jar
中可用的JNDI资源
关于如何从app war.war
访问ejb-jar-1.jar
中的JNDI资源,有什么建议吗
部署信息
* JBOSS 7.1.1.FINAL
* Uses seam framework: jboss-seam-2.2.1.CR2.jar
* Uses Hibernate 3.4.0.GA
主耳
|__META-INF
| |____jboss-deployment-structure.xml
| |____application.xml
| |____jboss-app.xml
| |____MANIFEST.MF
|__lib
| |____somejar.jar
| |____somejar.jar
|__ejb-jar-1.jar
|__ejb-jar-2.jar
|__jboss-seam-2.2.1.CR2.jar
|__commons-lang-2.4.jar
|__commons-codec-1.1.jar
|__jasypt-1.6.jar
|__app-war.war
jboss-deployment-structure.xml
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<deployment>
<exclusions>
<module name="javax.faces.api" slot="1.2"/>
<module name="com.sun.jsf-impl" slot="1.2"/>
<module name="org.hibernate" slot="main"/>
<module name="org.hibernate.validator" slot="main"/>
<module name="org.apache.commons.lang"/>
<module name="org.apache.commons.collections"/>
<module name="org.apache.commons.codec"/>
<module name="org.picketlink" slot="main"/>
<module name="org.picketbox" slot="main"/>
<module name="org.javassist" slot="main"/>
<module name="org.dom4j" slot="main"/>
</exclusions>
<dependencies>
<module name="javax.faces.api" slot="1.2" export="true"/>
<module name="com.sun.jsf-impl" slot="1.2" export="true"/>
<module name="org.javassist" slot="1" export="true"/>
<module name="org.apache.commons.logging" export="true"/>
</dependencies>
</deployment>
<sub-deployment name="app-war.war">
<exclusions>
<module name="javax.faces.api" slot="main"/>
<module name="com.sun.jsf-impl" slot="main"/>
</exclusions>
<dependencies>
<module name="javax.faces.api" slot="1.2"/>
<module name="com.sun.jsf-impl" slot="1.2"/>
<module name="deployment.main-ear.ear.ejb-jar-1.jar" />
<module name="deployment.main-ear.ear.ejb-jar-2.jar" />
<module name="deployment.main-ear.ear.jboss-seam-2.2.1.CR2.jar"/>
</dependencies>
</sub-deployment>
<module name="deployment.main-ear.ear.jasypt-1.6.jar" />
<module name="deployment.main-ear.ear.commons-codec-1.1.jar" />
<module name="deployment.main-ear.ear.commons-lang-2.4.jar" />
</jboss-deployment-structure>
假的
application.xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/javaee/application_6.xsd"
version="6">
<description>myapp</description>
<display-name>myapp</display-name>
<initialize-in-order>true</initialize-in-order>
<library-directory>lib</library-directory>
<module>
<ejb>ejb-jar-1.jar</ejb>
</module>
<module>
<ejb>ejb-jar-2.jar</ejb>
</module>
<module>
<ejb>jboss-seam-2.2.1.CR2.jar</ejb>
</module>
<module>
<web>
<web-uri>app-war.war</web-uri>
<context-root>/app</context-root>
</web>
</module>
</application>
myapp
myapp
真的
解放党
ejb-jar-1.jar
ejb-jar-2.jar
jboss-seam-2.2.1.CR2.jar
app-war.war
/应用程序
在META-INF中您需要jar中的seam.properties在META-INF中您需要jar中的seam.properties有点晚,但哦……对于EE6,您需要使用JNDI可移植语法,例如,在辅助模块中的所有bean中添加以下注释
@JndiName("java:app/NameOfModule/NameOfBean")
虽然有点晚,但很好……对于EE6,您需要使用JNDI可移植语法,例如,向辅助模块中的所有bean添加以下注释
@JndiName("java:app/NameOfModule/NameOfBean")
我已经在
ejb-jar-1.jar的META-INF中有了seam.properties
,我已经在ejb-jar-1.jar的META-INF中有了seam.properties
,谢谢-这让我解决了自己类似的问题!达维布,谢谢你-这让我解决了我自己的类似问题!