この節では、ejbの概要と開発者がなぜそれを使いたいのかを概説します。
また、ejb内の大きなテーマについても言及し、関連するトピックにリンクする必要があります。 ejbのドキュメンテーションは新しいので、これらの関連トピックの初期バージョンを作成する必要があります。
1。概要
この記事では、Enterprise JavaBeans(EJB)を使い始める方法について説明します。 JBoss AS 7.1.1.Finalを使用しますが、任意のサーバーを自由に使用することができます。
2. BeanのMaven依存関係
EJBを使用するには、最新のバージョンをpom.xmlファイルの依存関係セクションに追加してください。
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.2_spec</artifactId>
<version>1.0.0.Final</version>
</dependency>
このチュートリアルではJBossをアプリケーションサーバーとして使用するため、JBossの依存関係を正しく追加してください。チュートリアルの後半では、プロジェクトのmavenビルドの設定方法について詳しく説明します。
3. EJBリモート
最初にHelloWorldRemoteというBeanインタフェースを作成しましょう。
public interface HelloWorldRemote {
public String getHelloWorld();
}
ここでは、上記のインタフェースを実装し、 HelloWorldBean
という名前を付けます。
@Stateless
public class HelloWorldBean implements HelloWorldRemote {
public HelloWorldBean() {
}
@Override
public String getHelloWorld(){
return ("Hello World");
}
}
クラス宣言の上に@Stateless
表記があることに注意してください。ステートレスセッションBeanを示します。
4.リモートBeanのMaven設定
このセクションでは、サーバー上でアプリケーションをビルドして実行するためにmavenをセットアップする方法について説明します。
プラグインを1つずつ見てみましょう。
4.1。コンパイラプラグイン
maven-compiler-pluginは、プロジェクトのソースをコンパイルするために使用されます。
ここでは、プラグインのバージョン2.3.1を、ソースJDKとターゲットJDKが1.7の設定で使用しています。
これらの設定は、タグ内のプロパティとして定義し、$ {property}で参照しています。
<version.compiler.plugin>2.3.1</version.compiler.plugin>
<!-- maven-compiler-plugin -->
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.source>1.7</maven.compiler.source>
4.2 EJBプラグイン
このプラグインはBeanファイルと関連するクライアントjarを生成します。
ejbのバージョンを3.2と指定し、generateClientプロパティをtrueに設定してクライアントを生成します。
4.3 JBossへのデプロイ
jboss-as-maven-pluginは、JBoss AS 7にアプリケーションをデプロイ、再デプロイ、アンデプロイ、または実行するために使用されます。
この設定では、プロジェクトビルドファイル名と同じビルドファイル名を指定します。このファイル名は、デフォルトではartifactid-versionという形式のejb-remote-1.0-SNAPSHOT
です。
4.4 EJBに必要なMavenの依存関係
jboss-javaee-6.0は、使用したいJBossのJava EE 6 APIのバージョンを定義します。
JBossはBOM(Bill of Materials)を含むJava EE 6 APIの完全なセットを配布しています。
BOMは、アーティファクトのスタック(またはコレクション)のバージョンを指定します。これをタグで指定して、常に正しいバージョンの成果物を取得します。この依存関係のタイプ自体は、必要な依存関係を含むpomです。
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>${version.org.jboss.spec.jboss.javaee.6.0}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
4.5注釈
アノテーションの依存関係は次のようになります。
<dependency>
<groupId>org.jboss.spec.javax.annotation</groupId>
<artifactId>jboss-annotations-api_1.1_spec</artifactId>
<scope>provided</scope>
</dependency>
4.6 EJBバージョン3.2
次のコードでは、最新の仕様を取得しています。
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.2_spec</artifactId>
<version>1.0.0.Final</version>
</dependency>
上記のプロジェクトをJBossサーバーで実行するには、最初に実行する必要があります。
mvn clean install
それから、次のmavenコマンドを実行して、実行中のJBossサーバーに展開する必要があります。
jboss-as:deploy
これでjbossサーバーにjarファイルがデプロイされているはずです。
または、プロジェクト内のターゲットフォルダから使用可能なjarファイルをコピーして、サーバーのwebappフォルダに貼り付けることもできます。
5.クライアントプロジェクトの設定
リモートBeanを作成したら、クライアントを作成してデプロイされたBeanをテストする必要があります。
最初に、プロジェクトのmaven設定について説明しましょう。
5.1 Mavenプラグインの使用
maven-compiler-pluginは、プロジェクトのソースをコンパイルするために使用されます。
ソースクラスとターゲットクラスにjdk 1.7バージョンを指定しました。
私たちのクライアントはJavaプログラムで、実行するにはシステムとJavaプログラムの実行に役立つexec-maven-plugin
を使用します。実行可能ファイル(java)、クラスパス、javaクラス(com.baeldung.ejb.client.Client)を指定する必要があります。
プラグインには、提供された依存関係に基づいて必要なクラスパス引数が含まれているため、クラスパスは空のままです。
5.2 EJB3クライアントのMaven依存関係
EJB3クライアントを実行するには、以下の依存関係を含める必要があります。
このアプリケーションのEJBリモートビジネスインターフェイスに依存してクライアントを実行します。したがって、ejbクライアントのjar依存関係を指定する必要があります。値 "ejb-client"のタグは、このプロジェクトのEJBクライアントjarへの依存性を指定するために使用されます。
<dependency>
<groupId>com.theopentutorials.ejb3</groupId>
<artifactId>ejbmavendemo</artifactId>
<type>ejb-client</type>
<version>${project.version}</version>
</dependency>
依存関係jboss-transaction-api_1.1_spec
、 jboss-ejb-api_3.1_spec
、 jboss-ejb-client
、 xnio-api
、 xnio-nio
、 jboss-remoting
xnio-nio
、 jboss-sasl
、 jboss-marshalling-river
は実行時にスコープを持ちます。これらはコンパイル時ではなく実行時に必要です。
dependencyManagementのjboss-javaee-6.0とjboss-as-ejb-client-bomの依存関係は、スコープがインポートとして設定されています。これは、リモートPOMからの依存関係管理情報を現在のプロジェクトに含めるために使用されます。これらのリモートPOMはJBossによって提供され、JBossはクライアントの実行に必要な依存関係を含んでいます。
5.3 JBoss EJBクライアントのプロパティ
"src / main / resources"の下にファイルを作成し、jboss-ejb-client.propertiesという名前を付けます。
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
6.クライアントクラスの作成
最初に、ClientUtilityクラスを作成します。
public class ClientUtility {
private static Context initialContext;
private static final String PKG_INTERFACES = "org.jboss.ejb.client.naming";
public static Context getInitialContext() throws NamingException {
if (initialContext == null) {
Properties properties = new Properties();
properties.put(Context.URL_PKG_PREFIXES, PKG_INTERFACES);
initialContext = new InitialContext(properties);
}
return initialContext;
}
}
次に、サーバーにデプロイしたBeanを消費する実際のClientクラスを作成しましょう。
public class Client {
//The lookup method to get the EJB name
private static HelloWorldRemote doLookup() {
Context context = null;
HelloWorldRemote bean = null;
try {
// 1. Obtaining Context
context = ClientUtility.getInitialContext();
// 2. Generate JNDI Lookup name
String lookupName = getLookupName();
// 3. Lookup and cast
bean = (HelloWorldRemote) context.lookup(lookupName);
} catch (NamingException e) {
e.printStackTrace();
}
return bean;
}
private static String getLookupName() {
// The app name is the EAR name of the deployed EJB without .ear suffix.
// Since we haven't deployed the application as a .ear, the app name for
// us will be an empty string
String appName = "";
// The module name is the JAR name of the deployed EJB without the .jar
// suffix.
String moduleName = "ejb-remote-0.0.1-SNAPSHOT";
// AS7 allows each deployment to have an (optional) distinct name. This
// can be an empty string if distinct name is not specified.
String distinctName = "";
// The EJB bean implementation class name
String beanName = "HelloWorldBean";
// Fully qualified remote interface name
final String interfaceName = "com.baeldung.ejb.tutorial.HelloWorldRemote";
// Create a look up string name
String name = "ejb:" + appName + "/" + moduleName + "/" + distinctName
+ "/" + beanName + "!" + interfaceName;
return name;
}
}
ClientクラスはBeanを消費し、結果を出力します。
7.結論
そこで、EJBサーバーとそのサービスを使用するクライアントを作成しました。このプロジェクトは、任意のApplication Server上で実行できます。