java - Ejb 查找中的类转换异常

标签 java maven jakarta-ee ejb wildfly-8

我有一个简单的多模块 Maven 项目,带有 war ejb 和 Ear

当我尝试使用查找从 java pojo 类访问我的 ejb 时,它给了我 Wildfly 上的类转换异常,它在 jboss 7 上完美运行。

我已经检查了几乎所有与这篇文章相关的链接,如果有人知道如何解决这个问题,请帮忙。这是我的示例代码:

我的ejb接口(interface):

package interfacejar;

import javax.ejb.Local;


public interface HelloWorldRemote {
       public String sayHello();       
       public void helloWait() ;  
}

session Bean

@Stateless
public class HelloWorld implements Serializable, HelloWorldRemote {

    public String sayHello() {
        // TODO Auto-generated method stub
        return "hello";
    }

    public void helloWait(){
        // TODO Auto-generated method stub
    System.out.println("in ejb");   
    }



}  

我的 war 界面: //因为我从pojo类访问ejb,它位于我的maven项目的不同模块中,所以它也需要在这个模块中创建接口(interface)

package interfacejar;

public interface HelloWorldRemote {
       public String sayHello();  

       public void helloWait() throws Exception;  
}

我的Java类

public class Testnew{




    public HelloWorldRemote getProps(){
        HelloWorldRemote ref=null;
         try {
        Properties props = new Properties();
        props.setProperty("java.naming.factory.initial","org.jboss.as.naming.InitialContextFactory");
        props.setProperty("java.naming.provider.url", "localhost");
        props.setProperty("jboss.naming.client.ejb.context", "true");
        props.setProperty("java.naming.factory.url.pkgs", "org.jboss.ejb.client.naming");



            Context context = new InitialContext(props);

            Object obj =    context.lookup("java:global/MyEarFile/testejb-0.0.1-SNAPSHOT/HelloWorld!interfacejar.HelloWorldRemote");

             ref=(HelloWorldRemote) obj;

        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         return ref;

    }




        public void getRemote(){
            HelloWorldRemote ref=null;
            try {
                ref=getProps();

                ref.helloWait();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            }

}

调用此类的Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub

    this.processRequest(request, response);

}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    this.processRequest(request, response);
}
//java:global/MyEarFile/testejb-0.0.1-SNAPSHOT/HelloWorld!interfacejar.HelloWorldRemote*
/*@Resource(mappedName = "java:global/MyEarFile/tstwar-0.0.1-SNAPSHOT/HelloWorld!interfacejar.HelloWorldRemote")
private HelloWorldRemote helloWorldRemote;*/

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("in servlet");

    Testnew testnew = new Testnew();
    testnew.getRemote();


}

这是我遇到的错误

21:06:49,205 ERROR [stderr] (default task-3) java.lang.ClassCastException: interfacejar.HelloWorldRemote$$$view4 cannot be cast to interfacejar.HelloWorldRemote

21:06:49,205 ERROR [stderr] (default task-3)    at com.test.Testnew.getProps(Testnew.java:43)

21:06:49,205 ERROR [stderr] (default task-3)    at com.test.Testnew.getRemote(Testnew.java:59)

最佳答案

As i am accessing ejb from pojo class which is in different module of my maven project so it requires to create interface here also in this module

这是一个错误,说实话,我不知道它在 JBoss 上对你有什么作用。您不能只创建一个类并转换为它,您需要将该模块与 session bean 添加为您的 war 模块的依赖项。

两个类,除了相同的包和名称之外,还需要使用相同的类加载器加载才能被视为同一个类。

关于java - Ejb 查找中的类转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27362221/

相关文章:

java - 为什么 FileOutputStream 的 write() 方法可以写入字符,而 OutputStreamWriter 却不能?

java - Tomcat JULI logging.properties 的解释

java - Enum 是 JVM 范围的单例吗?

jsf - 将 JSF-Maven 应用程序从 Eclipse 直接部署到 tomcat

java - 分布式 Java EE 配置中的 JPA

java - sbt 服务器不可用

java - 编译错误: During maven build

java - Maven编译错误: package does not exist and cannot find symbol

java - 在不重新启动 WebSphere 的情况下重新加载 java 类的最佳方法?

java - JSF - 如何将参数从一个 Controller 传递到另一个 Controller Action 事件?