EJB入門--First EJB

8326 ワード

この記事は、<EJBプログラミングガイド>の実例をもとに作成されたもので、主に初心者に直感的な例と自分のログとして、EJBの原理的なものを紹介するつもりはありません.また、本人のレベルが限られていますので、お教えください.
筆者が使用するIDEは、Eclipse 3.0+MyEclipse4.01GA
J 2 EE容器:JBoss 4.0
   
この文書では、預金と引き出しを支援するステータスレスセッションBeanの完全な開発と導入のプロセスについて説明します.手順は次のとおりです.
1.ステータスレスセッションBeanの実装クラスを作成する.
2、ステータスレスセッションBeanのメインインタフェースとコンポーネントインタフェースを作成する.
3.Beanをアプリケーションにまとめ、配置記述を作成する.
4、EJBサーバーにアプリケーションを配備する.
5、Javaアプリケーションでテストする.
上記は主なプロセスです.手動で完了する必要がなく、IDEによって開発プロセスを簡略化することができます.IDEのこの機能がよく分からない場合は、製品ドキュメント(http://m/myeclipseide.com/enterpriseworkbench/help/index.jsp?topic=/com.genuitec.myeclipseide.com/quickstarts/firstejb/index.html)を参照してください.
一、新しいEJBプロジェクト、プロジェクト名はFundEJBで、その他のデフォルトは良いです.
二、Session Beanを作成する:
1、srcディレクトリの下で新しいパッケージを作成する:qiya.deng.fund.ejb、パッケージ名は最後に必ずejbを接尾辞にしてください.後で使用するXDocletツールが必要ですから.
2、新しいSessionBean classを作成し、StatelessFundManagerEJBと命名する.EJBを接尾辞とする必要がある.理由は同じで、規範によってEJBまたはBeanを接尾辞とするのが望ましい.
   
3、XDocletの構成:
プロジェクトを右クリックしてPropertiesを選択し、MyEclipse-XDocletを選択し、Add Stander...、Standard EJBを選択します.
   
Standard EJBを選択し、ejbxdocletで右クリックしてAddを追加し、この例ではjbossをアプリケーションサーバとして使用するため、jbossを選択します.jbossを選択して、次のプロパティを変更します.
    Version = 4.0
    destDir = src/META-INF
修正が完了したら、OKボタンをクリックしてメインウィンドウに戻ります.
4、Xdocletを実行する:
アイテムを右クリックしてMyEclipse->run Xdocletを選択します.実行はconsoleウィンドウでプロンプトが表示され、実行が完了するとディレクトリ構造が変化します.
   
5、実装クラスStatelessFundManagerEJBを編集する:
StatelessFundManagerEJBクラスを編集する前にStatelessFundManagerインタフェースを選択して観察すると、このリモートコンポーネントインタフェースのインタフェースメソッドとStatelessFundManagerのメソッドが対応していることがわかります.
StatelessFundManagerでJAvaファイルが最後に追加されました:

        /**
     *
     * @param balance
     * @param amount
     * @return
     *
     * @ejb.interface-method
     */
    public double addFunds(double balance,double amount){
        balance += amount;
        return balance;
    }
   
    /**
     *
     * @param balance
     * @param amount
     * @return
     * @throws InsufficientBalanceException
     *
     * @ejb.interface-method
     */
    public double withdrawFunds(double balance,double amount)throws InsufficientBalanceException {
        if (balance < amount) {
            throw (new InsufficientBalanceException());
        }
        balance -= amount;
        return balance;
    }
手順4を繰り返してXdocletを実行し、StatelessFundManagerインタフェースを確認します.
6、このアプリケーションをEJBサーバーに配備する:
配置記述項目はIDEで自動的に生成され、このファイルの位置は/META-INF/ejb-jarである.xml.ejb-jarを開くxml,jboss.xmlファイルの説明を表示します.
MyEclipseが提供する導入ツールによる導入:
   
JBossコンテナを実行すると、次のメッセージが表示されます.
   
MyEclipseでのアプリケーションサーバの使用については、ドキュメント(http://www.myeclipseide.com/images/tutorials/quickstarts/appservers/).
今まで、あなたは簡単な無状態のセッションBeanを発表しました.簡単なアプリケーションを書いてテストします.
   
三、テストを行うJavaクライアントプログラムを作成する.
クライアントプログラムは、Webプログラムであってもよいし、Applicationアプリケーションであってもよい.ここではアプリケーションを例に挙げます.
同様にEclipseを使用してJava Projectを新規作成し、ここではFundClientと命名します.プロジェクトを右クリックしてproperties->Java Build pathを選択し、Projectsに上のProject:FundEJBを追加します.LibrariesでAdd External JARs...、$JBoss_をHome/clientのディレクトリの下にあるjarファイルはすべてLibrariesに追加されます.
最後に、クライアントコードを記述します.

package qiya.deng.client;
    //import
public class StatelessFundManagerTestClient extends JFrame implements
        ActionListener {

    double balance = 0;
    JTextField amount = new JTextField(10);
    JButton addFunds = new JButton("Add Funds");
    JButton withdrawFunds = new JButton("Withdraw Funds");
    String msg = "Current account balance";
    String strBal = "0";
    JLabel status;
    StatelessFundManager manager;
    NumberFormat currencyFormatter;
   
    public StatelessFundManagerTestClient(){
        super("Fund Manager");
    }
   
    public static void main(String[] args){
        new StatelessFundManagerTestClient().init();
    }
   
    private void init() {
       
        buildGUI();
       
        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent event){
                System.exit(0);
            }
        });
       
        addFunds.addActionListener(this);
        withdrawFunds.addActionListener(this);
       
        createFundManager();
       
        currencyFormatter = NumberFormat.getCurrencyInstance();
        String currencyOut = currencyFormatter.format(0);
        status.setText(msg + currencyOut);
       
        pack();
        show();
    }

    private void buildGUI() {
        GridBagLayout gl = new GridBagLayout();
        GridBagConstraints gc = new GridBagConstraints();
        Container container = getContentPane();
        container.setLayout(gl);
       
        gc.fill = GridBagConstraints.BOTH;
        JLabel label = new JLabel("Enter Amount");
        gl.setConstraints(label,gc);
        container.add(label);
       
        gc.gridwidth = GridBagConstraints.REMAINDER;
        gl.setConstraints(amount,gc);
        container.add(amount);
       
        gl.setConstraints(addFunds,gc);
        container.add(addFunds);
        gl.setConstraints(withdrawFunds,gc);
        container.add(withdrawFunds);
       
        status = new JLabel(msg);
        gl.setConstraints(status,gc);
        container.add(status);
    }

    public void createFundManager(){
        try {
            Properties prop = new Properties();
            prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
            prop.put(Context.PROVIDER_URL,"localhost:1099");
            Context initial = new InitialContext(prop);
            Object objref = initial.lookup("ejb/StatelessFundManager");//JINI-Name
            StatelessFundManagerHome home =
                (StatelessFundManagerHome) PortableRemoteObject.narrow(objref,StatelessFundManagerHome.class);
            manager = home.create();
        } catch (ClassCastException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (CreateException e) {
            e.printStackTrace();
        }
    }

    public void actionPerformed(ActionEvent e) {
       
       
       
        if (e.getActionCommand().equalsIgnoreCase("Withdraw Funds")) {
            System.out.println("Withdraw Funds");
        }
        if (e.getActionCommand().equalsIgnoreCase("Add Funds")) {
            System.out.println("Add Funds");
        }
       
        if (e.getSource().equals(addFunds)){
            System.out.println("addFunds");
            try {
                status.setText(msg + currencyFormatter.format(manager.addFunds(0,Double.parseDouble(amount.getText()))));
            } catch (NumberFormatException e1) {
                e1.printStackTrace();
            } catch (RemoteException e1) {
                e1.printStackTrace();
            }
        }
        if (e.getSource().equals(withdrawFunds)){
            System.out.println("withdrawFund");
            try {
                status.setText(msg + currencyFormatter.format(manager.withdrawFunds(100,Double.parseDouble(amount.getText()))));
            } catch (NumberFormatException e1) {
                e1.printStackTrace();
            } catch (RemoteException e1) {
                e1.printStackTrace();
            } catch (InsufficientBalanceException e1) {
                e1.printStackTrace();
            }
        }
    }

}
その後、プログラムを実行してテストできます.
     
これで、おめでとうございます.あなたはすでに大功を成し遂げて、基本的にEJBに対して感性の認識を創立して、資料を参考にして深い学習を行うことができます.