繁体   English   中英

JNDI查找在java.util.TimerTask中失败

[英]JNDI look up is failing with in java.util.TimerTask

public class ReferenceDataTimer extends TimerTask
{
   private static ReferenceDataTimer refDataTimerTask = new ReferenceDataTimer();
   private Timer refDataTimer = null;
   public void start()
   {
        refDataTimer = new Timer();
        refDataTimer.schedule(refDataTimerTask, DELAY, refreshTime*PERIOD);
   }

   @Override
   public void run()
   {
    // Get DB connection using 
    // InitialContext lookup 
    // using resource reference             

    => This is where it is failing. lookup is not working from this run() method of timer task.

    // Then load the data to cache

   }
}

public class ReferenceDataManager implements ServletContextListener {
 // Invoking ReferenceDataTimer -> start() method.
}

我在使用资源引用从服务器上下文获取数据源连接时收到JNDI查找错误。 请注意,如果我不使用TimerTask ,则查找工作正常。

javax.naming.ConfigurationException:无法完成对“ java:”名称的JNDI操作,因为服务器运行时无法将操作的线程与任何J2​​EE应用程序组件相关联。 当未在服务器应用程序请求的线程上执行使用“ java:”名称的JNDI客户端时,会发生这种情况。 确保J2EE应用程序不在静态代码块内或该J2EE应用程序创建的线程中的“ java:”名称上执行JNDI操作。 这样的代码不一定在服务器应用程序请求的线程上运行,因此JNDI操作对“ java:”名称不支持。

有人可以建议吗? 如果无法使用java.util.Timer任务run()方法获取资源(在服务器上下文中可用),请提出一个替代方案。 我什至尝试使用java.util.concurrent.ScheduledExecutorService > scheduleAtFixedRate但徒劳。

您不应在EJB应用程序中使用TimerTask ,因为这将创建并启动Java EE环境中不允许的自定义Thread

而是使用TimerService 它是Java EE标准的一部分。

http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM