簡體   English   中英

缺少上下文的EntityManager調用了無狀態會話Bean

[英]Stateless session bean called out of context missing EntityManager

我是Java EE的新手,所以我的問題可能很基礎。 我使用無狀態會話bean(簡化)構建了以下REST Web服務:

@Path("/list/")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Stateless
public class ListResource {

    @PersistenceContext(unitName = "unitName")
    private EntityManager em;

    @GET
    @Path("/")
    public List<Compound> getCompounds() {

    List<Compound> list = tq.getResultList();

    if (list.isEmpty()) {
        throw new WebApplicationException(Response.status(404).entity("There are no compounds in database.").build());
    }

    return list;
    }
}

它像魅力一樣工作。 可通過URL訪問並返回JSON。 問題是我還有用普通Java編寫的程序的另一部分,需要使用此Session bean作為某種模型來獲取所有化合物。

問題是,當我在某個持久性上下文之外的某個地方初始化此Session Bean時,因此不知道EntityManager來訪問數據庫。 我相信。

我不知道該怎么辦。 我可以在代碼的較遠部分初始化類ListResource並使EntityManager的依賴項注入正常工作嗎? 還是以某種方式獲取持久化上下文,然后初始化此會話Bean?

我希望這是有道理的。 我要描述它的復雜問題。

(我尚無法發表評論,因此稍后將更新此答案)

請描述“我還有用普通Java編寫的程序的另一部分”的意思。 這是具有主要方法的獨立Java程序嗎?

依賴注入將適用於“托管類”,例如Servlet,JSF ManagedBean或CDI bean。

您仍然可以遠程調用此會話bean。 您的環境是什么(Java EE版本,應用服務器)?

如果您有一個Web服務和一個調用同一個bean的獨立應用程序,我建議您將功能移到一個單獨的無狀態bean中並為其創建遠程和本地接口。 這樣,您可以將本地bean注入Web服務bean,並使用jndi調用遠程bean。

有關在此處訪問Java EE bean的更多信息。

或者,您的客戶端Java代碼可以調用Web服務以獲取所有數據。 有關連接到RESTful服務的方法,請參閱此問題

暫無
暫無

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

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