我在websphere中部署了一个ejb模块(EAR1),并且想要从WAR访问这个EJB,而WAR也在同一个Websphere中。
我尝试使用下面的代码,但是没有用。
public class RACAccessProvider {
private InitialContext myInitialContext;
public synchronized Object locateEJB(final Class clazz) throws ClassCastException, NamingException {
try {
System.out.println("looking up ejb.. for class " + clazz);
Object obj;
final String jndiName = clazz.getName();
obj = myInitialContext.lookup(jndiName);
System.out.println("###lookuop object.." + obj);
return obj;
} catch (final Exception e) {
e.printStackTrace();
}
return null;
}
public RACAccessProvider() {
System.out.println("Setting context in RACAccessProvider constructor...");
final Properties context = new Properties();
context.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
try {
myInitialContext = new InitialContext(context);
} catch (NamingException e) {
e.printStackTrace();
}
}
}
上面的代码挂在
行obj = myInitialContext.lookup(jndiName);
非常感谢任何帮助。
答案 0 :(得分:0)
首先,您需要在上下文对象中设置另一个属性:
context.setProperty(Context.PROVIDER_URL, "corbaloc::localhost:2809")
其次,您使用的jndi名称似乎不合适。它应该像
"java:comp/env/ejb/clazz"
答案 1 :(得分:0)
you need to check if your jndi name is correctly mentioned,
Also if initial context is initialized properly as per below code:
InitialContext ic = new InitialContext();
String snName = "java:comp/env/mail/your_jndiname";
Session session = (javax.mail.Session)ic.lookup(snName);