[英]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操作,因为服务器运行时无法将操作的线程与任何J2EE应用程序组件相关联。 当未在服务器应用程序请求的线程上执行使用“ 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标准的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.