java.lang.ClassCastException:$Proxy99无法强制转换
我正在使用JBoss4.2.2和java6 部署的ear的名称是apa.ear 在servlet中,我有以下代码行:java.lang.ClassCastException:$Proxy99无法强制转换,java,servlets,jboss,jakarta-ee,ejb-3.0,Java,Servlets,Jboss,Jakarta Ee,Ejb 3.0,我正在使用JBoss4.2.2和java6 部署的ear的名称是apa.ear 在servlet中,我有以下代码行: placeBid = (PlaceBid) context.lookup("apa/" + PlaceBid.class.getSimpleName() + "/remote"); 我有一个生成的jboss-app.xml,如下所示: <jboss-app> <loader-repository>apa:app=ejb3</loader-r
placeBid = (PlaceBid) context.lookup("apa/"
+ PlaceBid.class.getSimpleName() + "/remote");
我有一个生成的jboss-app.xml,如下所示:
<jboss-app>
<loader-repository>apa:app=ejb3</loader-repository>
</jboss-app>
@Remote
public interface PlaceBid {
Long addBid(String userId, Long itemId, Double bidPrice);
}
PlaceBid界面如下所示:
<jboss-app>
<loader-repository>apa:app=ejb3</loader-repository>
</jboss-app>
@Remote
public interface PlaceBid {
Long addBid(String userId, Long itemId, Double bidPrice);
}
当我运行EJB3附带的示例时,它可以正常工作。EJB3实际示例代码随ant building一起提供。我想使用Maven,所以我重新安排了一些代码
然而,我不明白我在这里做错了什么。我对jboss-app.xml文件有一些想法。我不确定它的内容应该是什么样子
谢谢你的帮助
最美好的祝愿Lasse作为第一步,请尝试以下操作:
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 {
...
}
i、 e.它实现了
PlaceBid
接口?作为第一步,请尝试以下操作:
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 {
...
}
i、 e.它实现了
PlaceBid
接口?如果上下文类型为javax.naming.context(或InitialContext),那么问题在于缺少对PortableRemoteObject.窄的调用:
placeBid = (PlaceBid) PortableRemoteObject.narrow(context.lookup("apa/"
+ PlaceBid.class.getSimpleName() + "/remote", PlaceBid.class);
这是远程接口的EJB规范所要求的。如果改为使用引用(@EJB或EJB ref),容器将为您处理窄消息。如果上下文类型为javax.naming.context(或InitialContext),则问题在于缺少对PortableRemoteObject.窄消息的调用:
placeBid = (PlaceBid) PortableRemoteObject.narrow(context.lookup("apa/"
+ PlaceBid.class.getSimpleName() + "/remote", PlaceBid.class);
这是远程接口的EJB规范所要求的。如果您使用引用(@EJB或EJB ref),容器将为您处理狭窄的区域。给出您注入的代码
PlaceBid
给出您注入的代码PlaceBid