我是 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);
}
}
测试本地.java:
package ejb;
import javax.ejb.Local;
@Local
public interface TestLocal {
public int getSum(int a , int b);
}
测试远程.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
. 然后我编写了一个简单的客户端:
主.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: like 提供一个完整的包名.lookup("ejb.TestRemote")
。
感谢所有尝试/想要/希望提供帮助的人!