トランザクションではないWebサービスとしてEJBを公開するにはどうすればよいですか?
次のように定義されたEJB(Java EE 6注釈を使用してコード化されている)があります。@Stateless
@WebService
public class SecurityWebService {
public void registerUser(RegistrationRequest request) {
...
}
}
このEJBもWebサービスとして公開されています。しかし、私は生成されたWebサービスの問題に遭遇しています。私のコンテナ(GlassFish)によって生成されるWSDLには、デフォルトでステートレスセッションBeanがトランザクション型であるため、WS-Atomic Transactionポリシーが含まれています(詳細はhereを参照)。残念ながら、.NETクライアントはWS-ATポリシーを理解していないため、WSDLで窒息しています。
だから私が本当に望むのは、きれいでクリーンなWebサービスで、トランザクションではないが、関連するEJBはトランザクションでなければならない(データベースにレコードを挿入する必要がある)。これはどうすればいいですか?私が考えることができる唯一のアプローチは、このようなEJBにすべての呼び出しを渡す "通常の" Webサービスを作成することです - 上品ではない:
@WebService
public class SecurityWebService {
@Inject
private SecurityService securityService;
public void registerUser(RegistrationRequest request) {
securityService.registerUser(request);
}
}
@Stateless
public class SecurityService {
public void registerUser(RegistrationRequest request) {
...
}
}
もっと良い方法はありますか?
ありがとう。
Naresh
あなたのソリューションはなぜエレガントではありませんか?これは、責任の明確な分離です。非トランザクションWebサービスは、トランザクションEJBとは異なる責任を負う。また、後で簡単に変更することもできます。 – jhyot