还有 你的url 中 t3 是weblogic 的内部协议在客户端 是不是应该指定 url 的具体地址啊用 http:// server ip:7001 试试呢??
感觉你的这种 web 方式本身就不太合理为什么要把 servlet 放在 client 端呢??
client 和 server 的两台机器 都有防火墙么??没有 --------------------------------还有 你的url 中 t3 是weblogic 的内部协议在客户端 是不是应该指定 url 的具体地址啊用 http:// server ip:7001 试试呢??这个url是用于访问JNDI的,当JDNI和Servlet不在同一台机子上的时候,创建Context需要指定这些连接属性。所以是不能用HTTP协议访问的。 ------------------------------------------ 感觉你的这种 web 方式本身就不太合理为什么要把 servlet 放在 client 端呢??servlet对于EJB服务器来说,是它的客户端。但从整个WEB应用上看,Servlet仍然是Server端,它是在Web服务器中的。这种结构只是实现了J2EE的分布式应用。
检查你的HomeClass有没有在WEB-INF/classes下,注意package路径.
呵呵,终于有人也碰到这个问题了呀。 你的servlet和ejb是分开运行的,并且servlet并不是运行在weblogic上,对不对?这个weblogic的一个bug,我们公司在开发上也遇到这个问题。因为我们是买了bea的产品,所以就这个问题,我们跟bea的技术支持交涉了多次,起初他们还不承认这是他们的bug,到后来在我们出示的有力证据面前终于承认了,并且单独给我们一个patch,解决了这个问题。 我们用的是weblogic server 7.0 sp2。其实只要servlet运行在weblogic server里面,不管是不是跟ejb在一起,都是可以的。但是我们公司的servlet,由于种种原因,不能运行在weblogic上,所以就出现了这个问题。我们试了最新的weblogic server 8.0,好像仍然有这个问题,看来BEA是死不悔改了
<%!
ActivityHome aHome = null;
ActivityRemote aRemote = null;
%>
<%
try
{
ctx = new InitialContext();
ref = ctx.lookup("Activity");
aHome=(ActivityHome)PortableRemoteObject.narrow(ref,ActivityHome.class);
aRemote = aHome.create();
}
catch(Exception e)
{
System.out.println("error")
return ;
}
%>你看看我这个 声明的例子!!!
String url="t3://服务器名:7001";
String user="用户名";
String pwd="密码";
java.util.Properties prop=new java.util.Properties();
prop.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
prop.put(javax.naming.Context.PROVIDER_URL,url);
prop.put(javax.naming.Context.SECURITY_PRINCIPAL,user);
prop.put(javax.naming.Context.SECURITY_CREDENTIALS,pwd);
try{
javax.naming.Context ct=new javax.naming.InitialContext(prop);
Object obj=ct.lookup("EJB");
EJBHome = (EJBHome) PortableRemoteObject.narrow(obj, EJBHome.class);
EJB=EJBHome.create();
EJB.method();当Client和Server在同一台机子上时,正常。当Client远程访问Server时,PortableRemoteObject.narrow就抛出异常了。
flyshp(天堂雨) ,你的那个JSP页和EJB是放在同一台机器上吧。
java.lang.ClassCastException: Cannot narrow remote object to EJB
异常就指向
EJBHome = (EJBHome) PortableRemoteObject.narrow(obj, EJBHome.class)
这一行
java.lang.ClassCastException: Cannot narrow remote object to EJBHome
是这个。
我所说的client和server是指 EJB的client和Server
在我这里,Servlet是Client,而Server是部署了EJB的服务器。
EJB中的类已经解压缩,并放到Servlet的WEB-INF/Classes/ 下了。
如果是接口找不到,那抛出的就是java.lang.NoClassDefFoundError了
--------------------------------还有 你的url 中 t3 是weblogic 的内部协议在客户端 是不是应该指定 url 的具体地址啊用 http:// server ip:7001 试试呢??这个url是用于访问JNDI的,当JDNI和Servlet不在同一台机子上的时候,创建Context需要指定这些连接属性。所以是不能用HTTP协议访问的。
------------------------------------------
感觉你的这种 web 方式本身就不太合理为什么要把 servlet 放在 client 端呢??servlet对于EJB服务器来说,是它的客户端。但从整个WEB应用上看,Servlet仍然是Server端,它是在Web服务器中的。这种结构只是实现了J2EE的分布式应用。
你的servlet和ejb是分开运行的,并且servlet并不是运行在weblogic上,对不对?这个weblogic的一个bug,我们公司在开发上也遇到这个问题。因为我们是买了bea的产品,所以就这个问题,我们跟bea的技术支持交涉了多次,起初他们还不承认这是他们的bug,到后来在我们出示的有力证据面前终于承认了,并且单独给我们一个patch,解决了这个问题。
我们用的是weblogic server 7.0 sp2。其实只要servlet运行在weblogic server里面,不管是不是跟ejb在一起,都是可以的。但是我们公司的servlet,由于种种原因,不能运行在weblogic上,所以就出现了这个问题。我们试了最新的weblogic server 8.0,好像仍然有这个问题,看来BEA是死不悔改了
如果客户端并非JSP,而是普通的应用程序,并且客户端和服务端(假设服务端EJB部署在WebLogic中)不在一台机器上,请问,这个时候客户端如何加载楼主代码内的"weblogic.jndi.WLInitialContextFactory"(此文件在WebLogic.jar中)?是不是应该把WebLogic.jar拷贝至客户端?