java.lang.ClassCastException:$Proxy99无法强制转换

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

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