我希望在代码中引用一些无状态bean。问题是我只知道它正在实现的接口(我不知道名称,类名或任何其他)。
通常对于任何其他EJB,我会将@EJB注释与接口
一起使用private @EJB MyInt myInt;
有人知道是否可以通过代码获取它,例如ex:
MyInt myInt = new InitialContext().lookuup(MyInt.class);
答案 0 :(得分:1)
不幸的是,如果您有相同接口的多个实现,则需要指定所需的实现。因此,您将需要实现的映射名称,否则您将需要JNDI名称以便查找它。您的Application Server管理员应该能够为您提供JNDI名称。
如果您想要在运行时交换实现,那么就不能使用注入。您将不得不进行JNDI查找。 我们通过从数据库中的配置表中获取JNDI名称来构建一个小工厂来查找无状态会话bean。这使您可以通过更改数据库表中的JNDI名称来交换实现。 以下是我们的bean查找方法的示例:
public static Object getBean(String jndiName) throws NamingException {
Object bean = null;
Context ctx = new InitialContext();
bean = ctx.lookup(jndiName);
return bean;
}
我希望这会有所帮助。 :)
答案 1 :(得分:1)
我假设您要查找远程EJB,因为您不知道具体的类名。远程EJB在RMI注册表中注册(考虑map <JndiName, RemoteObject>
)。即使服务提供者没有为远程服务指定JNDI名称,应用程序服务器也会根据服务接口名称创建JNDI名称并在RMI注册表中注册。
因此客户端需要知道JNDI名称才能查找服务。