刚学Ejb 从Tomcat 的index.jsp 中调用本机 jboss 服务器上的Ejb 时报异常 。奇怪的是,在同一工程下我写了一个用来测试的main方法,代码与index.jsp中的脚本代码一模一样,但在main里面运行时可以正常得到结果。我实在不解,请前辈帮我看看是什么原因。代码和异常信息如下。
~~~ <%
    Properties pop  = new Properties();
    pop.setProperty(InitialContext.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
    pop.setProperty(InitialContext.PROVIDER_URL,"localhost:1099");
    InitialContext ctx = new InitialContext(pop);
   
    Hello h = (Hello)ctx.lookup("HelloBean/remote");
    out.print(h.sayHello("中国人"));
   
   %>
~~~异常信息
~~~javax.servlet.ServletException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.index_jsp._jspService(index_jsp.java:75)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)root causejavax.naming.CommunicationException [Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.net.MalformedURLException: no protocol: Files/Apache]
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:780)
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
javax.naming.InitialContext.lookup(InitialContext.java:409)
org.apache.jsp.index_jsp._jspService(index_jsp.java:63)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)root causejava.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.net.MalformedURLException: no protocol: Files/Apache
sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
sun.rmi.transport.Transport$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
sun.rmi.transport.Transport.serviceCall(Unknown Source)
sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
sun.rmi.server.UnicastRef.invoke(UnicastRef.java:160)
org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:667)
org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
javax.naming.InitialContext.lookup(InitialContext.java:409)
org.apache.jsp.index_jsp._jspService(index_jsp.java:63)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)~~~~

解决方案 »

  1.   

    没有人关注啊?这个问题我己经解决了,是tomcat服务器版本过低的原因,起码需要 5.0.28以上的版本。除此
    之外,还需要三个jar包, javaee.jar jbossall-client.jar jnp-client.jar。
    总结一下 tomcat 调用 ejb 的环境需求:
    1 tomcat 版本,5.0.28 以上。
    2 三个支持 jar 包 javaee.jar jbossall-client.jar jnp-client.jar
    3 正确放置三个 jar 包: /WEB-INF/lib/
    4 如果要解决通过IP地址访问,那么在jboss 启动项配置里面加上一个 -b 的参数 [ -b xxx.xxx.xxx.xxx ]
       
      

  2.   

    你好,我现在刚刚开始接触这个,请问能给个例子吗?
    在网上找了好多都没成功![email protected]