在EJB本地调用上获取错误的Target异常

时间:2013-05-13 10:53:02

标签: java ejb jboss-seam

[TxPolicy] javax.ejb.EJBTransactionRolledbackException: Wrong target. class com.sample.mock.service.MockFinanceService for public long com.sample.mock.service.MockFinanceService.createFinancialTransaction(com.sample.mock.service.params.MockFinanceTrasactionParam)

我的无状态bean类是:

@Stateless(mappedName = "MockFinanceService")
public class MockFinanceService implements MockFinanceServiceLocal {
....
}

本地界面是:

@Local
public interface MockFinanceServiceLocal {
    public long createFinancialTransaction(MockFinanceTrasactionParam mockFinanceTrasactionParam);
}

我正在按如下方式调用该服务:

MockFinanceServiceLocal mockFinanceServiceLocal = (MockFinanceServiceLocal) new InitialContext().lookup("FinanceEAR/MockFinanceService/local");
......
mockFinanceServiceLocal.createFinancialTransaction(mockFinanceTrasactionParam);

请帮我理解错误。

3 个答案:

答案 0 :(得分:1)

在使用@Local接口时,某些JBoss版本中存在一个产生此错误的错误,并且服务器配置为通过引用传递值。如果是这种情况,则只需使用@Remote代替@Local即可。请参阅:https://access.redhat.com/site/solutions/28349

您是否有手动进行查找的原因?你不能注入EJB吗?

@EJB
private MockFinanceServiceLocal mockFinanceServiceLocal;

public void myAction() {
    // ...
    mockFinanceServiceLocal.createFinancialTransaction(mockFinanceTransactionParams);
}

此外,您将问题标记为jboss-seam相关。你的问题中没有任何内容,或与之相关的问题,与Seam有关......

答案 1 :(得分:0)

您的错误表明您在此行中遇到问题

mockFinanceServiceLocal.createFinancialTransaction(mockFinanceTrasactionParam);

什么是mockFinanceTrasactionParam 在哪里定义?

答案 2 :(得分:0)

原因是我的应用程序有一个Ear scoped类加载器设置。否则,本地引用甚至可以在同一服务器上部署的不同耳朵上工作。