2011-02-08 8 views
1

몇 가지 이상한 이유로 다음 예외가 발생합니다.상태 저장 ejb에 대한 클래스 캐스트 예외

2011-02-08 09:53:30,667 ERROR [STDERR] (QuartzScheduler_Worker-9) java.lang.ClassCastException: org.javassist.tmp.java.lang.Object_$$_javassist_seam_7 cannot be cast to no.kommuneforlaget.fagsystem.saksapp.service.report.SystemlogListener 
2011-02-08 09:53:30,668 ERROR [STDERR] (QuartzScheduler_Worker-9)  at no.kommuneforlaget.fagsystem.saksapp.jobs.ESBLogListener.checkESBEvents(ESBLogListener.java:71) 
2011-02-08 09:53:30,668 ERROR [STDERR] (QuartzScheduler_Worker-9)  at no.kommuneforlaget.fagsystem.saksapp.jobs.ESBLogListener.scheduler(ESBLogListener.java:119) 
2011-02-08 09:53:30,668 ERROR [STDERR] (QuartzScheduler_Worker-9)  at sun.reflect.GeneratedMethodAccessor466.invoke(Unknown Source) 
2011-02-08 09:53:30,668 ERROR [STDERR] (QuartzScheduler_Worker-9)  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
2 

올바른 클래스이므로 클래스 캐스트 예외가 있어서는 안됩니다.

SystemlogListener systemlogListener = (SystemlogListener) Component.getInstance("systemlogListener", ScopeType.SESSION, true); 

그리고 클래스는

사람이 내가 만든 실수를

@Name("systemlogListener") 
@Scope(ScopeType.SESSION) 
@AutoCreate 
@Stateful 
@TransactionManagement(TransactionManagementType.CONTAINER) //default 
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
public class SystemlogListener implements SystemlogListenerLocal, Serializable { 
발견 할 수 입니다 :

코드는 무엇입니까?

답변

2

삽입 된 클래스를 반환하는 Component.getInstance (...)라고 가정합니다. 삽입 된 구현은 구현 클래스가 아니어도 로컬/원격 인터페이스의 클래스 일 수 있습니다. 그래서 SystemlogListenerLocal 인터페이스로 전송할 수 있지만 SystemlogListener 구현에는 전송할 수 없습니다.

이유는 AppServer를 구현하는 것입니다. 프록시를 만들고 실제 구현에이 메서드를 위임합니다.

+0

물론 가능합니다. 모든면에서 인터페이스를 사용해야합니다. 나는 그것을 잊어 버린 것을 믿을 수 없다 :) –

+0

작업 코드를 공유 할 수 있겠는가? 같은 예외가 생기고 클래스와 인터페이스가 있습니다 ...하지만 인스턴스를 가져 오기 위해 myClass를 캐스팅해야합니다 ... – efirat

+0

나는 이것이 있어야한다고 생각합니다 : myBeanInterface mb = (myBeanInterface) Component.getInstance ("myBeanName" , 사실); – efirat