簡體   English   中英

EJB查找問題

[英]EJB lookup issue

我有一個Web項目,在不同的程序包中有幾個EJB。 但是我在查找EJB時遇到問題。

我的目錄結構:有兩個包index.jobindex.ejb

-包index.job具有POJO index.java

-包index.ejb具有一個由@Stateless(name =“ indexEJB”,mappedName =“ indexEJB”)@LocalBean定義的ejb

-包index.ejb還具有定義的本地EJB接口@Local

我的本地豆

package index.ejb;

import java.util.ArrayList;
import javax.ejb.Local;

@Local
public interface IndexEJBLocal {
    public ArrayList getLatestVersions(String year, int start, int end);
}

我的EJB

package index.ejb;

import javax.ejb.Stateless;
import javax.annotation.Resource;
import javax.ejb.LocalBean;

@Stateless(name = "indexEJB", mappedName = "indexEJB")
@LocalBean
public class IndexEJB implements IndexEJBLocal {

    @Resource(lookup = "jdbc/cap")
    private DataSource ds;

    @Override
    public ArrayList getLatestVersions(String year, int start, int end) {
        return null;
    }
}

我的POJO

//ADDED @ManagedBean ANNOTATION SO SERVER IDENTIFIES THIS OBJ AS A RESOURCE
//Also cannot use @PostConstruct as the execute method is overridden from quartz job interface

package index.job;

import javax.annotation.ManagedBean;
import javax.ejb.EJB;
import javax.inject.Inject;

@ManagedBean
public class IndexJob implements Job {

    @EJB
    IndexEJB billIndexEJB1;

    @EJB
    IndexEJBLocal billIndexEJB2;

    @Inject
    IndexEJB billIndexEJB3;

    @Inject
    IndexEJBLocal billIndexEJB4;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        System.out.println("1::"+billIndexEJB1); //ALWAYS NULL
        System.out.println("2::"+billIndexEJB2); //ALWAYS NULL
        System.out.println("3::"+billIndexEJB3); //ALWAYS NULL
        System.out.println("4::"+billIndexEJB4); //ALWAYS NULL


        try {
            Context ctx = new InitialContext();
            IndexEJBLocal billIndex = (IndexEJBLocal) 
                ctx.lookup("java:global.MY-PROJECT-NAME.IndexEJB!index.ejb.IndexEJBLocal");

            //ABOVE LOOKUP ALWAYS FAILS WITH NameNotFoundException

            System.out.println("billIndex::" + billIndex);
        } catch (Exception e) {
        e.printStackTrace();
        }
    }
}

任何有關如何解決此問題的提示將不勝感激。

我的項目正在運行:NetBeans 8.2; JDK 1.8b45; Java EE 7網站; WebLogic 12.2.1.1

每當將bean注釋為@LocalBean時,使bean暴露無接口視圖時,查找返回的引用將是對EJB類而不是接口的引用。 @LocalBean批注公開了EJB實現中的所有方法,而不僅僅是接口中定義的方法。

您得到的異常可能是告訴您,沒有帶有IndexEJBLocal視圖的bean。

您最簡單的解決方案是刪除@LocalBean批注,我相信這是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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