EJB SessionBean 之间调用问题?

lxx8402 2006-07-10 12:50:37
容器:jboss4.03
EJBModule1.jar
ChangeEJB.class
ChangeEJBBean.class
ChangeEJBHome.class
ChangeEJBLocal.class
ChangeEJBLocalHome.class

EJBModule2.jar
TestEJB.class
TestEJBBean.class
TestEJBHome.class
TestEJBLocal.class
TestEJBLocalHome.class

其中TestEJBBean有个方法调用了ChangeBean方法,如:
public String getNoInitChangeEJBName() {
InitialContext context = null;
try {
context = new InitialContext();
ChangeEJBLocalHome changeHome = (ChangeEJBLocalHome) context.lookup(
"java:comp/env/ejb/ChangeEJB");
ChangeEJBLocal changeEJB = changeHome.create();
return changeEJB.getName();
}
catch (NamingException ex) {
ex.printStackTrace();
}
catch (CreateException ex) {
ex.printStackTrace();
}

return "change EJB is null";
}

第一次调用是成功的,没有问题,但是当EJBModule1.jar重新热部署之后,调用就会出错,不知道为什么?

如果在EJBModule2.jar中包含ChangeEJB的接口,就是加下面 两个文件:
ChangeEJBLocal.class
ChangeEJBLocalHome.class

EJBModule1.jar重新热部署之后,调用也可以成功,但是,如果ChangeEJB中有个方法返回自定义的序列化的类时(不管EJBModule2是否已调用这个方法),EJBModule1.jar重新热部署时就会出错,不知道为什么?
如在ChangeBean.java中加入:
public Mod1DTO getMethod1() {
Mod1DTO dto = new Mod1DTO();
dto.setId("1111111111");
dto.setNumber(123456);
return dto;
}
Mod1DTo.java:
public class Mod1DTO
implements java.io.Serializable {
private String id;
private int number;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (! (obj instanceof Mod1DTO)) {
return false;
}
Mod1DTO that = (Mod1DTO) obj;
if (! (that.id == null ? this.id == null : that.id.equals(this.id))) {
return false;
}
if (that.number != this.number) {
return false;
}
return true;
}

public int hashCode() {
int result = 17;
result = 37 * result + this.id.hashCode();
result = 37 * result + (int)this.number;
return result;
}

public String toString() {
StringBuffer returnStringBuffer = new StringBuffer(288);
returnStringBuffer.append("[");
returnStringBuffer.append("id:").append(id);
returnStringBuffer.append("number:").append(number);
returnStringBuffer.append("]");
return returnStringBuffer.toString();

}
}

忘各位知情者能解释一二,非常感谢!
...全文
178 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxx8402 2006-07-17
  • 打赏
  • 举报
回复
顶下,大家帮帮忙,看看
lxx8402 2006-07-14
  • 打赏
  • 举报
回复
To yeshucheng(叶澍成★七哥---原来自己差距还很大):
如果能放在一起,就不用在这里麻烦大家了,谢谢!
To infowain(infowain):
我的问题里提到过:
如果在EJBModule2.jar中包含ChangeEJB的接口,就是加下面 两个文件:
ChangeEJBLocal.class
ChangeEJBLocalHome.class
这样就是包含了Local接口,但是会出现:
EJBModule1.jar重新热部署之后,调用也可以成功,但是,如果ChangeEJB中有个方法返回自定义的序列化的类时(不管EJBModule2是否已调用这个方法,在EJBModule1.jar重新热部署此之前是调用过一次的),EJBModule1.jar重新热部署时就会出错,不知道为什么?
infowain 2006-07-10
  • 打赏
  • 举报
回复
你的问题有点奇怪,我用热部署的时候没有出现过这样的问题。
问题可能的原因如下:jboss的jndi载入了ejb的实现类,当你重新部署的时候,jndi没有更新,造成你调用的时候异常。
如果你包含了local接口,那么ejb调用本地ejb的时候就不会通过jndi,所以不会出问题
yeshucheng 2006-07-10
  • 打赏
  • 举报
回复
你还是要把他们都打包成一个.ear中

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