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;
}
}