我是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.