【问题标题】:How can a singleton Java EE bean obtain a reference to itself?单例 Java EE bean 如何获得对自身的引用?
【发布时间】:2013-05-06 08:10:00
【问题描述】:

我有一个单例 bean,@PostConstruct 方法需要在其内部调用 @Asynchronous 方法。它不能直接使用this 这样做,因为这会使调用同步。我不能@Inject 本身,因为它是圆形的。

【问题讨论】:

    标签: jakarta-ee ejb java-ee-6 ejb-3.1 java-ee-7


    【解决方案1】:

    你可以使用这种类型的包装器:

    @Singleton
    public class SingletonBean {
    
    
    
    @Stateless
    public static class AsynchronousMethodLauncher{
        @EJB
        private SingletonBean singletonBean;
    
        public void launch(){
            singletonBean.asynchronousMethod();
        }
    }
    
        @EJB
        AsynchronousMethodLauncher launcher;
    
        @Asynchronous
        public void asynchronousMethod(){
            //Place your code here
        }
    
        public void yourMethod(){
            launcher.launch();
        }
    }
    

    【讨论】:

    • 好建议! (如果发布了更好的答案,我会接受)
    • 另一个答案更好,你应该接受它;)
    • 好吧,Wildfly 抱怨内部类Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0128: EJB AsynchronousMethodLauncher of type com.acme.job.JobScheduler$AsynchronousMethodLauncher must not be inner class
    【解决方案2】:

    我建议使用自然的 Java EE 方式:

    @Singleton
    public class AsyncSingletonBeanBean {
    
        @Resource
        private SessionContext sessionContext;
    
        @PostConstruct
        public void init() {
            AsyncSingletonBeanBean myBean = sessionContext.getBusinessObject(this.getClass());
            myBean.foo();
        }
    
        @Asynchronous
        public Future<String> foo() {
            return new AsyncResult<String>("Hello");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      相关资源
      最近更新 更多