急!初学ejb,有一个问题请帮忙。在线等,解决就给分!

shidu 2003-06-04 01:44:18
Collection col = client.deptSes.findDeptByLoc("beijing");
Iterator it = col.iterator();
while (it.hasNext()) {
Dept dept = (Dept) javax.rmi.PortableRemoteObject.narrow(it.next(), Dept.class);
//System.out.println(dept.getDeptno()+" "+dept.getDname()+" "+dept.getLoc()); 这为什么出错??????
System.out.println(dept);
}

输出结果:
Dept:60
Dept:50
正常。


但是System.out.println(dept.getDeptno()+" "+dept.getDname()+" "+dept.getLoc()); 就出错:
java.lang.NullPointerException
at org.jboss.ejb.plugins.local.EntityProxy.invoke(EntityProxy.java:38)
at $Proxy2.getDeptno(Unknown Source)
at firstcmp.DeptSesTestClient.main(DeptSesTestClient.java:158)

到底什么是null?还是代码有问题?谢谢!!!




...全文
30 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
shidu 2003-06-06
  • 打赏
  • 举报
回复
我用session bean访问entity bean,session bean里有一个方法:
public java.util.Collection getAllDept() {
Collection col = null;
try{
col = deptHome.findAll();
}catch(Exception ex){
ex.printStackTrace();
}
return col;
}

是不是不能这样用?
另外:entity bean是本地的,session bean是远程的。有没有问题?
shidu 2003-06-06
  • 打赏
  • 举报
回复
up again
shidu 2003-06-06
  • 打赏
  • 举报
回复
up
zyymmm 2003-06-06
  • 打赏
  • 举报
回复
老大,你没抛java.rmi.RemoteException啊
另外,col = deptHome.findAll();会反复实例化CMP的,自己写个private的deptHome(),在里面lookup远程接口,然后col = deptHome().findAll();

另外,最好别直接throws java.rmi.RemoteException,你自己写个异常类,用super()继承java.rmi.RemoteException ,这样可以抛出更详细的异常。
accp 2003-06-06
  • 打赏
  • 举报
回复
这个类就起一个中介作用~
就是很麻烦,就是没办法,远程不能访问本地接口~
呵~
或者你SessionBean直接调用EntityBean的远程接口,这样就不用要那个Department的类了,
但这样的话SessionBean作用就显得很小~
shidu 2003-06-06
  • 打赏
  • 举报
回复
Department这个类还有别的作用吗?
shidu 2003-06-06
  • 打赏
  • 举报
回复
accp(accp) :

是不是还要有一个Department类,他的成员要bean,也就是表的字段对应。

这也太麻烦了。除了俩个借口和一个实现类,还要一个。是不是?
麻烦你了。在开个帖子给你分。
shidu 2003-06-06
  • 打赏
  • 举报
回复
accp(accp) :

是不是还要有一个Department类,他的成员要bean,也就是表的字段对应。

这也太麻烦了。除了俩个借口和一个实现类,还要一个。是不是?
麻烦你了。在开个帖子给你分。
accp 2003-06-06
  • 打赏
  • 举报
回复
也就是Session Bean你不能把本地实体Bean的结果直接返回给远程客户端~
你可以把结果取出来包装一下,再返回给远程~
比如这样
calss Department
{
Integer id;
String name;
}
public java.util.Collection getAllDept() {
Collection col = new Vector();
try{
Collection tempColl = deptHome.findAll();
Iterator tempIter = tempColl.iterator();
while(tempIter.hasNext())
{
Dept dept = (Dept)iter.next();
Department department = new Department();
department.id = dept.getId();
department.name = dept.getName();
col.add(department);
}

}catch(Exception ex){
ex.printStackTrace();
}
return col;
}
代码是我手敲的,可能有些错误,大致意思就这样~
兄弟,你这错误害得我不浅啊~
shidu 2003-06-06
  • 打赏
  • 举报
回复
public java.util.Collection getAllDept() {
Collection col = null;
ArrayList col2 = null;
try{
col = deptHome.findAll();
col2 = new ArrayList();
进行循环,把col的内容放到col2
}catch(Exception ex){
ex.printStackTrace();
}
return col2;
}
shidu 2003-06-06
  • 打赏
  • 举报
回复
accp(accp) :
你能说清楚点吗?为什么?我应该怎么办?

谢谢你一直帮忙。
accp 2003-06-06
  • 打赏
  • 举报
回复
问题终于出来,可以肯定回答
不能这样用~
shidu 2003-06-06
  • 打赏
  • 举报
回复
大家帮忙!!
shidu 2003-06-05
  • 打赏
  • 举报
回复
请教一个问题:在用session bean 访问entity bean的时候,session bean一般什么时候用有状态的?什么时候用无状态的?
还有,怎么确定session bean的接口类型应该是local,还是remote或local/remote?

不够在加分
shidu 2003-06-05
  • 打赏
  • 举报
回复
快来人呀
spfft007 2003-06-05
  • 打赏
  • 举报
回复
检查一下你的deptno,试一下accp(accp) 的方法
shidu 2003-06-05
  • 打赏
  • 举报
回复
我又在weblogic试了一遍

tnnd,还是不行。
shidu 2003-06-05
  • 打赏
  • 举报
回复
多谢 coolhorse()


coolhorse 2003-06-05
  • 打赏
  • 举报
回复
以下是个人意见,仅做参考:

session bean 有无状态需要根据具体情况而定!有些项目使用值javabean来保存状态配合无状态的session bean一样可以达到有状态session bean的效果,当然还是有很大区别的!

session bean的接口类型:
local:一般是为在同一进程内调用准备的(客户端程序和EJB使用同一个虚拟机),分布式不可用(但是速度比remote要快)
remote:远程调用(支持分布式)

选那一种,看你的系统架构
shidu 2003-06-05
  • 打赏
  • 举报
回复
帮帮忙
加载更多回复(13)

67,513

社区成员

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

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