0

我正在关注 Head First EJB。我知道它有 EJB 2.0,它与现在的 EJB 3.1 一样旧。但我认为 Head first book 是一本适合像我们这样的业余爱好者学习的好书。

我正在使用 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考试!

问候, 舒瓦尼克

4

1 回答 1

0

终于解决了。

如果您在运行第一个 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。下载书中所示的应用程序客户端。

现在,棘手的部分来了。

使用以下 jar 编译客户端类

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;. 咨询客户

于 2013-05-06T09:09:30.180 回答