2012-10-30 3 views
1

시작시 시작할 빈을 빌드하려고합니다. @Singleton @Startup 빈으로 주석 처리되었지만 @PostConstruct가 실패했지만 왜 그럴지 모릅니다. @Startup @Singleton @PostConstruct가 RunTimeException을 제공합니다 (새로 생성 된 Bean 인스턴스에서 PostConstruct를 호출 할 수 없습니다).

코드입니다 :

@Startup 
@Singleton 
@DependsOn("SearchInitializer") 
public class SearchMigrator { 
    @Inject 
    @Any 
    private Instance<MigrationScenario> migrationScenarios; 
    @Inject 
    private SearchRepository repository; 
    private List<MigrationScenario> sortedScenarioList; 

    @PostConstruct 
    public void doMigration() { 
     (call run() on each MigrationScenario) 
    } 
} 

SearchInitializer이 방법에 @PostConstruct 주석을, 또한 @Startup @Singleton 콩이며, 그것은 그래서,이 빈 전에, 또한 (잘 실행 @ DependsOn이 올바르게 작동하고 있습니다.) SearchRepository는 @Stateless 빈이며 db로갑니다.

Create: java.lang.RuntimeException: Could not invoke PostConstruct on the newly created bean instance 

누구 내가 잘못 어떤 생각 : 나는이 코드를 실행하면

그러나,이 예외가?

편집

추가 정보 : 내가 "@Inject 개인 SearchRepository 저장소는"범인이라고 생각한다. 저 저장소의 주입을 제거하면 부팅이 잘됩니다. 내가 부팅 프로세스를 디버깅 할 경우 내가 저장소가 실제로 (이 또한 스택 트레이스의 AOP에 대한 참조를 통해 지원) 프록시 것을 볼,

16:10:39,531 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Start: name=startup-singleton-initiator:topLevelUnit=xxx-war.war,unit=xxx-war.war,bean=SearchInitializer aliases=[startup-singleton-initiator:bean=SearchInitializer,topLevelUnit=xxx-war.war,unit=xxx-war.war] state=Create: java.lang.RuntimeException: Could not invoke PostConstruct on the newly created bean instance 
at org.jboss.ejb3.singleton.impl.container.SingletonEJBInstanceManagerImpl.create(SingletonEJBInstanceManagerImpl.java:137) [:1.0.2] 
at org.jboss.ejb3.singleton.impl.container.SingletonEJBInstanceManagerImpl.get(SingletonEJBInstanceManagerImpl.java:152) [:1.0.2] 
at org.jboss.ejb3.singleton.deployer.StartupSingletonInitiator.start(StartupSingletonInitiator.java:84) [:1.0.2] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_30] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_30] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_30] 
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_30] 
at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:60) [jboss-reflect.jar:2.2.1.SP1] 
at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:168) [jboss-reflect.jar:2.2.1.SP1] 
at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66) [jboss-reflect.jar:2.2.1.SP1] 
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:257) [jboss-kernel.jar:2.2.0.SP2] 
at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) [jboss-kernel.jar:2.2.0.SP2] 
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:125) [jboss-kernel.jar:2.2.0.SP2] 
at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:72) [jboss-kernel.jar:2.2.0.SP2] 
at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:202) [jboss-kernel.jar:2.2.0.SP2] 
at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) [jboss-kernel.jar:2.2.0.SP2] 
at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) [jboss-kernel.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2.0.SP2] 
at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:1983) [:2.2.2.GA] 
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:1076) [:2.2.2.GA] 
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:679) [:2.2.2.GA] 
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:380) [:6.1.0.Final] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_30] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_30] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_30] 
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_30] 
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) [:6.0.0.GA] 
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) [:6.0.0.GA] 
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) [:6.0.0.GA] 
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:271) [:6.0.0.GA] 
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:670) [:6.0.0.GA] 
at org.jboss.system.server.jmx.MBeanServerWrapper.invoke(MBeanServerWrapper.java:138) [:6.1.0.Final] 
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427) [:1.6.0_30] 
at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72) [:1.6.0_30] 
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265) [:1.6.0_30] 
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360) [:1.6.0_30] 
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788) [:1.6.0_30] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_30] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_30] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_30] 
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_30] 
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303) [:1.6.0_30] 
at sun.rmi.transport.Transport$1.run(Transport.java:159) [:1.6.0_30] 
at java.security.AccessController.doPrivileged(Native Method) [:1.6.0_30] 
at sun.rmi.transport.Transport.serviceCall(Transport.java:155) [:1.6.0_30] 
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) [:1.6.0_30] 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) [:1.6.0_30] 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) [:1.6.0_30] 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_30] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_30] 
at java.lang.Thread.run(Thread.java:662) [:1.6.0_30] 
Caused by: java.lang.RuntimeException: java.lang.NullPointerException 
at org.jboss.ejb3.singleton.aop.impl.AOPBasedSingletonContainer.invokeCallback(AOPBasedSingletonContainer.java:1065) [:1.0.2] 
at org.jboss.ejb3.EJBContainer.invokePostConstruct(EJBContainer.java:1396) [:1.7.21] 
at org.jboss.ejb3.singleton.aop.impl.AOPBasedSingletonContainer.postConstruct(AOPBasedSingletonContainer.java:762) [:1.0.2] 
at org.jboss.ejb3.singleton.impl.container.SingletonEJBInstanceManagerImpl.create(SingletonEJBInstanceManagerImpl.java:133) [:1.0.2] 
... 60 more 
Caused by: java.lang.NullPointerException 
at org.jboss.ejb3.EJBContainer.getApplicationException(EJBContainer.java:509) [:1.7.21] 
at org.jboss.ejb3.singleton.aop.impl.ConstructionInvocationContextAdapter.getApplicationException(ConstructionInvocationContextAdapter.java:62) [:1.0.2] 
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:163) [:0.0.2] 
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:251) [:0.0.2] 
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:392) [:0.0.2] 
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invoke(CMTTxInterceptor.java:211) [:0.0.2] 
at org.jboss.ejb3.tx2.aop.CMTTxInterceptorWrapper.invoke(CMTTxInterceptorWrapper.java:52) [:0.0.2] 
at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:80) [jboss-aop.jar:2.2.2.GA] 
at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) [:1.0.0.GA] 
at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:80) [jboss-aop.jar:2.2.2.GA] 
at org.jboss.ejb3.core.context.CurrentInvocationContextInterceptor.invoke(CurrentInvocationContextInterceptor.java:47) [:1.7.21] 
at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:80) [jboss-aop.jar:2.2.2.GA] 
at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:90) [:1.1.3] 
at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_1631131631.invoke(InvocationContextInterceptor_z_setup_1631131631.java) [:] 
at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:80) [jboss-aop.jar:2.2.2.GA] 
at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67) [:1.0.1] 
at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:80) [jboss-aop.jar:2.2.2.GA] 
at org.jboss.ejb3.singleton.aop.impl.AOPBasedSingletonContainer.invokeCallback(AOPBasedSingletonContainer.java:1061) [:1.0.2] 
... 63 more 

