【问题标题】:Wildfly not crating JNDI bindings for beans implementing 2 interfacesWildfly 没有为实现 2 个接口的 bean 创建 JNDI 绑定
【发布时间】:2019-08-03 23:39:02
【问题描述】:

Wildfly 15.0.0 存在一个问题,即它没有为实现本地和远程接口的 EJB 创建 JNDI。我的课程如下:

本地接口:

@Local
public interface BlockingManagerRemote{ 
}

远程接口:

@Remote
public interface BlockingManagerLocal{  
}

实现:

@Remote({BlockingManagerRemote.class})
@Local({BlockingManagerLocal.class})
@Stateless
public class BlockingManager
        implements BlockingManagerRemote, BlockingManagerLocal {
}

我首先收到以下消息:

2019-03-13 12:09:57,459 INFO  [org.jboss.as.ejb3.deployment] (MSC service thread 1-3) WFLYEJB0111: No jndi bindings will be created for EJB BlockingManager since no views are exposed

当尝试将该 EJB 注入另一个类时,如下所示:

@Remote({BusinessUserManagerRemote.class})
@Local({BusinessUserManagerLocal.class})
@Stateless
public class BusinessUserManager
        implements BusinessUserManagerLocal, BusinessUserManagerRemote {

    @EJB
    private BlockingManagerLocal blockingManager;

}

我得到了这个例外:

2019-03-13 12:09:58,469 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.deployment.subunit."mpaymentapp-ear.ear"."mpaymentapp-service-1.0.3-SNAPSHOT.jar".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.subunit."mpaymentapp-ear.ear"."mpaymentapp-service-1.0.3-SNAPSHOT.jar".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of subdeployment "mpaymentapp-service-1.0.3-SNAPSHOT.jar" of deployment "mpaymentapp-ear.ear"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:151)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1738)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1700)
    at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1558)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1364)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEE0052: Failed to install component BusinessUserManager
    at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.deploy(ComponentInstallProcessor.java:109)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:144)
    ... 8 more
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0406: No EJB found with interface of type 'com.cit.mpaymentapp.common.blocking.BlockingManagerLocal' for binding com.cit.mpaymentapp.service.registration.BusinessUserManager/blockingManager
    at org.jboss.as.ejb3.deployment.processors.EjbInjectionSource.getResourceValue(EjbInjectionSource.java:90)
    at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.processBindings(ComponentInstallProcessor.java:263)
    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:215)
    at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
    at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.deployComponent(ComponentInstallProcessor.java:218)
    at org.jboss.as.ee.component.deployers.ComponentInstallProcessor.deploy(ComponentInstallProcessor.java:101)
    ... 9 more

同样的代码在 JBOSS EAP6 上运行。为什么 Wildfly 无法识别本地接口BlockingManagerLocal

【问题讨论】:

  • 在您的示例中,您在 BlockingManagerRemote 类上有 @Local,这只是此处发布的错误还是您的代码中的错误?我假设您的接口实际上也列出了一些方法?
  • 是的,@Local 注解也在界面上。两个接口都包含方法,但我在问题中省略了它们。
  • 请出示您的application.xml
  • 我的评论你把@Local 放在你的遥控器上,反之亦然?

标签: ejb wildfly jndi


【解决方案1】:

我认为您应该将您的接口实现为纯 java 接口,并将注释 @LocalBean 而不是 @Local 添加到您的 bean 实现中。

应避免使用远程 EJB。我建议改用 Rest 接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2015-10-09
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    相关资源
    最近更新 更多