2013-05-26 10 views
5

Jestem nowicjuszem w Java EE i używam JBoss 7 do stworzenia mojego pierwszego projektu. Mam projekt EAR, projekt EJB, projekt WEB i projekt WZP w mojej przestrzeni roboczej. Ejb stworzony w projekcie EJB chce użyć ejb utworzonego w projekcie JPA. Wszystko to kompiluje się dobrze, jednak gdy wdrażam projekt EAR, otrzymuję następujący wyjątek, a wdrożenie nie powiedzie się. Oto główna przyczyna wyjątku.JBAS014544: Nie znaleziono EJB z interfejsem

JBAS014544: Nie znaleziono z interfejsem typu 'com.kohlisoft.stockmanagement.jpa.service.StockManagementBeanJpa' dla EJB wiążące com.kohlisoft.stockmanagement.ejb.main.StockManagementService/sms

Podejrzewam, że projekt EJB nie jest w stanie spojrzeć na klasę w jpa jar.

Połączyłem różne linki, żeby to rozwiązać, ale bez pomocy. Na podstawie kilku sugestii zmieniłem go, ale nadal nie było radości. 1. Sprawdziłem strukturę i projekt JPA przechodzi do folderu lib w .ear. 2. Zaktualizuj plik manifestu projektu EJB, aby dodać zależność do jar jpa.

Byłbym wdzięczny za każdą pomoc.

EJB w projekcie WZP.

@Stateless 
@LocalBean 
public class StockManagementBeanJpaBean implements StockManagementBeanJpa { 

    @PersistenceContext(unitName="StockManagement") 
    private EntityManager em; 

EJB w projekcie EJB, który wykorzystuje go:

@Stateless 
@LocalBean 
public class StockManagementService implements StockManagementServiceLocal { 

    @EJB 
    StockManagementBeanJpa sms; 

... 

plików EJB projektu manifestu.

Manifest-Version: 1.0 
Class-Path: StockManagement-ejbClient.jar 
Dependencies: lib/StockManagement-jpa.jar 

Oto struktura .jars i .war w .ear.

.ear 
|____ ejb.jar 
| 
|____ ejbClient.jar 
| 
|____ web.war 
| 
|____ /lib 
     | 
     | ____ jpa.jar 
     | 
     | ____ all other jars related to derby client, hibernate, jta etc. 

Proszę dać mi znać, jeśli wymagane są inne pliki.

+0

Kod pocztowy i pliki konfiguracyjne. –

+0

Proszę również przesłać swoją strukturę plików ucha. Wskazanie, które biblioteki są umieszczone w miejscu. –

+0

Myślę, że należy opisywać interfejsy za pomocą Adnotacji zdalnych lub Lokalnych. –

Odpowiedz

8

Twoja struktura plików wygląda dobrze.

Więc gdzie jest problem?

@Localbean należy używać wewnątrz fasoli EJB tylko wtedy, gdy EJB nie rozszerza interfejsu. @Local można stosować interfejsu i przedłużenia EJB pomocą interfejsu lub za pomocą @Local straingh wewnątrz nie interfejsu EJB. Ale @Localbean jest używany tylko do bez interfejsu EJB. Więc to, co robisz, nie jest właściwe.

Ponieważ jesteś rozszerzenie interfejsu zrobić jak poniżej:

Interfejs

@Local 
public interface StockManagementBeanJpa 
{ 

.... 

} 

EJB

@Stateless 
public class StockManagementBeanJpaBean implements StockManagementBeanJpa 
{ 

.... 

} 

Zrób to dla wszystkich EJB.

Chcę wskazać jeszcze jedną rzecz, którą @Local będzie działać w twoim przypadku, ponieważ wywołujesz EJB z tej samej aplikacji (ten sam plik EAR). Nie zadziała to w przypadku wzajemnego wywołania aplikacji (inny plik EAR, WAR ...) lub klienta zdalnego wywołującego EJB. W takim przypadku będziesz potrzebował @Remote.

+0

Zaktualizowałem, ale nadal nie działa. – atko

+0

Jaki jest błąd? –

+0

to ten sam błąd co poprzednio. – atko