【发布时间】:2013-03-05 07:52:30
【问题描述】:
我已将我的应用程序从 Glassfish 2.2.1 迁移到 JBoss AS 6。
以前我有一个用于查找 ejb 的通用类,下面是代码:
public class BeanUtil {
private static InitialContext ctx;
public static <T> T create(Class<T> type){
try {
ctx = new InitialContext();
return (T)ctx.lookup(type.getName());
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}
}
上述类适用于 glassfish 中的查找。 但是在将代码迁移到 JBoss AS 6 之后。我总是得到 javax.naming.NameNotFoundException
下面是我的 ejb 类之一。
@Remote
public interface OperationPerformed {
public void addRandomNo(String randomNos);
}
@Stateless
@Remote(OperationPerformed.class)
public class OperationPerformedImpl implements OperationPerformed {
public void addRandomNo(String randomNos) {
}
}
如果我给出 jboss 在部署我的应用程序期间创建的完整 jndi 名称,那么我可以轻松查找相同的名称。但我想要通用代码进行查找。
以下是我为查找 bean 调用的代码:
OperationPerformed operationPerformed = BeanUtil.create(OperationPerformed.class);
如果我做错了什么,请提出建议。
【问题讨论】:
-
我看到你使用
@Remote,代码是在服务器还是客户端进行查找? -
代码仅在服务器上进行查找。
-
那你为什么要使用
@Remote?您是否尝试过简单地使用@EJB进行注入而不是 JNDI? -
我明白你的意思。但是通过使用@Local,我也遇到了同样的问题。通过简单地使用 {@EJB} 像:{@EJB OperationPerformed operationPerformed;} 我得到空值。似乎无法解决这个问题。
-
Glassfish 和 JBoss 的 JNDI 名称可能不同,这可能是 JNDI 代码不起作用的原因。然而,
@EJB应该将这一切抽象出来。您使用@EJB的地方是EJB 本身吗?你使用@EJB的地方和OperationPerformedImpl在同一个EAR/WAR中?
标签: jboss glassfish ejb-3.0 jboss6.x