Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何运行简单的EJB?我有一个简单的客户端和一个通过Eclipse创建的简单会话Bean_Java_Eclipse_Glassfish_Ejb - Fatal编程技术网

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

Java 如何运行简单的EJB?我有一个简单的客户端和一个通过Eclipse创建的简单会话Bean,java,eclipse,glassfish,ejb,Java,Eclipse,Glassfish,Ejb,我是Java和EJB的新手。想要创建一个简单的EJB 因此,我通过Eclipse创建了一个EJB项目(EclipseJavaEEIDEJuno服务发行版1构建ID:20120920-0800)。然后我在那里添加了一个无状态会话Bean,带有远程和本地接口。然后我添加了一个简单的方法,只返回2个数字的和。代码如下: Test.java: package ejb; import javax.ejb.Stateless; import javax.ejb.TransactionManagement;

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

因此,我通过Eclipse创建了一个EJB项目(EclipseJavaEEIDEJuno服务发行版1构建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();
        }
    }   
}
我从
C:\glassfish3\glassfish\modules
中添加了
gf client module.jar
,并将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:like
.lookup(“EJB.TestRemote”)


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

您需要部署EAR,而不是JarThank,但是我从哪里获得它呢?