私は今ここでこのようなことを見てインターネットを精練しているので、誰でも私の質問に答えることができるのだろうかと思っています。 SLSBにSFSBを注入する際に「予期しない結果」を得ることができると私は理解しています。これは、SLSBからSFSBに行くときにトランザクション状態が失われるためです。SFSBで@Asynchronousメソッドを使用した場合
私の疑問は、注入されたステートフルEJBが使用される非同期ビジネスメソッドが1つしかないステートレスBeanを使用している場合、私の不利な点は何か?
非同期メソッドが呼び出され、別のBeanからスピンオフされると、トランザクション情報は失われます。セキュリティ情報のみが上記の非同期メソッドに渡されます。したがって、SFSBが1つの@Asynchronusメソッドでのみ使用される場合、SFSBを自分のSLSBに挿入することはできますか?私はここで何が欠けていますか?
例簡略コード:私はSeedValuesAsyncBeanステートフルを加えた場合(私はステートフルBeanを注入していないコードに違反することができる)、次いでためSeedValuesBeanステートフルを行うためのコンテキストについて
@Stateless
public class SeedValuesBean {
/**
* Async action bean.
*/
@EJB
private SeedValuesAsyncBean asyncBean;
public void performSeedValues() {
Future<String> result = asyncBean.seedValues():
logger.info("Result :"+ result.get());
}
}
@Stateless
public class SeedValuesAsyncBean {
@EJB
private LowerBusinessBean lowerBean; // is stateful
@Asynchronous
public Future<String> seedValues() {
return new AsyncResult<>(lowerBean.getResult());
}
}
@Stateful
public class LowerBusinessBean {
public String getResult() {
return Double.toString(Math.random());
}
}
私は尋ねます同じ理由で、私は非同期機能を失い、すべてが同期して起こります。
ありがとうございます。
なぜSLSBでSFSBが必要ですか? SLSBはどのSFSBを注入するか(多くのユーザ/クライアント)を認識せず、SFSBでは「状態」を使用しません。 – Geinmachi
@Asyncメソッドの呼び出しの間に状態は必要ありません。メソッド内でちょうど安定した状態。 – astropcr
'LowerBusinessBean'は '@ Singleton'でなければなりません。 –