0

我正在尝试将 ear 文件从 JBoss 5.1 EAP 移动到 6.1。当我尝试使用 EJB 时遇到了这个问题:

NamingException JBAS011843: Failed instantiate InitialContextFactory com.sun.jndi.cosnaming.CNCtxFactory from classloader ModuleClassLoader for Module "deployment.my.ear.my.war:main" from Service Module Loader
13:34:14,304 INFO  [stdout]  javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory com.sun.jndi.cosnaming.CNCtxFactory from classloader ModuleClassLoader for Module "deployment.my.ear.my.war:main" from Service Module Loader
13:34:14,304 INFO  [stdout]          at org.jboss.as.naming.InitialContextFactoryBuilder.createInitialContextFactory(InitialContextFactoryBuilder.java:64)
13:34:14,304 INFO  [stdout]          at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:681)
13:34:14,305 INFO  [stdout]         

此错误来自的代码是:

new InitialContext("{java.naming.provider.url=corbaloc::server:port, java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory}");

这在 JBoss 5.1 上运行良好,但在 6.1 上运行良好。我检查并发现该类存在于 6.1 上,不知道为什么会出现此错误。

编辑:另外,这是从 JDK 6 迁移到 JDK 7。

4

1 回答 1

1
  • 由于 EAP 是如此模块化,以至于有时它甚至不使用 jre 库。我们需要在 jboss-deployment-structure.xml 中提及它,以便应用程序在部署时不会失败。

  • 您需要在 EAR_Name\META-INF 中创建 jboss-deployment-structure.xml,其内容如下:

    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
      <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
    
      <sub-deployment name="WAR_Name.war">
                <exclusions>                              
                <module name="org.apache.log4j" />
                </exclusions>
            <dependencies>
                <system>
                    <paths>
                        <path name="com/sun/org/apache/xerces/internal/jaxp/datatype"/>
                        <path name="com/sun/jndi/rmi" />
                        <path name="com/sun/jndi/rmi/registry"/>
                    </paths>
                </system>
        </dependencies>
      </sub-deployment>
    </jboss-deployment-structure>
    
于 2013-10-11T05:07:04.457 回答