2

我是Java EE新手,所以我的問題可能非常基礎。我已經用無狀態會話bean(簡單化)構建了以下REST Web服務:無狀態會話bean調用out of context缺失EntityManager

@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?

我希望它是有道理的。它的複雜問題讓我形容。

回答

0

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

關於訪問Java EE bean的更多信息here

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

0

(我不會寫評論,所以這個答案後,我會更新)

請說明您是「我已經寫在普通的Java程序的另一部分」的意思。這是一個獨立的Java程序,它有一個主要的方法?

依賴注入將適用於像Servlet,JSF ManagedBean或CDI bean這樣的「託管類」。

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

相關問題