簡體   English   中英

EJB接口JNDI查找

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM