簡體   English   中英

Java 持久化應用程序無狀態與有狀態

[英]Java Persistance Application Stateless vs. Stateful

我是 JPA 新手,無法理解無狀態和有狀態之間的用途和區別。

有什么經驗嗎?

問候,海瑟姆

StatelessStateful是 EJB Session Bean 的概念,而不是JPA 的概念。

注意: JPA 是 EJB 規范的一部分,但可以單獨使用,也可以在 EJB 容器之外使用。 這通常是造成混淆的原因。

編輯:一個有用的 SO 線程, Why Use Stateful Session Beans

“有狀態”和“無狀態”是會話 bean 的屬性。

會話 bean(簡而言之)提供了一種在應用程序服務器上調用方法的方法。 bean是java類的一個實例。 通常,在遠程方法終止(並返回結果)后銷毀 bean。 那些 bean 是“無狀態的”。

可以(但很不尋常)向 bean 添加字段和屬性,以便客戶端可以在服務器上“創建”此實例並將其用於多個操作。 這些 bean 是“有狀態的”(應該避免)。

有狀態和無狀態是EJB (Java EE 容器管理的會話 Bean)的屬性,而不是特定於 JPA 規范的任何屬性。 對於來自同一客戶端的每個請求, 有狀態bean 將具有與其關聯的狀態。 無狀態bean 沒有客戶端特定的狀態,並且可以在多個客戶端請求之間並發、線程安全地使用單個實例。

JPA 是一種可用於持久化有狀態 bean 的持久化策略(我猜你也可以直接使用 JDBC,或者插入一些其他持久化策略)。

我認為部分混淆是 Java Persistence API 是 EJB3 規范的一部分,有時似乎可以與 EJB 互換使用。 直到我第一次拿起Pro EJB 3: Java Persistence API之前,我才真正理解這一點。 看看http://en.wikipedia.org/wiki/Enterprise_JavaBean它似乎提供了關於這個主題的很好的概述。

基本上,如您所知,Java 會編譯內容,然后您會在運行時看到應用程序,如果在類加載器之后一切順利並避免執行階段錯誤等等,當您將變量、對象等存儲在 RAM 等任何地方時或當用戶與您的應用程序交互時,數據庫和這些數據可能會發生變化,然后您開發了一個有狀態的應用程序,如果您認為您的代碼邏輯中沒有任何動態(可以重塑應用程序行為的東西),那么您將要開發一個無狀態應用程序。

簡而言之,有狀態應用程序意味着在運行時動態更改類屬性。

暫無
暫無

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

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