【问题标题】:Migrate EJB 2.1 from WebSphere 6.1 to JBoss EAP 6.1将 EJB 2.1 从 WebSphere 6.1 迁移到 JBoss EAP 6.1
【发布时间】:2014-02-10 16:38:09
【问题描述】:

我正在尝试从 WS 6.1 迁移到 JBoss EAP 6.1。我很难让 EJB 2.1 在 JBoss 6.1 中工作。

(注意:@GatewayEjbJndiName@ 在编译时被 ant 替换。)

这是原始的 ejb-jar.xml :

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar id="ejb-jar_ID" version="2.1" 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/j2ee/ejb-jar_2_1.xsd">
    <display-name>ServerGateway</display-name>
    <enterprise-beans>
        <session id="Session_gateway">
            <display-name>GatewayEJBSB</display-name>
            <ejb-name>@GatewayEjbJndiName@</ejb-name>
            <home>ca.company.qc.project.server.gateway.ejb.GatewayEJBRemoteHome</home>
            <remote>ca.company.qc.project.server.gateway.ejb.GatewayEJBRemote</remote>
            <ejb-class>ca.company.qc.project.server.gateway.ejb.GatewayEJBBean</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Container</transaction-type>
        </session>
    </enterprise-beans>
    <assembly-descriptor>
        <container-transaction>
            <method>
                <ejb-name>@GatewayEjbJndiName@</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
    </assembly-descriptor>
</ejb-jar>

这是我为 JBoss EAP 6.1 (ejb-jar.xml) 提出的(经过数小时研究):

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar id="ejb-jar_ID" version="2.1" 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/j2ee/ejb-jar_2_1.xsd">
    <display-name>ServerGateway</display-name>
    <enterprise-beans>
        <session id="Session_gateway">
            <display-name>GatewayEJBSB</display-name>
            <ejb-name>@GatewayEjbJndiName@</ejb-name>
            <home>ca.company.qc.project.server.gateway.ejb.GatewayEJBRemoteHome</home>
            <remote>ca.company.qc.project.server.gateway.ejb.GatewayEJBRemote</remote>
            <ejb-class>ca.company.qc.project.server.gateway.ejb.GatewayEJBBean</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Container</transaction-type>
            <ejb-ref>
                <ejb-ref-name>ejb/projectGatewayEJB</ejb-ref-name>
                <ejb-ref-type>Session</ejb-ref-type>
                <home>ca.company.qc.project.server.gateway.ejb.GatewayEJBRemoteHome</home>
                <remote>ca.company.qc.project.server.gateway.ejb.GatewayEJBRemote</remote>
            </ejb-ref>
        </session>
    </enterprise-beans>
    <assembly-descriptor>
        <container-transaction>
            <method>
                <ejb-name>@GatewayEjbJndiName@</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
    </assembly-descriptor>
</ejb-jar>

但每次尝试启动 JBoss 服务器时都会出现此错误:

[org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-3) JNDI bindings for session bean named ProjectGatewayEJB in deployment unit subdeployment "GatewayEJBClientProject.jar" of deployment "Project.ear" are as follows:

    java:global/Project/GatewayEJBClientProject/ProjectGatewayEJB!ca.company.qc.project.server.gateway.ejb.GatewayEJBRemote
    java:app/GatewayEJBClientProject/ProjectGatewayEJB!ca.company.qc.project.server.gateway.ejb.GatewayEJBRemote
    java:module/ProjectGatewayEJB!ca.company.qc.project.server.gateway.ejb.GatewayEJBRemote
    java:jboss/exported/Project/GatewayEJBClientProject/ProjectGatewayEJB!ca.company.qc.project.server.gateway.ejb.GatewayEJBRemote
    java:global/Project/GatewayEJBClientProject/ProjectGatewayEJB!ca.company.qc.project.server.gateway.ejb.GatewayEJBRemoteHome
    java:app/GatewayEJBClientProject/ProjectGatewayEJB!ca.company.qc.project.server.gateway.ejb.GatewayEJBRemoteHome
    java:module/ProjectGatewayEJB!ca.company.qc.project.server.gateway.ejb.GatewayEJBRemoteHome
    java:jboss/exported/Project/GatewayEJBClientProject/ProjectGatewayEJB!ca.company.qc.project.server.gateway.ejb.GatewayEJBRemoteHome

10:54:41,858 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.subunit."Project.ear"."ProjectWebApp.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.subunit."Project.ear"."ProjectWebApp.war".INSTALL: JBAS018733: Failed to process phase INSTALL of subdeployment "ProjectWebApp.war" of deployment "Project.ear"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127) [jboss-as-server-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.4.GA.jar:1.0.4.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.4.GA.jar:1.0.4.GA]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_40]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_40]
    at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_40]
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS014543: No EJB found with interface of type 'ca.company.qc.project.server.gateway.ejb.GatewayEJBRemoteHome' and name 'ServerGateway.jar#GatewayEJB' for binding java:module/env/ProjectGatewayEJBBean
    at org.jboss.as.ejb3.deployment.processors.EjbInjectionSource.getResourceValue(EjbInjectionSource.java:97)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.addJndiBinding(ModuleJndiBindingProcessor.java:229)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:120)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120) [jboss-as-server-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
    ... 5 more

EJBBean/EJBRemote/EJBRemoteBusiness/EJBRemoteHome 类中的任何地方都没有注释。因为它在 EJB 2.1 中不受支持(据我所知)。

我使用“standalone-full.xml”配置文件运行服务器。我也尝试了standalone-ha.xml,但没有成功。

我真的不知道接下来要做什么..

【问题讨论】:

    标签: java jakarta-ee jboss ejb websphere


    【解决方案1】:

    JBoss community forum有话题,希望能帮到你解决问题。

    【讨论】:

      【解决方案2】:

      检查基于规则的自动可插拔迁移工具JBoss Windup。它在一定程度上涵盖了 EJB 2.1 到 EJB 3 的迁移。

      如果您发现未涵盖的内容,Windup 团队将很乐意通过http://issues.jboss.org/WINDUPRULE 接受改进请求。

      你的问题:

      EJB 3 可用于standalone.xml,不需要standalone-ha,它代表高可用性,即集群解决方案。 full 表示完整配置文件,与 Java EE 6 规范中指定的 web 配置文件相反。见Java EE 6 Web profile vs Java EE 6 Full Platform

      我建议迁移到 EJB 3,因为 Java EE 7 已经出现了一段时间,并且大多数应用服务器将放弃对 EJB 2.x 的支持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        • 2018-04-12
        • 1970-01-01
        • 2012-06-07
        • 2015-02-11
        • 2014-03-10
        • 1970-01-01
        相关资源
        最近更新 更多