jboss下开发ejb,客户端查找ejb时候,context.lookup()函数的参数到底应该怎样写?

pxpwxj 2006-06-23 12:07:50
各位大侠:
我用jboss部署ejb,首先在ejb-jar.xml里面出现了ejb名称:<ejb-name>Fibo</ejb-name>
然后jboss.xml里面出现了<ejb-name>Fibo</ejb-name>
<jndi-name>ejb/Fibo</jndi-name>

然后在作为客户端的web程序之jboss-web.xml,web.xml里面都有<ejb-ref>之类的元素。
那么jboss再部署这个ear文件之后,到底是将这个ejb绑定为哪个jndi名称。
context.lookup()的参数到底该怎样写?

2个问题:“java:/comp/env/”什么情况下需要出现在lookup()函数里面?


远程访问ejb时候,lookup()里面怎样写呢?
本人初学,tks

tks
...全文
617 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lightersky 2006-06-24
###################以下是jboss的配置##############
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099

###################以下是Weblogic的配置##############
# java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
# java.naming.provider.url=t3://localhost:7001

###################以下是sun one app server 的配置##############
#java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
#java.naming.provider.url=iiop://localhost:3700

###################以下是rmi的配置##############
#java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
#java.naming.provider.url=rmi://localhost:1099

###################以下是ldap的配置##############
#java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
#java.naming.provider.url=ldap://localhost:389
回复
wuzhiqing1984 2006-06-24
可以参考一下:
//EJB的初始化方法
public void initialize() throws Exception {
//创建服务器对象查找类
Context context = getInitialContext();
//取得EJB在服务器的对象
Object ref = context.lookup("StockManagementData");
//取得StockManagementData EJB的创建接口
stockManagementDataHome = (StockManagementDataHome)PortableRemoteObject.narrow(ref,
StockManagementDataHome.class);
//取得StockManagementData EJB的远程接口
create();
}
//服务器对象查找类的创建方法
private Context getInitialContext() throws Exception {
String url = "t3://192.168.123.118:7001";
String user = null;
String password = null;
Properties properties = null;
//初始化联接服务器的属性
try {
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
if (user != null) {
properties.put(Context.SECURITY_PRINCIPAL, user);
properties.put(Context.SECURITY_CREDENTIALS, password == null ? "" : password);
}
return new InitialContext(properties);
}
catch(Exception e) {
System.out.println("Unable to connect to WebLogic server at " + url);
System.out.println("Please make sure that the server is running.");
throw e;
}
}
//创建StockManagementData EJB的远程接口
public stockmanagementpro.StockManagementData create() throws Exception {
stockManagementData = stockManagementDataHome.create();
return stockManagementData;
}
回复
yown 2006-06-24
如果要是非本地机器上,那么这个

Object objRef = ic.lookup("java:comp/env/YonghelloEJB"); 怎么写呢?

要用RMI吗?

回复
yown 2006-06-24
try {
InitialContext ic = new InitialContext();
Object objRef = ic.lookup("java:comp/env/YonghelloEJB");
//Object objRef = ic.lookup("YonghelloEJB");
YonghelloHome home = (YonghelloHome)PortableRemoteObject.narrow(objRef,ejbs.YonghelloHome.class);
YonghelloClient YonghelloRemote = home.create();
message = YonghelloRemote.sayYonghello();
} catch (RemoteException re) { re.printStackTrace();
} catch (CreateException ce) { ce.printStackTrace();
} catch (NamingException ne) { ne.printStackTrace();
}
回复
infowain 2006-06-24
t3是weblogic的协议,其他的服务器不能用
回复
kevinliuu 2006-06-23
例子

// Load up the initial context
Context ctx = new InitialContext();

// Look up a bean's home interface
Object obj = ctx.lookup("java:comp/env/ejb/PurchaseHome ");
PurchaseHome purchaseHome =
(PurchaseHome)PortableRemoteObject.narrow(obj, PurchaseHome.class);
Purchase purchase = purchaseHome.create(paymentInfo);

// Work on the bean
for (Iterator i = items.iterator(); i.hasNext(); ) {
purchase.addItem((Item)i.next());
}

// Look up another bean
Object obj = ctx.lookup("java:comp/env/ejb/InventoryHome");
InventoryHome inventoryHome =
(InventoryHome)PortableRemoteObject.narrow(obj, InventoryHome.class);
Inventory inventory = inventoryHome.findByStoreName(storeName);

// Work on the bean
for (Iterator i = items.iterator(); i.hasNext(); )
inventory.markAsSold((Item)i.next());
}

// Do some other stuff
回复
pxpwxj 2006-06-23
各位高手,就是说如果调用远程的ejb,先要为jndi准备一个properties,这个properties里面要有ip地址,协议等等参数。请问怎样知道某种服务器(如jboss)需要什么参数,各参数该怎样填写?

还问:"t3://10.13.72.159:7001" ,这个t3是否为指定的协议名称?这是j2ee规定的,还是服务器特定的?
回复
jk01dingxian 2006-06-23
t3的远程方法调用是针对weblogic的.只有weblogic有.做j2ee开发远程方法调用一般是client测试ejb.我记得jboss是会在你的配置文件里的EJB的JNDI名自动加前缀java:.所以你查找时应该是lookup(java:XXXXX).
回复
superghygf 2006-06-23
楼上说得不错
回复
weichenggao 2006-06-23
我项目中的完整的例子,参考一下吧:


properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");

properties.put(Context.PROVIDER_URL,"t3://10.13.72.159:7001");

properties.put(Context.SECURITY_PRINCIPAL, "");
properties.put(Context.SECURITY_CREDENTIALS, "");
ctx = new InitialContext(properties);
String jndi ="ejb/cardcenter/PolicyService";
Object jndiobj = ctx.lookup(jndi);
this.cardHome = (CardEjbServiceHome)PortableRemoteObject.narrow(jndiobj,
CardEjbServiceHome.class);
card = cardHome.create();
List list = this.card.searchPolicy("YUANJIE004");
回复
xiaoyuan2007 2006-06-23
关注
回复
pxpwxj 2006-06-23
如果是要调用远程的ejb呢?
回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2006-06-23 12:07
社区公告
暂无公告