1

Eclipse用のGlassFishToolsBundleを使用しています。

Beanとそれをテストするクライアントを作成する必要があります。Bean(およびそのインターフェイス)は次のとおりです。

package mykPK;

import java.math.BigDecimal;
import javax.ejb.*;

@Stateless
public class ConverterBean implements Converter {
    private BigDecimal yenRate = new BigDecimal("115.3100");

    private BigDecimal euroRate = new BigDecimal("0.0071");

    public BigDecimal dollarToYen(BigDecimal dollars) {
        BigDecimal result = dollars.multiply(yenRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }
    public BigDecimal yenToEuro(BigDecimal yen) {
        BigDecimal result = yen.multiply(euroRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }
}

インターフェース:

package mykPK;

import java.math.BigDecimal;
import javax.ejb.Remote;

@Remote
public interface Converter {
    public BigDecimal dollarToYen(BigDecimal dollars);
    public BigDecimal yenToEuro(BigDecimal yen);
}

私はそれらをEJBプロジェクトで正しく作成し、「サーバーとして」実行します。すべてが正しく開始されているようです。

次に、クライアントを作成します。クライアントを同じプロジェクト内に配置して、別のプロジェクト(「アプリケーションクライアントプロジェクト」)を作成したり、2つのサブプロジェクトを使用してより一般的な「Eアプリケーションプロジェクト」を作成したりしました。結果は同じです。

さて、クライアントコードは次のとおりです

import java.math.BigDecimal;
import javax.ejb.EJB;
import mykPK.Converter; /*of course to to that, i reference in the client project the 
EJB project*/

public class ConverterClient {
    @EJB private static Converter converter;

    public ConverterClient(String[] args) {
    }
    public static void main(String[] args) {
        ConverterClient client = new ConverterClient(args);
        client.doConversion();
    }
    public void doConversion() {
        try {
            BigDecimal param = new BigDecimal("100.00");
            BigDecimal yenAmount = converter.dollarToYen(param);
            System.out.println("$" + param + " is " + yenAmount
                    + " Yen.");
            BigDecimal euroAmount = converter.yenToEuro(yenAmount);
            System.out.println(yenAmount + " Yen is " + euroAmount
                    + " Euro.");
            System.exit(0);
        } catch (Exception ex) {
            System.err.println("Caught an unexpected exception!");
            ex.printStackTrace();
        }
    }
}

このファイルを実行すると、常に同じようになります。

Caught an unexpected exception!
java.lang.NullPointerException
    at ConverterClient.doConversion(ConverterClient.java:17)
    at ConverterClient.main(ConverterClient.java:12)

これは、クライアントがBeanの同じコンテナーになく、「デプロイ」されていないためだと思います(ファイルを実行するだけです)。しかし、より一般的な「エンタープライズアプリケーションプロジェクト」を試したところ、結果は同じでした)

@EJBでは、クライアントをどこに配置し、Beanへのアクセスを(で)与えるのですか?

4

3 に答える 3

0

管理されていないオブジェクトに注入しようとしています。初期コンテキストを取得して調べる必要があります。

こことほとんど同じです: InitialContext.lookup() メソッドを使用して自分の Bean を見つけることができません

于 2010-12-06T21:58:14.647 に答える
0

スタック トレースは、メイン メソッドを直接起動したことを示しています。メイン クラスでインジェクションを使用するには、アプリケーション クライアント コンテナーを使用する必要があります。

于 2010-12-11T17:34:54.820 に答える