ejb的remote home是通过iiop协议访问的不能直接像 HelloHome  home  =  (HelloHome)ctx.lookup("HelloHome");访问,应该改为:
Object  homeObj  =  ctx.lookup("HelloHome");
HelloHome home=(HelloHome)javax.rmi.PortableRemoteObject.narrow(homeObj, HelloHome.class);

解决方案 »

  1.   

    你去 JMX 的控制页看一看,有没有 HelloHome 这个 JNDI 名呀。
      

  2.   

    JMX的控制页在哪啊?我找不到
      

  3.   

    在JBoss的web container属性里面添加EJB Ref选项啊
      

  4.   

    JBoss的web container是在哪啊?是从JBuild里设吗?
      

  5.   

    照下面代码试试:            public  void  service(HttpServletRequest  req,HttpServletResponse  res)throws  IOException{  
                   res.setContentType("text/html");  
                   PrintWriter  out=res.getWriter();  
                   out.println("<html><head><title>the  first  EJB</title></head>");  
                   try  {  Hashtable env=new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    env.put(Context.PROVIDER_URL, "192.168.0.234:1099");Context ctx = new InitialContext(env);HelloHome home=(HelloHome)PortableRemoteObject.narrow(ctx.lookup("Hello"),HelloHome.class);
    Hello yj = home.create(); 
                      
               out.println(  yj.getHello()  );  
      

  6.   

    还是出错啊,不过错误不一样了
    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception java.lang.ClassCastException
    at $Proxy70.create(Unknown Source)
    at yj.HelloServlet.service(HelloServlet.java:25)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:509)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
    at java.lang.Thread.run(Thread.java:536)
      

  7.   

    HelloHome home=(HelloHome)PortableRemoteObject.narrow(ctx.lookup("HelloHome"),HelloHome.class);
    改成这样试试
      

  8.   

    还是出错啊,我要晕了Naming Exception caught:javax.naming.NameNotFoundException: HelloHome not bound
      

  9.   

    package 你的包;import javax.ejb.*;
    import javax.naming.*;
    import java.rmi.*;
    import java.util.*;public class HelloClient {  public static void main(String[] args) throws Exception {
        Hello hello = null;
        //Hello 为你的远程接口
        try {
          Context ctx = new InitialContext(System.getProperties());
          HelloHome home = (HelloHome)javax.rmi.PortableRemoteObject.narrow(ctx.lookup("HelloHome"),HelloHomeHome.class);
        //HelloHome为你的远程home接口   “HelloHome”为你的远程Home jndi name
          hello = home.create();
          System.out.println(hello.getHello());     
        
        }catch (Exception e) {
          System.out.println(e.toString());
        }  }}