Я мигрирую Java EE 6 приложение из glassfi sh 3.1.1.2 в WildFly 18.
На сервере развернуто два ушка:
+ CoreEar
+ CoreEjb.jar
+ AppEar
+ AppEjb.jar
+ somewar1.war
+ somewar2.war
В CoreEjbs I У меня есть удаленный интерфейс:
@Remote
public interface ExampleInterface {
// methods
}
И реализующий компонент:
@Stateless
@LocalBean
public class Example implements ExampleInterface {
// methods implementation
}
И он используется в AppEjb:
public class SomeManager {
@EJB
ExampleInterface injectedBean;
}
Этот код был развернут и отлично работает на glassfi sh. Но он не работает на WildFly 18.
CoreEar развертывается нормально, и в журналах я могу найти информацию о привязках JNDI для сессионного компонента с именем 'Example':
[org.jboss.as.ejb3.deployment] (MSC service thread 1-2) WFLYEJB0473: JNDI bindings for session bean named 'Example' in deployment unit 'subdeployment "CoreEjb.jar" of deployment "CoreEar.ear"' are as follows:
java:global/CoreEar/CoreEjb/Example!com.company.example.ExampleInterface
java:app/CoreEjb/Example!com.company.core.ExampleInterface
java:module/Example!com.company.core.ExampleInterface
java:jboss/exported/CoreEar/CoreEjb/Example!com.company.core.ExampleInterface
ejb:CoreEar/CoreEjb/Example!com.company.core.ExampleInterface
java:global/CoreEar/CoreEjb/Example!com.company.core.Example
java:app/CoreEjb/Example!com.company.core.Example
java:module/Example!com.company.core.Example
ejb:CoreEar/CoreEjb/Example!com.company.core.Example
Но тогда, когда я развернуть AppEar Я получаю исключения:
13:45:38,344 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC000001: Failed to start service jboss.deployment.subunit."AppEar.ear"."AppEjb.jar".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.subunit."AppEar.ear"."AppEjb.jar".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of subdeployment "AppEjb.jar" of deployment "AppEar.ear"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:183)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1363)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEE0052: Failed to install component SomeManager
at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.deploy(ComponentInstallProcessor.java:109)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:176)
... 8 more
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0406: No EJB found with interface of type 'com.company.core.ExampleInterface' for binding com.company.managers.SomeManager/injectedBean
at org.jboss.as.ejb3.deployment.processors.EjbInjectionSource.getResourceValue(EjbInjectionSource.java:90)
at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.processBindings(ComponentInstallProcessor.java:261)
at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.access$000(ComponentInstallProcessor.java:80)
at org.jboss.as.ee.component.deployers.ComponentInstallProcessor$1.handle(ComponentInstallProcessor.java:213)
at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.deployComponent(ComponentInstallProcessor.java:216)
at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.deploy(ComponentInstallProcessor.java:101)
... 9 more
Я могу решить это исключение, когда добавляю строку поиска в аннотацию @EJB
@EJB(lookup = "java:app/CoreEjbs/Example!com.company.core.ExampleInterface")
ExampleInterface injectedBean;
Я не знаю, будет ли она развернута, потому что Существуют исключения для поиска других интерфейсов в CoreEjbs.
Проблема заключается в том, что ExampleInterface внедряется во многие другие bean-компоненты, и в CoreEjbs есть интерфейсы, отличные от ExampleInterface, которые также вводятся во многие bean-компоненты.
Объявление поиска во всех местах, где внедряется удаленный @EJB, - большая работа, и в дальнейшем это затруднит изменение реализаций и т. Д. c.
Есть ли способ объявить глобально JNDI-look- имя для каждого случая @EJB ExampleInterface?
Я пробовал кое-что с ejb-jar. xml и jboss-ejb3. xml, но ничего из этого не работало.