[英]EJB interface JNDI lookup
我有一個界面
@Local
public interface TestService extends Serializable
{
public void aMethod();
}
實現它的無狀態bean
@Stateless
public class MyappServiceBean implements TestService
{
private static final long serialVersionUID = 1L;
@Override
public void aMethod()
{
// do something...
}
}
托管bean
@ManagedBean
public class MyappBean implements Serializable
{
private static final long serialVersionUID = 1L;
@EJB
private TestService service;
...
}
而這個POJO
public class TestPojo implements Serializable
{
private static final long serialVersionUID = 1L;
private final TestService service;
public TestPojo()
{
// this works
// service = (TestService) InitialContext.doLookup("java:global/myapp/MyappServiceBean");
// this works too
// service = (TestService) InitialContext.doLookup("java:global/myapp/MyappServiceBean!com.example.common.ejb.TestService");
// this works again
// service = (TestService) InitialContext.doLookup("java:app/myapp/MyappServiceBean");
// how to lookup ONLY by interface name/class ?
service = (TestService) InitialContext.doLookup("???/TestService");
}
...
}
各種各樣的包裝:
myapp.war
|
+ WEB-INF
|
+ lib
| |
| + common.jar
| |
| - com.example.common.ejb.TestService (@Local interface)
| |
| - com.example.common.util.TestPojo (simple pojo, must lookup)
|
+ classes
|
- com.example.myapp.ejb.MyappServiceBean (@Stateless impl)
|
- com.example.myapp.jsf.MyappBean (jsf @ManagedBean)
因為我想在不同的應用程序中使用common.jar
,我希望基於Testservice
接口名稱進行查找,就像我注入@EJB TestService service;
在@ManagedBean
或@WebServlet
怎么實現這個?
一個骯臟的解決方案是申報
@Stateless(name = "TestService")
public class MyappServiceBean implements TestService
並從pojo中查找它:
service = (TestService) InitialContext.doLookup("java:module/TestService");
任何更好的解決方案都會被愉快地接受!
簡單方法:
private MyappServiceBean getMyappServiceBean() {
try {
return InitialContext.doLookup("java:module/MyappServiceBean");
} catch (NamingException e) {
logger.error("Failed to look up MyappServiceBean EJB", e);
}
return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.