两个会话 Bean 可以实现相同的远程接口吗?

Can Two Session Bean Implement Same Remote Interface?

我是 ejb 的新手。我想知道两个会话 bean 是否可以实现相同的远程(本地)接口,如果不能,为什么?

欢迎提供代码示例。

感谢您的帮助!

是的,他们可以。

示例:

public interface NodeService {

    public void start();
}

第一次实施:

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless
@Remote(NodeService.class)
public class NodeService1 implements NodeService {

    @Override
    public void start() {
    }

}

第二次实施:

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless
@Remote(NodeService.class)
public class NodeService2 implements NodeService {

    @Override
    public void start() {
    }

}

另请参阅:

  • EJB's - when to use Remote and/or local interfaces?

是的,你可以。

您可以通过任意数量的 bean 实现任何接口(本地和远程),但是您需要指定要注入的特定 bean。

对于简单的示例,您可以使用 beanName 属性:

@Remote
public interface Worker {}    

//

@Stateless(name = "firstBean")
public class Bean1 implements Worker {}

//

@Stateless(name = "secondBean")
public class Bean2 implements Worker {}

//
@Stateless
public class LogicBean {
  @EJB(beanName = "firstBean")
  private Worker worker1;

  @EJB(beanName = "secondBean")
  private Worker worker2;
}

您也可以通过 mappedName 属性使用 jndi names

另请参阅:

https://developer.jboss.org/thread/230291?tstart=0