在客户这边做实施,开发了一个cs的工具,由于我们需要查询远程的oracle数据库,但又不能直接访问服务器的1521端口,所以就想了个解决的办法:写算法到ejb中,用jboss发布,调用1099端口就可以了,以http的形式实现的远程数据传输。
- Java code
//连接远程jbosss的方法,以http的形式实现public static Object getEJB(String jndipath) { try { Properties p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.HttpNamingContextFactory"); p.put(Context.PROVIDER_URL,"http://YOUR_IP:YOUR_POST/unified-invoker/JNDIFactory/?return-exception=true"); p.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); InitialContext ctx = new InitialContext(p); Object oo = ctx.lookup(jndipath); return oo; } catch (Exception e) { e.printStackTrace(); return null; }}
这个本来是没有错的,在我本机上就完全没问题,我也在别人的电脑上试过了,大部分人都可以用,但就那么几个用不了,开始没注意,今天客户这边还真有人遇到了相同的问题:
就是不明白这个东西为什么跑到不同的计算机上,有的报错有的可以执行?和什么有关?我该怎么修改?都蒙了已经
说明:1:为了使这个cs的工具可以在不安装java虚拟机的计算机上运行,所以在工具中加入了jre1.6.0,
2:远程服务器上的jboss版本为jboss-4.2.2.GA,听说这个版本的jboss有很多bug,和这个有关?但就是不明白为什么有的电脑可以用,有的就不行!!!!
报错内容如下:
- Java code
org.jboss.remoting.CannotConnectException: Cannot connect http client invoker.at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:333)at org.jboss.remoting.transport.http.HTTPClientInvoker.transport(HTTPClientInvoker.java:135)......Caused by: java.io.InvalidClassException: com.sun.rowset.providers.RIOptimisticProvider; local classincompatible: stream classdesc serialVersionUID = -3143367176751761936, local class serialVersionUID = -8429279896237029122at java.io.ObjectStreamClass.initNonProxy(Unknown Source)at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)......org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239)at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133)at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120)at org.jboss.remoting.marshal.http.HTTPUnMarshaller.read(HTTPUnMarshaller.java:69)at org.jboss.remoting.transport.http.HTTPClientInvoker.readResponse(HTTPClientInvoker.java:471)at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:305)......at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)at $Proxy1.getCachedRowSet_Query(Unknown Source)at hdaty.ui.UserLanding$LoginUser.run(UserLanding.java:343)Caused by: java.io.InvalidClassException: com.sun.rowset.providers.RIOptimisticProvider; local class incompatible: stream classdesc serialVersionUID = -3143367176751761936, local class serialVersionUID = -8429279896237029122at java.io.ObjectStreamClass.initNonProxy(Unknown Source)at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)......
------解决方案--------------------------------------------------------
先把防火墙关了,试试吧,在不行就不清楚了