問題タブ [bean-managed-transactions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
964 参照

java - 別々の EJB メソッドでトランザクションを開始/終了する

私は、サードパーティ システムへの顧客のプロビジョニングを担当する典型的なエンタープライズ アプリケーションを開発しました。このシステムには、特定の顧客に対して 1 つのスレッドしか動作できないという制限があります。そのため、現在進行中の customerIds@Singletonを含む単純なロック メカニズムを追加しました。Setプロビジョニングの新しいリクエストが来るたびに、最初にこれをチェックしますSet。cusotomerId が存在する場合は待機し、存在しない場合はそれを に追加してSet処理に入ります。

最近、このアプリケーションをクラスタにデプロイすることが決定されました。これは、このロック アプローチが有効ではなくなったことを意味します。ロックに DB を使用するソリューションを考え出しました。customerIds を含む単一の列を持つテーブルを作成しました (一意の制約もあります)。新しいプロビジョニング要求が来ると、トランザクションを開始し、customerId で行をロックしようとしますSELECT FOR UPDATE(customerId がまだ存在しない場合は挿入します)。その後、顧客のプロビジョニングを開始し、終了したらトランザクションをコミットします。コンセプトは機能しますが、トランザクションに問題があります。現在、 と からの customerId の追加と削除を処理するとメソッドを含むクラスCustomerLockがあります。このクラスを、Bean 管理のトランザクションを持つステートレス EJB に変換したいと考えました。add()remove()Setadd()メソッドはトランザクションを開始して行をロックし、remove()メソッドはトランザクションをコミットして行をロック解除します。しかし、トランザクションの開始と終了は同じ方法で行わなければならないようです。私が説明したアプローチを使用する方法はありますか、またはトランザクションが同じ方法で開始および終了するようにロジックを変更する必要がありますか?

カスタマーロック クラス:

CustomerProvisioner クラスの抜粋:

StandardCustomerProvisioner クラス:

0 投票する
0 に答える
477 参照

java - WildFly 13 移行 - Bean 管理のトランザクション境界を持つセッションおよびメッセージ駆動型 Bean のみが UserTransaction にアクセスできます

WildFly 13 内の JCA コンポーネントに使用している「XAManager」クラスがあります。

standalone-full.xml では、問題のリソース アダプターは次のように定義されています。

...

....

このクラスは、JCA の ManagedConnection クラスで使用され、getXAResource() メソッドで返されます。

public XAResource getXAResource() は ResourceException をスローします {

}

クラス定義は次のとおりです。

public class LuceneXAManager は XAResource を実装します {

}

私が抱えている問題は、JNDI 経由で UserTransaction を取得しようとすると、Caused by: javax.naming.NameNotFoundException: UserTransaction [Root exception is java.lang.IllegalStateException: WFLYEJB0137: Only session and message-driven beans with bean-managed transaction demarcation are allowed to access UserTransaction]

この問題を克服するために、クラスに@Statelessandで注釈を付けようと@TransactionManagement(TransactionManagementType.BEAN)しましたが、役に立ちませんでした。@Inject UserTransaction を介して UserTransaction を注入しようとしましたが、この場合、UserTransaction は null です。

何か案は ?

0 投票する
1 に答える
57 参照

cdi - TransactionImpleManager.suspend が暗黙的に呼び出される

私はBMTを使って豆を食べています。BMT を使用する別の Bean が最初の Bean に注入されます。最初のメソッドが 2 番目のメソッドを呼び出すと、突然トランザクションが閉じられます。私のコードでは、メソッド呼び出しの前とその内部に正確に絞り込みました。

トレースは次のとおりです。

2018-11-23 12:15:32,275 +0100 [TRACE] [com.arjuna.ats.jta] (デフォルト タスク 18) TransactionImple.getStatus: javax.transaction.Status.STATUS_ACTIVE

2018-11-23 12:15:32,276 +0100 [TRACE] [com.arjuna.ats.jta] (デフォルトのタスク-18) TransactionImpleManager.suspend

2018-11-23 12:15:32,277 +0100 [TRACE] [com.arjuna.ats.jta] (デフォルト タスク 18) TransactionSynchronizationRegistryImple.getTransactionKey

コード例:

JBoss EAP 7.0.9 で発生します。

私はこの星座をたくさんの場所に持っていますが、ここだけ壊れています。基本的なものが欠けていますか?追加の手がかりはどこで探すことができますか?