このコードはJava EE仕様と共通で使用できますか?Java EE EJBを実行可能な実行プログラムとして
@Stateless
public class SomeBean {
@Inject
protected TransactedRunner txRunner;
public void someFunc() {
txRuner.run(new Runnable(){
Connection c = ds.getConnection();
//do jdbc stuff or jpa stuff
//close everything etc.
});
}
}
@Stateless
public class TransactedRunner {
@TransactionAttribute(REQUIRES_NEW)
public void run(Runnable r) {
r.run();
}
}
この場合、新しいトランザクションを開始する必要があり、実行可能で実行されるすべてのトランザクションが処理されます。そうですか?それとも、私はEEに苦しむべきであるいくつかのトリックがありますか?
私はスレッドを作成しません。 runメソッドを使ってEJBを呼び出します。私は非同期実行も必要ありません。ポイントは、実行可能なコードのトランザクションブロックを達成することです。 – fantomasdnb
私はスレッドを使わずにRunnable Interfaceを使用しません。 Runnableインタフェースは、インスタンスがスレッドによって実行されることを意図しているすべてのクラスによって実装される必要があります。 –
Runnableは単なるインタフェースです。たとえば、EclipseのSWT/JfaceフレームワークRunnableは、lambdaのようなコードブロックを渡すために使用されます。また、EJBでそれを渡すことは、ejbがそのコードを内部で受け取る魔法のようなものではありません。また、リモートejbでない場合は、同じスレッドになります。私はかなり確信していますが、私は確かにイエスかノーですか)。ありがとう。 – fantomasdnb