JiveJdon Community Forums
在线357人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 2 回复 / 1
 发表新帖子   回复该主题贴
xujun

悄悄话
发表文章: 35
注册时间: 2005年01月14日 09:55
MDB中调用SessionBean的配制该怎么写 2005年01月27日 17:10 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表
我的平台windows2003+JBuilder2005+JBoss4.0+mysql
我现在想用一个MDB〔LogBean〕去驱动SessionBean(Count)
我不想直接在代码里初始化JNDI的参数直接调用,想通过配制文件去调用。
现在在部署LogBean时有异常:
6:56:09,859 ERROR [MessageDrivenContainer] Starting failed jboss.j2ee:jndiName=local/Log,service=EJB
org.jboss.deployment.DeploymentException: Failed to resolve EJB-link: Count make by EJB-name: EJB/Count

我在LogBean的EJB-jar.xml文件里:
加了EJB-ref啊
元素值如下:
ejb-ref-name:ejb/Count
/*在LogBean的OnMessage()里调用的JNDI名称,我是这样调用的

Context ctx = new InitialContext();
Object o = ctx.lookup("java:comp/env/ejb/Count");
CountHome home = (CountHome)
javax.rmi.PortableRemoteObject.narrow(o,CountHome.class);
Count count = home.create(2);
*/
ejb-ref-type:Session
home:mastercount.CountHome
remote:mastercount.Count
ejb-link:Count

在jboss.xml文件里我加了resource-manager
元素值如下:
res-name:ejb/Count
res-jndi-name:Count

请问各位,jboss.xml中的resource-manager是必须要加的吗?我觉的是的。
我的MDB LogBean本来没加入对Count的调用时是好的,部署和测试都作过了,没有问题,Count也是的。但结合在一起时就不行了,
请各位帮忙看看。
ccxanadu

悄悄话
发表文章: 23
注册时间: 2003年07月30日 14:45
Re: MDB中调用SessionBean的配制该怎么写 2005年01月27日 17:22 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
你可以这样做,比较好一点:
先建一个class如下:
/**
* <p>Title: 通用查找HOME接口类</p>
* <p>Description: 缓存其他bean的home接口,提供singleton型的InitialContext</p>
*/

import java.util.*;
import javax.ejb.*;
import javax.naming.*;
import javax.rmi.*;

public class EJBHomeFactory {

private static EJBHomeFactory instance;
private Map homeInterfaces;
private Context context;

//构造函数 is private,不能被直接实例化,用该类的getInstance函数得到该类实例。
private EJBHomeFactory() throws NamingException {
homeInterfaces = new HashMap();
context = new InitialContext();
}

public static EJBHomeFactory getInstance() throws NamingException {
if (instance == null) {
instance = new EJBHomeFactory();
}
return instance;
}

public EJBLocalHome lookup(String jndiName, Class homeInterfaceClass) throws
NamingException {
//查找已存在map中的home句柄,如果有的话,就不用再lookup了。
EJBLocalHome homeInterface = (EJBLocalHome) homeInterfaces.get(homeInterfaceClass);
//如果没有现成的home句柄,就用jndi名查找它。
if (homeInterface == null) {
Object obj = context.lookup(jndiName);
homeInterface = (EJBLocalHome) PortableRemoteObject.narrow(obj,
homeInterfaceClass);
//把新找到的home句柄缓存起来,活不能白干。
homeInterfaces.put(homeInterfaceClass, homeInterface);
}
return homeInterface;
}
}
然后在你的mdb的onmessage方法中这样写:
try {
if (msg instanceof TextMessage) {
String s = ( (TextMessage) msg).getText();
System.out.println("--收信息:[" + s + "]");
EJBHomeFactory fs = EJBHomeFactory.getInstance();
/**
*假设session bean的bean名是CpBusiness
*CpBusiness的商务逻辑通过process方法实现
*/
CpBusinessLocalHome cpHome = (CpBusinessLocalHome) fs.lookup("CpBusinessLocal", CpBusinessLocalHome.class);
CpBusinessLocal cp = cpHome.create();
cp.process(s);
}
}
catch (Exception ex) {
}
:)祝好运
xujun

悄悄话
发表文章: 35
注册时间: 2005年01月14日 09:55
Re: MDB中调用SessionBean的配制该怎么写 2005年01月28日 09:22 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
感谢!
这个主题有 2 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  发贴前查询 标签列表勿重复发表问题

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam