我是JSF中的新成員,我需要爲Google地圖使用線程。我正在使用谷歌地圖的primefaces,但我需要在後臺執行一個線程來從數據庫中獲取緯度和長度,然後在地圖上繪製標記。JSF中的線程?
Q
JSF中的線程?
3
A
回答
1
JSF是完全無關到您的問題。對於這種情況,JSF將充當純粹的HTML生成器。您的具體問題是如何異步準備數據並從您的Web應用程序中使用它。
您可以手動創建線程應用程序啓動時就實現ServletContextListener
接口,像這樣一類:
public class ApplicationListener implements ServletContextListener {
ExecutorService executor;
public ApplicationListener() {
executor = Executors.newSingleThreadExecutor();
}
@Override
public void contextInitialized(ServletContextEvent sce) {
Runnable task = new Runnable() {
@Override
public void run() {
//process the data here...
}
}
executor.submit(task);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
executor.shutdownNow();
}
}
提高上述設計,以滿足您的要求。考慮到如果你知道你在做什麼,應該只在上創建應用程序服務器中的線程。
另一個實現是使用另一個應用程序來執行處理(我們稱之爲數據處理器),默認情況下它將在單獨的線程和環境中運行。然後,通過緩存或nosql應用程序(如EhCache,Infinispan或Hazelcast)將您的Web應用程序與此數據處理器進行通信。
2
你的問題是不特定於JSF,而是在一般的Web應用程序。那麼,如何在Java Web應用程序中異步執行任務?絕對不是通過創建自己的線程。
Java Web應用程序中的應用程序服務器(例如JBOSS)運行。應用程序服務器負責爲您管理Java線程。例如,它將爲每個進入的Web請求使用一個單獨的線程。應用程序服務器創建一個線程池並重用這些線程,因爲始終創建新線程的代價有點昂貴。這就是爲什麼你不應該創建自己的,特別是如果它完成每個Web請求,因爲它會直接影響可伸縮性。
爲了異步執行任務,可以使用ejb @Asynchronous註釋(假設應用程序運行在Java EE容器(如jBoss,但不是Tomcat)中)。
import javax.ejb.Singleton;
@Singleton
public class AsyncBean {
@Asynchronous
public void doSomethingAsynchronously() {
// when this EJB is injected somewhere, and this method is called, it will return to the caller immediately and its logic will run in the background
}
}
如果應用程序沒有在Java EE容器中運行,看看this answer這很好地勾畫出異步處理Web應用程序的一些其他的選擇。
相關問題
- 1. JSF中的線程安全
- 2. 如何修復JSF應用程序中的線程泄漏?
- 3. 如何在jsf中使用bean中的線程
- 4. 如何在jsf網站的背景中運行線程?
- 5. JSF項目接線
- 6. 線程池中的線程
- 7. 線程中的線程
- 8. p:dataTable實線行名jsf
- 9. JSF outputLink呈現下劃線
- 10. JSF 1.2中的validateLength JSF 2.1
- 11. 我們應該關注JSF託管bean的線程安全嗎?
- 12. Java中線程中的線程?
- 13. 線程中的流程控制。線程
- 14. Python中的線程 - 線程或進程?
- 15. 在glassfish上運行的jsf應用程序上被阻塞的線程4.1.1
- 16. jsf應用程序中的org.apache.jasper.JasperException
- 17. JSF應用程序中的Qi4j
- 18. JSF 2.0應用程序中的問題
- 19. JSF應用程序的Webservice
- 20. 覆蓋線程中的__init__線程
- 21. 線程「線程1」中的異常java.util.ConcurrentModificationException
- 22. pthread退出線程池中的線程
- 23. Python中的線程與線程模塊
- 24. 多線程 - 類中的異步線程
- 25. OpenMP無子線程中的線程
- 26. 線程池中的活動線程號
- 27. java中有多線程的多線程
- 28. 線程池中的線程狀態
- 29. 線程池中線程的可用性?
- 30. java中的子線程塊父線程