在weblogic(10.2)上运行EJB3应用程序时获取异常
javax.ejb.EJBException: nested exception is: java.rmi.UnmarshalException: Method not
found: 'helloWorld(Ljava.lang.Long;Ljava.util.List;)'
我创建了一个方法,作为那些有用的东西的精确副本。不过这个方法 没用。
我的业务界面具有以下定义
public abstract interface MySession {
// .. some other methods here, which works fine
/**
* Returns .... something
*
* @param theId ...
*
* @throws MyException If ...something happens
*
* @ejb.interface-method
*/
public String helloWorld(Long theId, List<String>list) throws MyException;
My Bean实现类
@Stateless(mappedName="ejb.TaxSession")
@Remote(TaxSession.class)
public class MySessionEJB implements MySession {
@javax.persistence.PersistenceContext(unitName="myDS")
private EntityManager m_SCSentityManager ;
//.. some methods that work ... (defined in a same fashion as the bad one ..
/**
* Returns tax details from tblDiscreteTaxcollected by BillID
*
* @param theId ...
*
* @throws MyException If something wrong..
*
* @ejb.interface-method
*/
public String helloWorld(Long theId, List<String>list) throws MyException{
String returnValue = "Hello world !!" ;
return returnValue ;
}
}
这是一个客户端代码(JUnit 4):
@Test
public final void taxesByWtns() {
System.out.println("Test taxation started...");
long theId= 1111222;
List<String> theList= new ArrayList<String>();
theList.add("test1");
theList.add("test2");
theList.add("test3");
try {
System.out.println(getTaxSession().helloWorld(theId, theList));
} catch (MyException e) {
System.out.println("EXCEPTION HAS OCCURED !!") ;
e.printStackTrace();
} catch (NamingException e) {
System.out.println("EXCEPTION HAS OCCURED !!") ;
e.printStackTrace();
}
}
我检查了ear文件,看到那个方法就在那里。在此之前,我的方法在第一个参数中有“long”而不是“Long”,而在ear文件中,我只能看到第二个参数。我收集它与序列化有关。所以我改为Long - 现在两个参数都出现了(在ear文件中)。但是,“找不到方法......”的异常仍然出现..
陷阱在哪里? (我按照类似帖子的建议安装,更新并重新安装了几次部署 - 无济于事:()
由于
答案 0 :(得分:1)
可能是MyException类型的问题。确保客户端和服务器端具有MyException类型,并且它满足远程调用的要求(Serializable)。
另一个问题是远程接口的类型为TaxSession而不是MySession。
@Stateless(mappedName="ejb.TaxSession")
@Remote(TaxSession.class) --> not MySession
但是
public class MySessionEJB implements MySession
您确定提供了拥有所声明方法的正确远程接口吗? 在MySession界面中。检查服务器日志以获取EJB部署输出。
答案 1 :(得分:0)
我解决了这个问题。如果有人遇到同样的问题,这里有详细信息
在我的代码中,我使用了泛型!!
public String helloWorld(Long theId, List<String>list) throws MyException{}
有一次,我删除了它 - 它开始工作正常。 不知道它背后的理论概念是什么,但它有效!!