2009-04-22 44 views
0

我正在計劃一個應用程序,它必須提供非常類似於第三方擴展代碼的Java EE容器的服務。基本上,這個應用程序所做的是找到一組工作項目(目前,計劃使用Hibernate)並將其分派給工作項目消費者。如何編寫一個或多或少作爲容器的應用程序?

工作項消費者加載項目詳細信息,調用第三方擴展代碼,然後如果第三方代碼沒有失敗,則更新工作項上的某個狀態並提交所有完成的工作。

我明確沒有把它寫成Java EE應用程序。實質上,我的應用程序必須提供容器的許多服務,但是;它必須提供事務管理,連接池和管理,以及一定的部署支持。我如何或者A)直接提供這些,或者B)選擇第三方庫來提供它們。由於大型項目的需求,擴展編寫者將使用Hibernate,如果這有什麼區別的話。

值得注意的是,在我提到的所有功能中,我最不瞭解的是事務管理。我如何提供這項服務給在我的容器中運行的擴展代碼?

回答

1

Spring確實有事務管理。您可以使用Apache DBCP在應用程序上下文中定義一個DataSource(對於DataSource使用org.apache.commons.dbcp.BasicDataSourceorg.springframework.jdbc.datasource.DataSourceTransactionManager)。之後,應用程序中的任何對象都可以通過編程方式定義自己的事務,如果將它傳遞給TransactionManager,或者可以在應用程序上下文中使用對象定義的AOP攔截器來定義需要在事務內部運行哪些方法。

或者,Spring現在更簡單的方法是在需要在事務內部運行的任何方法中使用@Transactional註釋,並嚮應用程序上下文添加類似的內容(假設您的transactionManager被命名爲txManager):

<tx:annotation-driven transaction-manager="txManager"/>

這樣,你的應用程序將輕易接受以後新的組件,它可以有事務管理簡單地通過@Transactional註解,或者通過一個PlatformTransactionManager直接創造交易,他們將獲得通過一個setter(所以當你在應用上下文中定義對象時,你可以傳遞它)。

4

嗨,我建議使用Spring框架。它提供了一個很好的方式來彙集您正在討論的各種服務。

例如,以解決您的特定需求:

  1. 交易管理/連接池
    • 我建立了一個使用Apache的公共連接池基於彈簧的獨立應用程序。此外,我相信春天有某種交易MGMT的內置的。
  2. 部署支持
    • 我使用ant部署和運行的東西作爲前裝載。它工作得很好。我只是用ant分離一個獨立的進程來運行我的Spring獨立應用程序。
  3. 線程化。
    • Spring對Quartz的支持與線程和線程池
  4. DAO
    • 春與Hibernate和其他類似項目很好地集成
  5. 配置交易以及
    • 使用其xml屬性定義 - Spring對於多環境配置非常有用。
+1

+1工作 - 完美。我希望我先看過它。 – duffymo 2009-04-22 23:16:33

+0

好的答案,但Quartz是用於調度而不是線程。它當然使用線程,但它的功能是調度。儘管如此,還是一個很好的答案 – Robin 2009-04-23 13:19:58

1

您可以在J2SE環境中嘗試使用Atomikos TransactionsEssentials進行Java事務管理和連接池(JDBC + JMS)。無需任何appservers,它是更有趣與;-)

HTH 蓋伊

相關問題