我正在使用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
接口?