2015-03-05 6 views
1

GIT: https://github.com/AndreaCatania/libreriaОшибка при @LOCAL аннотаций используется (EJB)

У меня есть файл уха, которые содержат два модуля, EJB и WAR.

У меня есть этот интерфейс для EJB

@Remote 
public interface Library2IFace{ 
    public String getName(); 
    public void setName(String name); 
    public String getText(); 
    public void setText(String text); 
} 

Все работает отлично. Модуль WAR правильно блокирует EJB.

Когда я установил аннотации @LOCAL вместо @Remote я получаю эту ошибку:

java.lang.ClassCastException: com.ac.ejbsclient.ejb.Library2IFace$$$view3 cannot be cast to com.ac.ejbsclient.ejb.Library2IFace 
com.ac.test.servlet.MyObj.<init>(MyObj.java:15) 
com.ac.test.servlet.DeServlet.doGet(DeServlet.java:17) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) 
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) 
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) 
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) 
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) 
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) 
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) 
io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) 
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) 
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) 
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) 
io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) 
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
java.lang.Thread.run(Thread.java:745) 

UPDATE Код MyObj является:

public class MyObj{ 

    public MyObj(){ 
     try{ 
      lb1 = (LibraryIFace) new InitialContext().lookup("java:global/"+NAME_VERSION_EAR+"/"+NAME_VERSION_EJBMODULE+"/LibraryBean"); 
      lb2 = (Library2IFace) new InitialContext().lookup("java:global/"+NAME_VERSION_EAR+"/"+NAME_VERSION_EJBMODULE+"/Library2Bean"); 
     }catch(NamingException e){ 
      e.printStackTrace(); 
     } 
    } 

    public void setName(String name){ 
     lb1.setName(name); 
    } 

    public String getName(){ 
     return lb1.getName(); 
    } 

    public void setText(String text){ 
     lb1.setText(text); 
    } 

    public String getText(){ 
     return lb1.getText(); 
    } 

    public void setName2(String name){ 
     lb2.setName(name); 
    } 

    public String getName2(){ 
     return lb2.getName(); 
    } 

    public void setText2(String text){ 
     lb2.setText(text); 
    } 

    public String getText2(){ 
     return lb2.getText(); 
    } 

    public void createBook(int bookId, String name){ 
     lb1.createBook(bookId,name); 
    } 

    public Book getBook(int bookId){ 
     return lb1.getBook(bookId); 
    } 

    private static LibraryIFace lb1; 
    private static Library2IFace lb2; 
    private static final String NAME_VERSION_EAR = "libreriaEar"; 
    private static final String NAME_VERSION_EJBMODULE = "libreria-core-1.0-SNAPSHOT"; 
} 
+0

Является ли EJB развернутым внутри того же проекта, то есть тем же WAR-файлом, а не во внешнем файле jar? –

+0

вы можете вставить свой код в com.ac.test.servlet.DeServlet.doGet (DeServlet.java:17) –

+1

Как подозревается, проблема в том, что вы используете '@ Local' на EJB, который определен во внешнем библиотеки для ВОЙНЫ. –

ответ

1

Сообщение об ошибке в стеке trace указывает, что вызывающий абонент имеет доступ к другой копии класса Library2IFace, скорее всего, в каталоге военного файла/WEB-INF/lib.

Вам необходимо убедиться, что существует только одна копия класса, доступного во всем EAR, и она должна находиться в банке в каталоге EAR/lib или в собственном ejb-jar.

@ Предположение Аяна является распространенным способом управления этим.

Смежные вопросы