: 내가하지 않으면,이 오류가 발생합니다.

하지만 여전히 그것을 알아내는 데는 운이 없다! 누군가?

+0

아에 명시된 바와 같이 우리의 RuntimeException의 서브 클래스의 일부를 선택할 수 있습니다 오른쪽에 유용한 정보를 추측 : 나는 보스 6.1 결승에서 실행하는거야 - 그래서이 건설 안 문제. – gjoris

답변

3

좋아요, 문제가 무엇인지 알았습니다. 사실, 내 대답은 이러한 종류의 오류를 처리하는 일반적인 방법을 다룰 것입니다. 이 오류에 대한 문제는 JBoss 자체입니다. 응용 프로그램 서버 은 실제 오류을 실제로 먹어 버리고 얼굴에 NullPointerException을 발생시킵니다.

내가 방금 무슨 일이 있었는지 알아 일시적으로 내 코드에 해킹을 입력 한 내 실제 오류를 얻기 위해 무슨 짓을 :

@PostConstruct 
public void doMigration() throws Throwable { 
    try { 
     runAllFoundScenarios(); 
    } catch (Throwable e) { 
     System.out.println("Cause: " + e.getCause()); 
     System.out.println("Message: " + e.getMessage()); 
     System.out.println("Class: " + e.getClass()); 
     System.out.println("StackTrace: " + e.getStackTrace()); 
     throw e; 
    } 
} 

그런 식으로, 내가보고 진짜 원인을 확인 할 수 있었다 로그에서 실제로이 문제를 해결할 수있었습니다. 웹상의 모든 사람들을 같은 문제로 찾을 수 있지만 해결 방법을 게시 한 사람이 아무도 없으므로이 답변이 실제로 진행되고 있는지 파악하는 데 도움이되기를 바랍니다.

FYI는 저에게 주입 된 저장소가있는 JPA 문제였습니다.

1

PosConstruct 주석 (PostConstruct javadoc)에서 설명한 것처럼 PostConstruct로 주석 된 메소드는 검사 된 예외를 시작할 수 없습니다.

그래서 자연스러운 질문인데 어떻게 콩을 시작하는 문제를 신고해야합니까? 체크 된 예외 제한을 건너 뛰기 위해 간단한 RuntimeException을 던지는 것은 적절한 방법이 아닙니다. 이 연습은 게으른 개발을 나타 내기 위해 사용되며, 많은 코드 분석 도구가 불평 할 것입니다. 그런데 EJB 컨테이너는 원래 질문에서 이미 언급 한 예외를 삼킨다.

글쎄, 언젠가는 웹을 탐색 한 후에 실제 응답을 찾지 못했습니다.EJB 빈의 경우 EJBException 예외 계층 (EJBException javadoc)에 공정한 옵션이있는 것 같습니다. 일반 CDI 콩에 대한

, 난 postconstruct checked exceptions

관련 문제