执行Head First EJB第一个例子时出错

时间:2013-05-02 02:54:44

标签: java ejb

我正在关注Head First EJB。我知道它有EJB 2.0,现在已经是EJB 3.1了。但我认为Head第一本书对于像我们这样的业余爱好者来说是一本好书。

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

1 个答案:

答案 0 :(得分:0)

终于解决了。

如果在运行第一个EJB示例时遇到障碍,只需按照以下步骤操作即可 运行HeadFirst EJB的第一个例子。

软件 1. j2sdk1.4.1 - jdk 2. j2sdkee1.3.1 - j2ee RI 3. CMD(命令提示符)

使用c:\​​ j2sdkee1.3.1 \ lib \ j2ee.jar库编译所有类。 现在,创建一个App并在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;。 AdviceClient