Một câu nói từ Đậu EJB 3.1 spec
4,7 Stateless Session
đậu phiên Stateless là đậu phiên có trường hợp có không trạng thái đàm thoại. Điều này có nghĩa là tất cả các cá thể đậu là tương đương khi chúng không liên quan đến việc phục vụ một phương thức do khách hàng gọi.
Thuật ngữ "không quốc tịch" biểu thị rằng một cá thể không có trạng thái cho một khách hàng cụ thể. Tuy nhiên, các cá thể của cá thể có thể chứa trạng thái trên các cuộc gọi phương thức gọi của máy khách.
Ví dụ về trạng thái bao gồm kết nối cơ sở dữ liệu mở và đối tượng tham chiếu đến đối tượng bean của doanh nghiệp.
Sự nhấn mạnh là trên không có trạng thái hội thoại. Họ có thể có trạng thái "khác".
Ví dụ, tôi đã sử dụng nó để kiểm tra nếu tải được lan truyền như nhau trên tất cả các trường trong một cụm nút:
@Stateless(name = "DemoPingSb")
@Remote(DemoPingSbIfc.class)
public class DemoPingSb implements Serializable, DemoPingSbIfc {
private final AtomicInteger instancePingCount = new AtomicInteger(0);
private final static AtomicInteger classPingCount = new AtomicInteger(0);
public DemoPingSb() {
super();
}
public String ping(final String s) {
final int local = this.instancePingCount.incrementAndGet();
final int global = classPingCount.incrementAndGet();
System.out.println("INFO: local " + local + ", global " + global
+ ", s " + s);
return s.toUpperCase();
}
}
và nếu có đủ tải:
13: 13: 21,769 THÔNG TIN [stdout] (http-localhost-127.0.0.1-8080-1) THÔNG TIN: địa phương 22, toàn cầu 22, s hello
13: 13: 21,936 THÔNG TIN [stdout] (http-localhost-127.0. 0.1-8080-1) INFO: địa phương 1, toàn cầu 23, s hello
Vì vậy, có một số trường hợp đặc biệt mà tính năng này có thể hữu ích.
Bình luận
- Các spec nói về biến dụ; việc sử dụng các biến tĩnh không được đề cập ở đó. Vì vậy, các mã có thể không chính xác liên quan đến
classPingCount
- Việc sử dụng một
AtomicInteger
cho instancePingCount
thể bằng cách thay thế bằng volatile int
, bởi vì (4.10.13)
Các thùng chứa phải đảm bảo rằng chỉ có một thread có thể được thực hiện một phiên phiên độc lập hoặc không trạng thái phiên bản bất kỳ lúc nào.
- Một stateless session bean không bao giờ thụ động (4,2)
Xác định "biến toàn cầu"; Tôi hỏi vì nó không phải là một thuật ngữ Java chuẩn, và có thể có nghĩa là những thứ khác nhau với những người khác nhau. –