J2EE客户端不知道为什么查找不到EJB?
JNDI已经配置好,WEB组件可以访问EJB,
但每运行客户端就抛出异常,客户端代码如下:
import converter.Converter;
import converter.ConverterHome;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import java.math.BigDecimal;
public class ConverterClient {
public static void main(String[] args) {
try {
Context initial = new InitialContext();
Context myEnv = (Context) initial.lookup("java:comp/env");
Object objref = myEnv.lookup("ejb/SimpleConverter");
ConverterHome home =
(ConverterHome) PortableRemoteObject.narrow(objref,
ConverterHome.class);
Converter currencyConverter = home.create();
BigDecimal param = new BigDecimal("100.00");
BigDecimal amount = currencyConverter.dollarToYen(param);
System.out.println(amount);
amount = currencyConverter.yenToEuro(param);
System.out.println(amount);
System.exit(0);
} catch (Exception ex) {
System.err.println("Caught an unexpected exception!");
ex.printStackTrace();
}
}
}
异常信息如下:
Caught an unexpected exception!
javax.naming.NoInitialContextException: Need to specify class name in environmen
t or system property, or as an applet parameter, or in an application resource f
ile: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
40)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243
)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.jav
a:280)
at javax.naming.InitialContext.lookup(InitialContext.java:347)
at ConverterClient.main(ConverterClient.java:46)
请按任意键继续 . . .
不知道是什么原因,麻烦帮忙看一下,
谢谢
问题点数:10、回复次数:5Top
1 楼popufig(失散的影子)回复于 2005-04-02 00:31:06 得分 5
Context initial = new InitialContext();
这里有问题
如果你用同样的调用代码用web可以调用说明你的web容器和EJB容器实际上是在同一个JVM里
但是你启动另外一个Client来调用EJB,就说明这是不同的JVM
所以你应该这么写(weblogic):
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context initial = new InitialContext(properties);
Top
2 楼wtjd()回复于 2005-04-04 08:06:46 得分 0
可是我在同一台机器上运行我的客户端程序,
所以客户端与EJB所在JVM是一样的呀,
还有你这样写:
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context initial = new InitialContext(properties);
我不知道你为什么这样写?可否解释一下,谢谢啊!Top
3 楼talenty(残越)回复于 2005-04-04 09:30:45 得分 1
up
Top
4 楼wtjd()回复于 2005-04-07 08:34:22 得分 0
我使用的初始化工厂类是com.sun.jndi.cosnaming.CNCTxFatory,
那我应该如何运行我的Client呢?
还有一点,对于工厂这个概念你是如何理解的?
http://community.csdn.net/Expert/topic/3902/3902144.xml?temp=5.076236E-02
Top
5 楼gianfeng(小通)回复于 2005-04-07 09:05:06 得分 4
听 popufig 的没错,先跑通了,然后再想为什么。
你的那个web应用,如果单独放到 resin等web 应用中,来访问EJB,肯定也会遇到类似的问题的。Top




