无法从[JBOSS 7.1.1.FINAL和SEAM 2.2.1.CR2]中的WAR访问JAR中的Seam组件

时间:2013-09-12 20:26:31

标签: jboss jboss7.x seam jndi jboss-seam

问题:我有一个定义EJB和实体的ejb-jar-1.jar。项目结构如下。在部署期间,所有EJB都成功引导>启动并将其JNDI位置打印在日志文件中。我的WAR文件中有一个类需要访问位于ejb-jar-1.jar内的实体上定义的NAMED QUERY。当运行这段代码时,它会抛出一个illegalArgumentException,说无法找到NAMED QUERY。另外,我也无法引用在部署ejb-jar1.jar时启动的SEAM组件。我从app-war.war文件打印了JNDI树,它没有来自ejb-jar-1.jar的任何JNDI资源。所以,我认为这是一个上下文问题,其中ejb-jar-1.jar中可用的JNDI资源无法从app-war.war中看到。

有关如何从ejb-jar-1.jar访问app-war.war中可用的JNDI资源的任何建议吗?

部署信息

* JBOSS 7.1.1.FINAL
* Uses seam framework: jboss-seam-2.2.1.CR2.jar
* Uses Hibernate 3.4.0.GA

主ear.ear

|__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部署-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>

2 个答案:

答案 0 :(得分:1)

迟到但很好......对于EE6,您需要使用JNDI可移植语法,例如。将以下注释添加到辅助模块中的所有bean

@JndiName("java:app/NameOfModule/NameOfBean")

答案 1 :(得分:0)

认为你需要在META-INF

中的jar中使用seam.properties