1

私は Java と EJB の初心者です。単純な EJB を作成したい。

そこで、Eclipse 経由で EJB プロジェクトを作成しました (Eclipse Java EE IDE Juno Service Release 1 Build ID: 20120920-0800)。次に、リモート インターフェースとローカル インターフェースを備えたステートレス セッション Bean をそこに追加しました。次に、2 つの数値の合計を返す単純なメソッドを追加しました。コードは次のとおりです。

テスト.java:

package ejb;

import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;

/**
 * Session Bean implementation class Test
 */
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class Test implements TestRemote, TestLocal {

/**
 * Default constructor. 
 */
public Test() {
    // TODO Auto-generated constructor stub
}

public int getSum(int a , int b) {
    return (a + b);
}

}

TestLocal.java:

package ejb;

import javax.ejb.Local;

@Local
public interface TestLocal {
    public int getSum(int a , int b);
}

TestRemote.java :

package ejb;

import javax.ejb.Remote;

@Remote
public interface TestRemote {
    public int getSum(int a , int b);
}

EJB プロジェクトを右クリックして、JAR ファイルとしてエクスポートしました。次に、それを GlassFish3 サーバーにデプロイしました。1) アプリケーション - デプロイなど。2) JNDI - カスタム リソース。Resource Type を にejb.TestRemote、Factory Class を に設定しましたorg.glassfish.resources.custom.factory.EjbFactory。JNDI 名はTest. 次に、単純なクライアントをコーディングしました。

Main.java:

import javax.naming.InitialContext;
import ejb.TestRemote;

public class Main {
    public static void main(String arg[]) {
        try {           
            TestRemote testR = (TestRemote) new InitialContext().lookup("Test");
            //System.out.println(new InitialContext().lookup("Test").toString());
            //.toString displays: Reference Class Name: ejb.TestRemote
            System.out.println(testR.getSum(50, 500));
        } catch(Exception e) {
            e.printStackTrace();
        }
    }   
}

EJB プロジェクトの JAR ファイルを Java Build Path (Project-Properties) に追加gf-client-module.jarしました。C:\glassfish3\glassfish\modules

次に、Eclipse でクライアントを起動しようとすると、すぐに次のメッセージが表示されました。

com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.

その後、次のメッセージを受け取りました。

java.lang.ClassCastException: javax.naming.Reference cannot be cast to ejb.TestRemote
at Main.main(Main.java:16)

それで、誰か私を助けてくれませんか?.. 私は本当に混乱しています: .toString メソッドを参照で呼び出すと、前に述べたように、それが適切な ejb.TestRemote クラス参照であることが表示されます。しかし...うまくいきません((

何か案は?前もって感謝します。

私にとっては解決しましたが、別の方法があります

Eclipse と個別にインストールされた GlassFish で作成するという希望を失いました。そこで、GlassFish サーバーを Eclipse にインストールし、EJB プロジェクトをそこにデプロイしました。それはうまくいきました:今、私のクライアントはうまくいきます。唯一の変更点は、完全なパッケージ名を .lookup: like に指定する必要があること.lookup("ejb.TestRemote")です。

助けようとした/望んでいた/助けたいと思ったすべての人に感謝します!

4

0 に答える 0