2013-04-24 3 views
0

에서 프록시 된 CDI 빈을 사용하여 원격 EJB 메소드를 호출하는 중 오류가 발생했습니다 매개 변수 방법으로 CDI 빈을 사용하여 원격 EJB 메소드를 호출 할 수 있습니까? 이처럼(AS7) 파라미터

는 :

나는 LoggedUserProducer.java 그게 전부가 데이터베이스에서 사용자를 생성합니다.

public class LoggedUserProducer { 

    @Produces 
    @SessionScoped 
    @LoggedUser 
    public User produceLoggedUser() throws Exception { 
     ... //load user from database with a request token 
     return user; 
    } 
} 

그리고 나는 JSF 콩 그게 전부는 EJB 호출하게 한 :

CarController.java

@Named 
@ViewScoped 
public class CarController implements Serializable { 

    @Inject //I have a producer to create the EJB proxy 
    private RepairRemote repairRemote; //My remote EJB 

    @Inject 
    @LoggedUser 
    private User loggedUser; //my User produced by LoggedUserProducer 

    private Car car; 

    public void repairCar() throws Exception { 
     ... //some actions... 

     Repair repair = new Repair(this.car) 
     repair.setPerformedBy(loggedUser); //setting my proxified cdi bean into a POJO 

     repairRemote.repair(repair); //here throws ClassNotFoundException; 
    } 

과 예외 :

java.lang.RuntimeException: ClassNotFoundException marshaling EJB parameters 

at org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:229) 
at org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:216) 
    ... 
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:105) 
at org.jboss.weld.proxies.RepairRemote$-248248579$Proxy$_$$_WeldClientProxy.repair(RepairRemote$-248248579$Proxy$_$$_WeldClientProxy.java) 
at com.mycompany.services.controller.CarController.repairCar(CarController.java:118) 
at com.mycompany.services.controller.CarController$Proxy$_$$_WeldSubclass.repairCar(CarController$Proxy$_$$_WeldSubclass.java) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
... 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) 
at java.lang.Thread.run(Thread.java:662) 

Caused by: java.lang.ClassNotFoundException: com.mycompany.portalcarweb.client.model.User$Proxy$_$$_WeldClientProxy from [Module "deployment.portalcarweb.war:main" from Service Module Loader] 


01 내 원격 EJB 클래스 com.mycompany.portalcarweb.client.model.User $ 프록시 $를 찾을 수없는 이유 23,516,

내가 모르는 _ $$ _ WeldClientProxy

User.java가에 배포 JBoss 7 모듈. 내 EJB 클라이언트와 서버는 WEB-INF 폴더에 jboss-deployment-structure.xml이 있고이 클래스에 액세스하기위한 올바른 모듈을 선언합니다.

고맙습니다 (미안 해요 영어).


갱신

내 두 개의 웹 어플리케이션이 전쟁 파일에 패키지되어 있습니다.

답변

0

Seam 3, CODI와 같은 것을 사용하거나 자신 만의 새로운 @ViewScoped를 작성하지 않는 한 JSF 빈은 CDI (@ViewScoped는 JSF 만 가능)에 의해 관리되지 않습니다.

편집 : 실제로는 버그가 아닙니다. 복사본을 전달해야 할 것입니다. 원격 EJB를 다루는 가장 좋은 방법은 복사본입니다.

+0

이미 Seam 3을 사용하고 있습니다. 그러나이 오류는 JSF 또는 Seam과 관련이 없습니다. cdi bean (cdi'@ Producer'에 의해 생성 됨)을 보내는 것은 EJB 호출 일 뿐이므로 – weakleaf

+0

어떤 JBoss AS 버전을 사용하고 있습니까? – LightGuard

+0

JBoss 7.1.1.Final – weakleaf