我正在使用JBoss4.2.2和java6。

部署的耳朵的名称为apa.ear

在servlet中,我有以下代码行:

placeBid = (PlaceBid) context.lookup("apa/"
  + PlaceBid.class.getSimpleName() + "/remote");


我有一个生成的jboss-app.xml像这样:

<jboss-app>
  <loader-repository>apa:app=ejb3</loader-repository>
</jboss-app>


当尝试通过上下文获取PlaceBid时,出现此异常

java.lang.ClassCastException: $Proxy99 cannot be cast to se.nextit.actionbazaar.buslogic.PlaceBid


PlaceBid界面如下所示:

@Remote
public interface PlaceBid {
 Long addBid(String userId, Long itemId, Double bidPrice);
}


当我运行EJB3附带的示例时,它可以工作。实际中的EJB3示例代码与ant构建一起提供。我想使用Maven,所以我重新安排了一些代码。

但是,我不明白我在这里做错了什么。我对jboss-app.xml文件有一些想法。我不确定其内容应如何。

感谢您的帮助。

最好的祝福拉瑟

最佳答案

第一步,请尝试以下操作:

Object obj = context.lookup("apa/" + PlaceBid.class.getSimpleName() + "/remote");
System.out.println("Object = " + obj.getClass().getName());
System.out.println("Interfaces = " + Arrays.toString(obj.getClass().getInterfaces()));


它将告诉您实际的存根具体类是什么以及实现的接口。这样可能会给您足够的提示,以找出问题所在。

同样,您的bean定义为:

@Stateless
public class MyPlaceBidBean implements PlaceBid {
    ...
}


即它实现了PlaceBid接口?

09-25 22:19