weblogic10.3部署ejb并使用独立客户端调用时出现如下错误,
java.lang.NoClassDefFoundError: weblogic/security/subject/AbstractSubject
客户端调用ejb代码如下:
----------------------------------------
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* EJB客户端调用演示例子
*
* @author mywo
*
*/
public class EjbClientDemo {
/**
* @param args
* @throws NamingException
*/
public static void main(String[] args) throws NamingException {
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
env.put(Context.URL_PKG_PREFIXES, "weblogic.jndi");
Context ctx = new InitialContext(env);
Object obj = ctx.lookup("ejb.bm.bmCardPaymentService");
System.out.println(obj);
}
}
----------------------------------------
究其原因是因为我按照老办法,在客户端代码里使用weblogic.jar,而10.3版本已经
不建议使用weblogic.jar了,新的客户端库支持为wlfullclient.jar,这个包需要自行生成,
如下:
----------------------------------------
1. cd $WL_HOME/server/lib
2. java -jar ./../../../modules/com.bea.core.jarbuilder_1.2.0.0.jar
如果不出意外,则上面的操作会在lib目录下生成wlfullclient.jar,将此包加入客户端程序
的classpath中就可。
----------------------------------------
详见 http://forums.oracle.com/forums/thread.jspa?threadID=705919
另:
weblogic jndi貌似不支持类似xx://xxx/aaa的命名方式,
支持xx:/abc/efg及abc.efg.nnn及abc/cde/adf等方式。