Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用InitialContext Lookup()和@Inject of Singleton进行查找_Java_Jakarta Ee_Design Patterns_Dependency Injection_Singleton - Fatal编程技术网

Java 使用InitialContext Lookup()和@Inject of Singleton进行查找

Java 使用InitialContext Lookup()和@Inject of Singleton进行查找,java,jakarta-ee,design-patterns,dependency-injection,singleton,Java,Jakarta Ee,Design Patterns,Dependency Injection,Singleton,我有一个@singletonbean,用于存储要与其他bean/线程共享的状态。要共享的状态在HashMap中维护。其他需要此单例服务的bean只需执行@Inject并调用方法 最近,我们不得不引入Quartz调度器,因为我们有一些异步工作要做。在一个quartz作业中,我使用IntialContext lookup()查找单例,并使用单例提供的方法。一旦执行此作业,其他使用@Inject(对于单例)的bean将不再获得HashMap中维护的信息 @Singleton(mappedName =

我有一个@singletonbean,用于存储要与其他bean/线程共享的状态。要共享的状态在HashMap中维护。其他需要此单例服务的bean只需执行@Inject并调用方法

最近,我们不得不引入Quartz调度器,因为我们有一些异步工作要做。在一个quartz作业中,我使用IntialContext lookup()查找单例,并使用单例提供的方法。一旦执行此作业,其他使用@Inject(对于单例)的bean将不再获得HashMap中维护的信息

@Singleton(mappedName = "ClientSessionMgr")
public class ClientSessionMgr {

    private final Map<String, ClientSession> clientSessions = new HashMap<String, ClientSession>();

    /* Methods that manage the clientSessions data */
}
Quartz作业,它查找单例,然后使用单例提供的方法

public class ClientSyncProbe implements Job {
  private ClientSessionMgr csm;

  @Override
  public void execute(JobExecutionContext jec) throws JobExecutionException {
      InitialContent ic = new InitialContext();
      csm = (ClientSessionMgr) ic.lookup("java:app/SVWeb/ClientSessionMgr");

      /* Some tasks, and finally */
      ic.close()
  }
}

我猜我缺少了一个模式原则。有什么帮助吗?

为什么选择Quartz而不是
@Schedule
?如何使用@Stateless bean?在何处/如何注入它们?JNDI查找在从应用服务器不控制的随机线程(如Quartz使用的线程)执行时,可能不会以您认为应该的方式进行。使用
@Schedule
而不是injection让我改用@Schedule
public class ClientSyncProbe implements Job {
  private ClientSessionMgr csm;

  @Override
  public void execute(JobExecutionContext jec) throws JobExecutionException {
      InitialContent ic = new InitialContext();
      csm = (ClientSessionMgr) ic.lookup("java:app/SVWeb/ClientSessionMgr");

      /* Some tasks, and finally */
      ic.close()
  }
}