我正在计划一个必须提供与第三方扩展代码的Java EE容器非常相似的服务的应用程序。基本上,这个应用程序的作用是找到一组工作项(目前,计划是使用Hibernate)并将它们分发给工作项消费者。
工作项消费者加载项目详细信息,调用第三方扩展代码,然后如果第三方代码没有失败,则更新工作项上的某些状态并提交所有工作。
我明确没有把它写成Java EE应用程序。基本上,我的应用程序必须提供容器的许多服务;它必须提供事务管理,连接池和管理以及一定数量的部署支持。我如何直接提供这些,或者B)选择第三方库来提供它们。由于需要更大的项目,扩展编写者将使用Hibernate,如果这有任何区别。
值得注意的是,在我提到的所有功能中,我最不了解的是事务管理。如何将此服务提供给在我的容器中运行的扩展代码?
答案 0 :(得分:4)
您好我推荐使用Spring Framework。它提供了一种很好的方式来汇集您正在谈论的各种服务。
例如,为了满足您的特定需求:
答案 1 :(得分:1)
Spring确实有事务管理。您可以使用Apache DBCP在应用程序上下文中定义DataSource(对于DataSource使用org.apache.commons.dbcp.BasicDataSourceorg.springframework.jdbc.datasource.DataSourceTransactionManager
。之后,如果您将TransactionManager传递给应用程序,则应用程序中的任何对象都可以以编程方式定义自己的事务,或者您可以使用AOP在应用程序上下文中定义对象定义的拦截器,以定义需要在事务中运行的方法。
或者,现在使用Spring的更简单方法是在需要在事务中运行的任何方法中使用@Transactional注释,并将类似的内容添加到应用程序上下文中(假设您的transactionManager名为txManager):< / p>
<tx:annotation-driven transaction-manager="txManager"/>
通过这种方式,您的应用程序可以在以后轻松接受新组件,只需使用@Transactional注释即可进行事务管理,或者通过PlatformTransactionManager直接创建事务,它们将通过setter接收(因此您可以在在应用程序上下文中定义对象。)
答案 2 :(得分:1)
您可以在J2SE环境中尝试Atomikos TransactionsEssentials进行Java事务管理和连接池(JDBC + JMS)。不需要任何appservers,使用它会更有趣; - )
HTH 盖