我尝试使用jndi查找本地EJB,但失败了
EssaiImpl
EJB的save方法由请求范围的托管bean调用。
本地界面是:
@Local
public interface Essai {
public void save();
}
,实施是:
@Stateless
public class EssaiImpl implements Essai {
/**
* Tag des logs
*/
static private Class<EssaiImpl> logTag = EssaiImpl.class;
public EssaiImpl() {}
public void save() {
try {
InitialContext context = new InitialContext();
Essai business = (Essai) context.lookup("java:module/EssaiImpl");
} catch (Exception ex) {
Logger.erreur(logTag, "Exception :" + ex.getMessage());
}
}
}
(Logger只是一个简单的日志记录封装)
我总是有例外:
[#|2016-01-01T13:16:00.628+0100|INFO|glassfish 4.1||_ThreadID=26;_ThreadName=Thread-8;_TimeMillis=1451650560628;_LevelValue=800;|
Caller+1 at com.test.EssaiImpl.save(EssaiImpl.java:33)
- Exception :com.sun.proxy.$Proxy220 cannot be cast to com.test.EssaiImpl|#]
任何帮助都会有所帮助,
答案 0 :(得分:0)
它适用于GF-4.1,4.1.1和4.1.1网络配置文件
创建了一个包含3个类和1个接口的项目:
RestConfigure:
@ApplicationPath("/resources")
public class RestConfigure extends Application {}
EssaiResource:
@Path("/call")
@javax.enterprise.context.RequestScoped
public class EssaiResource {
@Inject Essai essai;
@GET public String callEssai() {
essai.save();
return "called essai";
}
}
和你的Essai界面:
@Local
public interface Essai {
void save();
}
和EssaiImpl:
@Stateless
public class EssaiImpl implements Essai {
public void save() {
try {
InitialContext context = new InitialContext();
Essai business = (Essai) context.lookup("java:module/EssaiImpl");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
暂时将记录器更改为ex.printStacktrace()
。
希望这可以帮助你...
的Ivar
答案 1 :(得分:0)
简答:始终查找界面。
错:
Essai business = (Essai) context.lookup("java:module/EssaiImpl");
<强>正确:强>
Essai business = (Essai) context.lookup("java:module/Essai");