JBAS014544:没有找到带接口的EJB

atk*_*tko 5 ejb jpa java-ee

我是Java EE的新手,我正在使用JBoss 7来创建我的第一个项目.我的工作区中有一个EAR项目,一个EJB项目,一个WEB项目和一个JPA项目.EJB项目中创建的ejb想要使用在JPA项目中创建的ejb.这一切都很好,但是当我部署EAR项目时,我得到以下异常,部署失败.这是主要的例外原因.

JBAS014544:找不到带有'com.kohlisoft.stockmanagement.jpa.service.StockManagementBeanJpa'类型接口的EJB,用于绑定com.kohlisoft.stockmanagement.ejb.main.StockManagementService/sms

我怀疑EJB项目无法查看jpa jar中的类.

我已经通过各种链接来解决它但没有帮助.基于一些建议,我修改了它,但仍然没有快乐.1.我检查了结构,JPA项目位于.ear中的lib文件夹下.2.更新了EJB项目的清单文件,以将依赖项添加到jpa jar.

我真的很感激这里的任何帮助.

JPA项目中的EJB.

@Stateless
@LocalBean
public class StockManagementBeanJpaBean implements StockManagementBeanJpa {

    @PersistenceContext(unitName="StockManagement")
    private EntityManager em;
Run Code Online (Sandbox Code Playgroud)

EJB项目中使用它的EJB:

@Stateless
@LocalBean
public class StockManagementService implements StockManagementServiceLocal {

    @EJB
    StockManagementBeanJpa sms;

...
Run Code Online (Sandbox Code Playgroud)

EJB项目MANIFEST文件.

Manifest-Version: 1.0
Class-Path: StockManagement-ejbClient.jar
Dependencies: lib/StockManagement-jpa.jar
Run Code Online (Sandbox Code Playgroud)

这是.ear中.jars和.war的结构.

.ear
 |____ ejb.jar
 |
 |____ ejbClient.jar
 |
 |____ web.war
 |
 |____ /lib
         |
         | ____ jpa.jar
         |
         | ____ all other jars related to derby client, hibernate, jta etc.
Run Code Online (Sandbox Code Playgroud)

如果需要任何其他文件,请告诉我.

Rav*_*edi 10

您的文件结构看起来没问题.

那么,问题出在哪里?

@Localbean只有在EJB没有扩展接口时才应该在EJB bean中使用.@Local可以用于接口,然后使用接口扩展EJB@Local无接口EJB中使用straingh .但@Localbean仅用于无接口EJB.所以,你在做什么是不对的.

由于您正在扩展接口,请执行以下操作:

接口

@Local
public interface StockManagementBeanJpa
{

....

}
Run Code Online (Sandbox Code Playgroud)

EJB

@Stateless
public class StockManagementBeanJpaBean implements StockManagementBeanJpa 
{

....

}
Run Code Online (Sandbox Code Playgroud)

为所有EJB执行此操作.

我想指出@Local在你的情况下可以工作的另外一件事,因为你是从同一个应用程序(相同的EAR)调用EJB.这在跨应用程序调用(不同的EAR,WAR ...)或远程客户端调用EJB的情况下不起作用.在这种情况下,您将需要@Remote.