客户端测试jndi远程连接出现的异常:Root exception is java.rmi.ConnectIOException解决!

Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.io.EOFException]
at weblogic.jrmp.Context.lookup(Context.java:189)
at weblogic.jrmp.Context.lookup(Context.java:195)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at secondEjb3Client.main(secondEjb3Client.java:21)
Caused by: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.io.EOFException
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:274)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:306)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at weblogic.jrmp.Context.lookup(Context.java:185)
... 3 more
Caused by: java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:243)

 

看到网上很多人提出这个问题,就说是把weblogic.jar放在最前面可以解决,我是在eclipse里面配置的!也不太了解他们说的这个最前面是什么意思,自己稍微详细一点记录:

最前面就是指放在classpath的最前面,其实只要保证在所有关联的WebLogic提供的jar包的最前面就可以了!而我是在eclipse里面自己创建了一个User library(这里面包含了WebLogic中所有的jar包,modules里面的和server/lib里面的),我就把weblogic.jar调整到
User library的最开始的位置(就是最上面),再来测试,bingo!

测试代码如下:(我是用WebLogic建立的远端jndi,所以要使用WebLogic的jars)

package common;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class MyJNDITest {
 /***   J N D I   ***/

//这里的链接必须是"t3://ip:port"格式,针对WebLogic使用
 private static final String DEFAULT_WLS_URL = "t3://10.193.10.136:7001";
 private static final String DEFAULT_JNDI_FACTORY =
  "weblogic.jndi.WLInitialContextFactory";
 private static final String DEFAULT_USERNAME = "admin";//远端jndi服务器的用户名(不是电脑的,是WebLogic的)
 private static final String DEFAULT_PASSWORD = "12345678";//这是对应的密码

//下面这个东西在tomcat里面用的好好的,但是在WebLogic里面不能用,看看WebLogic的jndi树就明白了
 private static final String CATALOG_HOME = "java:comp/env";
 private static final String DATASOURCE   = "jdbc/myjndi";
 private static DataSource pool;
 public static void main(String...s){
  Context ctx = null;
  try {
//   env = (Context) new InitialContext().lookup("java:comp/env");
   ctx = (Context)(getWebLogicJNDIContext());
   pool = (DataSource)ctx.lookup(DATASOURCE);
   System.out.println(pool);//打印出来看看是不是这个对象
   if(pool==null)
    System.err.println("'DBPool' is an unknown DataSource");
  } catch(NamingException ne) {
   ne.printStackTrace();
  }
 }
 public static Context getWebLogicJNDIContext(){
  Context ctx = null;
  Hashtable ht = new Hashtable();
  ht.put(Context.INITIAL_CONTEXT_FACTORY, DEFAULT_JNDI_FACTORY);
  ht.put(Context.PROVIDER_URL, DEFAULT_WLS_URL);
  ht.put(Context.SECURITY_PRINCIPAL, DEFAULT_USERNAME);
  ht.put(Context.SECURITY_CREDENTIALS, DEFAULT_PASSWORD);
  try {
   ctx = new InitialContext(ht);
  }catch (NamingException e) {
   System.out.println(e);
  }
  return ctx;
 }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值