Как развернуть приложение EJB 3.0 на сервере приложений Wildfly 8

Я переношу приложение EJB 3.0 с jboss AS 6 на wildfly AS 8.

Можно ли развернуть приложение EJB 3.0 на wildfly так же просто, как на wildfly? После обновления спецификации EJB в соответствии с модулями EJB wildfly в pom.xml я получаю сообщение об ошибке компиляции: нижеприведенные символы не найдены, поскольку соответствующие API-интерфейсы недоступны в wildfly.

org.jboss.ejb3.annotation.LocalBinding;
org.jboss.ejb3.annotation.Depends;
org.jboss.ejb3.annotation.Management;
org.jboss.ejb3.annotation.Service;

Приведенные выше аннотации находятся в jboss-ejb3-ext-api.jar и являются частью jBoss 6 AS.

javax.annotation.security.PermitAll

Приведенные выше аннотации находятся в jboss-annotations-api_1.1_spec.jar и являются частью jBoss 6 AS.

Из документации я понял, что wildfly поддерживает EJB3.2, а EJB3.2 не поддерживает @LocalBinding / @RemoteBinding.Итак, как я буду делать то же самое в wildfly, используя standalone.xml / ejb-jar.xml / any other configuration.

Я попытался следовать блогу: JBoss: Привязка значений к JNDI в JBoss EAP 6 аналогична JNDIBindingServiceMgr, но не может связать, где я пытался найти EJB-компонент на основе имени jndi, но не работал.

Пожалуйста помоги. Огромное спасибо.


person sridhar    schedule 25.02.2015    source источник


Ответы (1)


Аннотируйте интерфейс компонента с помощью @Remote и/или @Local. Аннотируйте свою реализацию компонента с помощью @Stateless.

Создайте проект с помощью maven для создания EJB JAR и клиентского JAR (исключите реализацию вашего сервера, если она используется вне вашего EAR).

<build>
    <plugins>
        <!-- maven-ejb-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <configuration>
                <clientExcludes>
                    <clientExclude>**/ejb/*</clientExclude>
                </clientExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

Упакуйте EJB в EAR. (Это необязательно, но я развертываю веб-модуль как один файл .ear).

Чтобы иметь возможность узнать имя JNDI вашего EJB, Wildfly следует стандартному соглашению об именах. `java: глобальный///

Например, ear имеет имя my-ear, имя ejb my-ejbs, интерфейс bean-компонента a.b.c.MyBeanRemote и реализация a.b.c.ejb.MyBean: путь удаленного JNDI будет java:global/my-ear/my-ejbs/MyBean или более подробным java:global/my-ear/my-ejbs/MyBean!a.b.c.MyBeanRemote.

Чтобы создать эту структуру развертывания, я использую следующую конфигурацию в моем проекте ear:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <version>7</version>
                <applicationId>my-ear</applicationId>
                <applicationName>my-ear</applicationName>
                <defaultLibBundleDir>/lib</defaultLibBundleDir>
                <jboss>
                    <version>5</version>
                    <unauthenticated-principal>guest</unauthenticated-principal>
                    <security-domain>ABC</security-domain>
                </jboss>
                <modules>
                    <webModule>
                        <groupId>a.b.c.my-group</groupId>
                        <artifactId>my-web-app</artifactId>
                        <uri>my-web-app.war</uri>
                        <contextRoot>/my-web-app</contextRoot>
                    </webModule>
                    <ejbModule>
                        <groupId>a.b.c.my-group</groupId>
                        <artifactId>my-ejbs</artifactId>
                        <uri>my-ejbs.jar</uri>
                    </ejbModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>

<applicationName>my-ear</applicationName> установит правильное имя, используемое моим приложением EAR (без версии).

<uri>my-ejbs.jar</uri> удалит версию моего модуля ejb, поэтому она не будет отражена в пути JNDI.

Советы: JNDI-имя вашего bean-компонента печатается в файле журнала при развертывании EAR.

Если вы хотите получить доступ к компоненту извне сервера приложений, вы должны использовать путь JNDI, начинающийся с java:jboss/exported.

person deleze    schedule 25.02.2015
comment
большое спасибо .. deleze. Можно ли настроить имя JNDI в wildfly, как показано ниже: 1) Определение @LocalBinding(jndiBinding=sample/student) в компоненте EJB и 2) Поиск с использованием определенного имени JNDI, такого как Context c = new InitialContext(); studentlBean = (studentlBean) c.lookup(sample/student); - person sridhar; 25.02.2015