2010-12-06 15 views
1

私はGlassFishツールバンドルfor Eclipseを使用しています。アプリケーションクライアントEJB Eclipse Glassfish

私はそれをテストする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) 

を、私は私のクライアントが同じではありませんbeacauseこれがあるとしコンテナ、そしてそれは "デプロイされていません"(私は単にファイルを実行します)。しかし、私がより一般的な "エンタープライズアプリケーションプロジェクト"を試したところ、結果は同じでした)

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

答えて

0

スタックトレースを使用すると、直接mainメソッドを立ち上げてきたことを示唆しています。メインクラスで注入を使用するには、application client containerを使用する必要があります。

0

この作業の良い例はfound hereです。glassfishのアプリケーションクライアントコンテナ( "appclient"コマンドを使用)で使用するためにクライアントをパッケージ化すると、スタンドアロンJavaアプリケーションとしてパッケージ化されます。

+0

私は実際にappclientを実行する方法を説明していないと思います... – Thufir

関連する問題