Có thể "tự bơm" một EJB để gọi các phương thức cục bộ như các phương thức bean không? Có một số trường hợp điều này có thể thuận lợi, ví dụ như nếu các giao dịch được quản lý container được sử dụng và điều gì đó cần được thực hiện trong giao dịch mới.Có thể một hạt EJB3 "tự bơm" và gọi các phương thức riêng của nó qua EJB không?
Một ví dụ thế nào điều này có thể làm việc:
Foo.java:
@Local
public interface FoO {
public void doSomething();
public void processWithNewTransaction(); // this should actually be private
}
FooBean.java:
@Stateless
public class FooBean implements Foo {
@EJB
private Foo foo;
public void doSomething() {
...
foo.processWithNewTransaction();
...
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void processWithNewTransaction() {
...
}
}
Nếu tôi trích xuất processWithNewTransaction()
để đậu khác, nó sẽ cần phải được được hiển thị dưới dạng phương thức công khai trong giao diện, mặc dù nó chỉ được gọi là FooBean
. (Vấn đề tương tự là với mã của tôi ở trên, đó là lý do tại sao có một nhận xét trong định nghĩa giao diện.)
Một giải pháp sẽ là chuyển sang giao dịch được quản lý bean. Tuy nhiên, điều này đòi hỏi phải thay đổi toàn bộ hạt để quản lý các giao dịch của riêng mình và sẽ thêm rất nhiều đĩa nồi hơi cho tất cả các phương pháp.
Ngoài các câu trả lời dưới đây: Nếu bạn không muốn có phương thức giao dịch mới trong giao diện cục bộ, bạn có thể chú thích việc thực hiện bean của bạn với cả '@Local (Foo.class)' và ' @ LocalBean' và chỉ có phương thức công khai trong lớp thực hiện. – Gandalf
OP - Vui lòng cập nhật thông tin này để bỏ chọn câu trả lời đã chọn không chính xác. – NBW