错误执行Head First EJB第一个示例
问题描述:
我正在执行Head First EJB。我知道它具有与EJB 3.1相同的旧版本的EJB 2.0,但我认为Head是第一本为学习像我们这样的业余爱好者准备的好书。错误执行Head First EJB第一个示例
我使用J2ee 1.3.1 RI和jdk 1.4。我运行了“部署”工具来部署EJB,现在我有一个ejb客户端JAVA程序给出如下:
import javax.naming.*;
import java.rmi.*;
import javax.rmi.*;
import headfirst.*;
import javax.ejb.*;
import java.util.*;
public class AdviceClient {
public static void main(String[] args){
new AdviceClient().go();
}
public void go(){
try{
Properties props=new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
//props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
//env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
//props.setProperty(Context.INITIAL_CONTEXT_FACTORY,"com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty(Context.PROVIDER_URL,"rmi://localhost:1050");
//props.setProperty("java.naming.provider.url","rmi://localhost:1099");
Context ic = new InitialContext(props);
Object o = ic.lookup("Advisor");
AdviceHome home = (AdviceHome)PortableRemoteObject.narrow(o,AdviceHome.class);
Advice advisor = home.create();
System.out.println(advisor.getAdvice());
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
Following the book, I compiled the program. The "Properties" part is something not mentioned in the example. I got it from some other examples on the web. Now, that when I am executing the client, am getting the following error:
F:\EJBProject\advice>java -classpath AdviceAppClient.jar;. AdviceClient
javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.net.SocketTimeoutException: Read timed out]
at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source)
at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at AdviceClient.go(AdviceClient.java:26)
at AdviceClient.main(AdviceClient.java:11)
Caused by: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.net.SocketTimeoutException: Read timed out
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
... 5 more
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at java.io.DataInputStream.readByte(Unknown Source)
请帮忙。我在这里困住了。我想参加OCBCD考试!
问候, Shouvanik
答
终于解决了。
如果您在运行第一个EJB示例时遇到了障碍,只需按照以下步骤 运行HeadFirst EJB的第一个示例。
软件 1. J2SDK1.4.1 - JDK 2. J2SDKEE1.3.1 - J2EE RI 3. CMD(命令提示)
编译所有用c类:\ J2SDKEE1.3.1 \ lib中\ J2EE。 jar库。 现在,创建一个应用程序并在RI内部署EJB。按照本书所示下载应用程序客户端。
现在,来了棘手的部分。
使用以下罐子
javac的编译客户端类-classpath AdviceAppClient.jar; C:\ J2SDKEE1.3.1 \ lib中\的j2ee.jar AdviceClient.java
接下来,运行在客户端如下
java -cp AdviceAppClient.jar; c:\ j2sdkee1.3.1 \ lib \ j2ee.jar; c:\ j2sdk1.4.1 \ jre \ lib \ rt.jar ;. AdviceClient
您的错误表明您尝试连接的RMI服务器不存在。 RMI服务器在哪个端口监听?你使用的是什么j2ee服务器?那是太阳j2ee服务器吗? – 2013-05-02 03:45:11
RMI端口是1050,它正在运行。我使用j2ee 1.3 RI和jdk1.4。 – 2013-05-02 04:42:59
从独立的Java程序连接到rmi服务器时,请检查所有这些必需的库和说明。它也有样本程序。 >> http://docs.oracle.com/cd/E19644-01/817-5050/dcacc.html#wp1016235 – 2013-05-02 10:40:46