如何运行简单的EJB?我有一个简单的客户端,以及一个通过Eclipse创建的简单会话Bean

时间:2012-10-07 10:47:52

标签: java eclipse glassfish ejb

我是Java和EJB的新手。想要创建一个简单的EJB。

所以我通过Eclipse创建了一个EJB项目(Eclipse Java EE IDE Juno Service Release 1 Build ID:20120920-0800)。然后我在那里添加了一个无状态会话Bean,其中包含远程和本地接口。然后我添加了一个简单的方法,只返回2个数字的总和。这是代码:

Test.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 - 自定义资源。我已将资源类型设置为ejb.TestRemote,将工厂类设置为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();
        }
    }   
}

我已将gf-client-module.jar中的C:\glassfish3\glassfish\modules和我的EJB项目的JAR文件添加到Java构建路径(项目属性)。

然后我尝试在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的希望。所以,我已经向Eclipse安装了一个GlassFish服务器,并在那里部署了我的EJB项目。它工作:现在我的客户工作正常。唯一的变化是 - 我应该为.lookup提供一个完整的包名:像.lookup("ejb.TestRemote")

感谢所有尝试/希望/希望提供帮助的人!

0 个答案:

没有答案