リンクされたチュートリアルを使用しないことをお勧めします。2011年からのようですが、まだ多くのデプロイメント記述子とホームインターフェース(古くて、悪く、醜く、今日では不要です)について語っています。
EJB 3.0 については、このJBoss チュートリアルを参照できます。
NetBeans は Java EE 開発を強力にサポートします。非常に高速なチュートリアル (Java EE 6):
1. EJB プロジェクト (EJB モジュール) を作成します。
新しいプロジェクトを作成します: Shift + Ctrl + N
-> Java EE
-> EJB Module
-> Next
. 好きな名前を選んで を押してくださいNext
。対象のアプリケーション サーバー (NetBeans は Glassfish Server 3.x を推奨するはずです) と Java EE バージョン (Java EE 6 を選択) を選択します -> Finish
.
2. プロジェクトに EJB を追加する
これで、EJB プロジェクトが作成されました。Projects
左側のタブでプロジェクト名を右クリックします。New
->を選択しSession Bean
ます。適切な名前を選択し、パッケージを定義して選択しますSingleton
(EJB 3.0 を使用している場合は、シングルトン EJB を作成できません。別のタイプを選択してください)。ローカル インターフェースとリモート インターフェースがオフになっていることを確認します。ヒットFinish
。
これで最初の EJB が作成されました ;-)
3.EJBビジネスメソッドの呼び出し
これで使用を試すことができます。EJB クラス メソッドを実行する必要があります。そのためには、誰かがメソッドを呼び出す必要があります。つまり、次のようになります。
- サーブレット、
- スタンドアロンのクライアント
@PostConstruct
メソッド。
シングルトン EJB を使用できる場合に最も簡単と思われる最後のオプションの使用方法を紹介します。アノテーション付きメソッドについて知っておく必要が@PostConstruct
あるのは、アプリケーション コンテナーが Bean を作成するときに呼び出されるということだけです。これは、コンストラクターの特殊なタイプのようなものです。
ポイントは、通常、EJB の初期化を制御できないことです。ただし、@Singleton
EJB を使用した場合は、サーバーの起動時にコンテナーに強制的に Bean を初期化させることができます。@PostConstruct
このようにして、サーバーの起動時にメソッドが呼び出されることがわかります。
この時点で、次のようなコードが作成されているはずです。
package your.package;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.LocalBean;
import javax.ejb.Startup;
@Singleton
@Startup
public class NewSessionBean {
// This method will be invoked upon server startup (@PostConstruct & @Startup)
@PostConstruct
private void init() {
int result = add(4, 5);
System.out.println(result);
}
// This is your business method.
public int add(int x, int y) {
return x + y;
}
}
このサンプル コード (ツールバーの大きな緑色の矢印) を実行すると、次のような GlassFish ログが表示されます。
情報: EJB NewSessionBean のポータブル JNDI 名: [java:global/EJBModule1/NewSessionBean!sss.NewSessionBean, java:global/EJBModule1/NewSessionBean]
情報: 9
情報: EJBModule1 は 78 ミリ秒で正常にデプロイされました。
この例は、EJB 3.1 の別の機能も示しています。現時点では、ホーム インターフェースを使用する必要がないだけでなく、インターフェースを使用する必要さえありません。クラスを直接使用できます。
この例にはいくつかの問題があることに注意してください。命令を使用するべきではありませんSystem.out.println
。私はビジネス インターフェイスを使用this
したことはありませんが、ビジネス メソッドを呼び出すために使用していました。サーブレットを使用して EJB のビジネス メソッドを呼び出したことはありません。
これは、EJB 開発を開始するための非常に単純な例です。
ご要望に応じて、EJB<->Servlet<->JSP ワークフローのミニチュートリアルを以下に示します。
1. Web プロジェクトの作成
(注: 上記の例は、Singleton EJB を使用して、Web プロジェクトでも実現できます。この場合、サーブレットと JSP を 1 つのパッケージで作成するため、Web プロジェクトが必要です。)
Ctrl + Shift + N
-> Java Web
-> Web Application
-> Next
. アプリケーションの名前を設定します -> Next
-> デフォルトのままでかまいません (コンテキスト パスを覚えておいてください - アプリケーションにアクセスするために必要になります) -> Finish
.
2. EJB を作成する
今回は、電卓 Bean がどうあるべきかをよりよく反映するため、ステートレス EJB になります。
上記とまったく同じように行います -適切なウィンドウではStateless
なく選択するだけです。Singleton
3.ビジネスロジックをEJBに入れる
以下の例を見つけてください。
package com.yourpckg;
import javax.ejb.Stateless;
// Stateless EJB with LocalBean view (default when no interface is implementated)
@Stateless
public class Calculator {
// Business method (public) that may be invoked by EJB clients
public int add(int x, int y) {
return x + y;
}
}
4. ビジネス ロジックを呼び出すサーブレットを作成する
プロジェクトの RMB またはCtrl + N
-> Web
-> Servlet
-> Next
-> サーブレット名とそのパッケージを定義します -> Next
-> その URL パターンを定義します (覚えておいてください - サーブレットにアクセスするために必要になります) -> Finish
.
5. サーブレットと EJB の間の依存関係を定義します。
コントローラー (サーブレット) は EJB を使用する必要があります。ルックアップや厄介なボイラープレート コードを実行する必要はありません。Calculator
注釈を使用して、サーブレットが EJB を使用することを定義するだけです。
@EJB
Calculator calculator;
これをサーブレット クラスのフィールドとして配置すると、次のようになります。
@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
public class MyServlet extends HttpServlet {
@EJB
Calculator calculator;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ...
}
6.コントローラーのロジックをサーブレットに入れる
デフォルトでは、NetBeans はすべての HTTP メソッド要求を 1 つのメソッド ( ) に委譲するprocessRequest(-)
ため、変更する必要がある唯一のメソッドです。
以下の例を見つけてください。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// Fetch the user-sent parameters (operands)
int operand1 = Integer.parseInt(request.getParameter("operand1"));
int operand2 = Integer.parseInt(request.getParameter("operand2"));
// Calculate the result of this operation
int result = calculator.add(operand1, operand2);
// Put the result as an attribute (JSP will use it)
request.setAttribute("result", result);
} catch (NumberFormatException ex) {
// We're translating Strings into Integers - we need to be careful...
request.setAttribute("result", "ERROR. Not a number.");
} finally {
// No matter what - dispatch the request back to the JSP to show the result.
request.getRequestDispatcher("calculator.jsp").forward(request, response);
}
}
7. JSP ファイルの作成
Ctrl + N
プロジェクトで-> Web
-> JSP
-> Next
->ファイル名を入力します(私の場合はcalculator
、サーブレットコードがこの名前を使用しているためです(getRequestDispatcher
一部を見てください)。フォルダーの入力値は空のままにしてください。-> Finish
.
8. JSP ファイルにユーザー インターフェイス コードを入力します。
これは、2 つのパラメーターを定義する単純な形式である必要があります: operand1
andoperand2
は、要求をサーブレット URL マッピングにプッシュします。私の場合、次のようなものです:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="MyServlet">
<input type="text" name="operand1" size="3" value="${param['operand1']}" /> +
<input type="text" name="operand2" size="3" value="${param['operand2']}" /> =
<input type="submit" value="Calculate" />
</form>
<div style="color: #00c; text-align: center; font-size: 20pt;">${result}</div>
</body>
</html>
formaction
属性の値を確認してください (サーブレット URL マッピングである必要があります)。
- アプリケーションを入力してください
GlassFish が使用するポートを知っておく必要があります。NetBeans では、デフォルトで37663
. 次は、Web アプリケーションの URL と JSP ファイル名です。すべてを組み合わせると、次のようになります。
http://localhost:37663/MyWebApp/calculator.jsp
2 つの入力テキストにオペランドを入力し、[計算] をクリックすると結果が表示されます。