EJB查询语言问题,在线等待............

WildGoose 2003-10-15 03:30:59
我有这样一个EJB:
组件接口:Bank
实现类:BankBean
主接口:BankHome
我添加了这样一个查询表中所有内容的方法:
public Collection findAllCustomer() throws FinderException;
在EJB Designer中的该方法的设置窗口中的Query下加上了下面的EJB QL:
select object(o) from Bank as o
结果,编译是通过了,也发布了,可是在调用该方法的时候出现了下面的错误:
-- Calling loadCustomerInfo()
-- Failed: loadCustomerInfo()
javax.ejb.EJBException: Attempt to pass a reference to an EJBLocalObject to a remote client. A local EJB component may only be accessed by clients co-located in the same ear or standalone jar file.
at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244)
at mybank.TestBank_k7j0gk_EOImpl_811_WLStub.loadCustomerInfo(Unknown Source)
at mybank.TestBankTestClient.loadCustomerInfo(TestBankTestClient.java:270)
at mybank.TestBankTestClient.main(TestBankTestClient.java:333)
Caused by: javax.ejb.EJBException: Attempt to pass a reference to an EJBLocalObject to a remote client. A local EJB component may only be accessed by clients co-located in the same ear or standalone jar file.
at mybank.Bank_5niz5k_ELOImpl.writeObject(Bank_5niz5k_ELOImpl.java:856)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

请问是什么原因,怎么解决????????
还有,我以同样的方法加其它字段的find方法,然后再加上相应的EJB QL语句,如:
select object(b) from Bank as b where b.fieldname=?1
在调用时,也是出现相同的错误
...全文
32 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzl123 2003-10-16
  • 打赏
  • 举报
回复
Value Object,EJB的设计模式之一,就是偶上面提到的封装Entity Bean信息的JavaBean,hoho
WildGoose 2003-10-16
  • 打赏
  • 举报
回复
我明白了,也改好了!
to学习C++喽:V0(值对象)??是什么东东,能解释一下吗?
asdmonster 2003-10-15
  • 打赏
  • 举报
回复
建议用 VO(值对象) 来在前后台之间传递数据。
asdmonster 2003-10-15
  • 打赏
  • 举报
回复
而我只是把查询的结果装载到Collection中然后再传到客户端
===========================================================
不可意,你传递的是对local的引用啊,难道你忘了?
WildGoose 2003-10-15
  • 打赏
  • 举报
回复
我还是不明白,虽然我的Bank Bean(CMP)是local的,但我是通过remote型的SessionBean来访问的,而我只是把查询的结果装载到Collection中然后再传到客户端,这样不行吗?
lzl123 2003-10-15
  • 打赏
  • 举报
回复
你试图在包装Bank bean的session bean ----TestBank中调用home接口的查询方法,然后,直接将查询结果返回到客户端,但因为你的Bank bean实现的是local接口,不能被传到客户端,所以报了上面的错误.
解决方案很简单:
1.把你的Bank bean在session bean中组装成一般的javabean传到客户端
2.为你的Bank bean加上remote接口,然后在finder方法的部署操作符中指明返回的是remote接口
zhanglarch 2003-10-15
  • 打赏
  • 举报
回复
我也是同样的问题:
我有这样一个EJB:
组件接口:UserInfo
实现类:UserInfoBean
主接口:UserInfoHome
我添加了这样一个查询表中所有内容的方法:
public UserInfo findByname(String name) throws FinderException;
在EJB Designer中的该方法的设置窗口中的Query下加上了下面的EJB QL:
select object(u) from UserInfo as object(u) where u.name=?1
结果,编译是通过了,也发布了,可是在调用该方法的时候出现了下面的错误:
我有这样一个EJB:
组件接口:Bank
实现类:BankBean
主接口:BankHome
我添加了这样一个查询表中所有内容的方法:
public Collection findAllCustomer() throws FinderException;
在EJB Designer中的该方法的设置窗口中的Query下加上了下面的EJB QL:
select object(o) from Bank as o
结果,编译是通过了,也发布了,可是在调用该方法的时候出现了下面的错误:
我有这样一个EJB:
组件接口:Bank
实现类:BankBean
主接口:BankHome
我添加了这样一个查询表中所有内容的方法:
public Collection findAllCustomer() throws FinderException;
在EJB Designer中的该方法的设置窗口中的Query下加上了下面的EJB QL:
select object(o) from Bank as o
结果,编译是通过了,也发布了,可是在调用该方法的时候出现了下面的错误:
Unknown query :public abstract larchfirstejb2.UserInfo larchfirstejb2.UserInfoHome.fingByname(java.lang.string) throws javax.ejb.Finderexception;
还有,如果我不使用ejb designer而直接在UserInfoHome 中添加下面内容:
public UserInfo findByname(String name) throws FinderException;
这样是可以使用的,并却成功了。
帮助我!

67,513

社区成员

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

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