質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

3162閲覧

CDIの@RequestScopedで作成したビジネスロジックをjBatchから呼び出す方法

m.furu

総合スコア26

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

1クリップ

投稿2017/05/22 04:35

編集2017/05/22 04:56

###発生している問題・エラーメッセージ
JavaEEをベースにWebアプリケーションを作成しています。
ビジネスロジックや、データアクセス用のクラスに、@RequestScpoedを使って実装していたのですが、jBatchからは、@Dependentまたは、@ApplicationScopedしか呼び出せないことがわかり、困っています。

以下の補足情報のサイトに以下のコメントがあったのですが、対応方法がわかりませんでした。
『Your use case seems much more appropriately for a singleton ejb bean, rather than CDI beans. Additionally, you can define this beans as stateless session beans, and let the CDI requestscoped beans delegate their operations to the stateless session beans, and hence you dont have to duplicate code』
『ステートレスセッションBeanとして定義し、CDIリクエストスコープのBeanにステートレスセッションBeanにその操作を委任させることができます。したがって、コードを複製する必要はありません』

###試したこと
@RequestScopedのクラスをすべて@Dependentに変えたところ
相互に参照しているようなクラスで、エラーになってしまいました。

###補足情報(言語/FW/ツール等のバージョンなど)
Java8, JavaEE7, Payara4.1.1.171
以下に参考になりそうな、情報があったのですが、具体的な解決方法がわかりませんでした。
http://stackoverflow.com/questions/31847287/cdi-simulate-request-scope

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

jBatchを使用したことが無いので確証は有りませんが、RequestScopedをStatelessでInjectしたものをさらにApplicationでInjectすることで、ApplicationからRequestScopedのメソッドを呼べたのでソースを記載しておきます。

java

1package B170522; 2 3import javax.enterprise.context.RequestScoped; 4import javax.inject.Named; 5 6@Named 7@RequestScoped 8public class Rscoped { 9 10 public void doMessage(){ 11 System.out.println("from request scoped."); 12 } 13 14}

java

1package B170522; 2 3import javax.ejb.Stateless; 4import javax.inject.Inject; 5 6@Stateless 7public class Stless { 8 9 @Inject 10 Rscoped rs; 11 12 public void doMessage(){ 13 rs.doMessage(); 14 } 15 16}

java

1package B170522; 2 3import java.io.Serializable; 4import javax.enterprise.context.ApplicationScoped; 5import javax.inject.Inject; 6import javax.inject.Named; 7 8@Named 9@ApplicationScoped 10 11public class Apscoped implements Serializable{ 12 13 @Inject 14 Stless stl; 15 16 public void doMessage(){ 17 stl.doMessage(); 18 } 19 20} 21

以下JSFのページでGlassfishログに出力することを確認

html

1<html xmlns="http://www.w3.org/1999/xhtml" 2 xmlns:h="http://xmlns.jcp.org/jsf/html"> 3 <h:head> 4 <title>Facelet Title</title> 5 </h:head> 6 <h:body> 7 <h:form> 8 <h:commandButton value="doMessage" actionListener="#{apscoped.doMessage()}" /> 9 </h:form> 10 </h:body> 11</html>

ご参考までに。

投稿2017/05/22 06:16

BlueMoon

総合スコア1339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.furu

2017/05/22 07:27

教えて頂きありがとうございます。試したところ、jBatchで動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問