簡體   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