接続しようとしている方法が間違っています。
リモート ejb に接続するための形式は次のとおりです。
// Create a look up string name
String name = "ejb:" + appName + "/" + moduleName + "/" + distinctName
+ "/" + beanName + "!" + interfaceName;
SO Documentation に以下を寄稿しました。
JBoss AS 7.1 で 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 を設定で 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 でアプリケーションをデプロイ、再デプロイ、アンデプロイ、または実行するために使用されます。
この構成では、プロジェクトのビルド ファイル名と同じビルド ファイル名を指定しますejb-remote-1.0-SNAPSHOT。
4.4 EJB に必要な Maven 依存関係
jboss-javaee-6.0 は、使用する JBoss の Java EE 6 API のバージョンを定義します。
JBoss は、部品表 (BOM) を含む 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 バージョンを指定しました。
私たちのクライアントはexec-maven-pluginJava プログラムです。それを実行するには、システムおよび Java プログラムの実行に役立つ を使用します。実行可能ファイル (つまり 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は、コンパイル時ではなく実行時に必要なため、ランタイムとしてスコープを持ちますjboss-sasl。jboss-marshalling-river
dependencyManagement の下の依存関係jboss-javaee-6.0およびjboss-as-ejb-client-bomには、インポートとしてのスコープがあります。これは、リモート POM からの依存関係管理情報を現在のプロジェクトに含めるために使用されます。これらのリモート POM は、クライアントを実行するために必要な依存関係を含む 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 サーバーとクライアントを作成しました。プロジェクトは、任意のアプリケーション サーバーで実行できます。