如何编写或多或少充当容器的应用程序?

时间:2009-04-22 21:59:41

标签: java hibernate transactions containers

我正在计划一个必须提供与第三方扩展代码的Java EE容器非常相似的服务的应用程序。基本上,这个应用程序的作用是找到一组工作项(目前,计划是使用Hibernate)并将它们分发给工作项消费者。

工作项消费者加载项目详细信息,调用第三方扩展代码,然后如果第三方代码没有失败,则更新工作项上的某些状态并提交所有工作。

我明确没有把它写成Java EE应用程序。基本上,我的应用程序必须提供容器的许多服务;它必须提供事务管理,连接池和管理以及一定数量的部署支持。我如何直接提供这些,或者B)选择第三方库来提供它们。由于需要更大的项目,扩展编写者将使用Hibernate,如果这有任何区别。

值得注意的是,在我提到的所有功能中,我最不了解的是事务管理。如何将此服务提供给在我的容器中运行的扩展代码?

3 个答案:

答案 0 :(得分:4)

您好我推荐使用Spring Framework。它提供了一种很好的方式来汇集您正在谈论的各种服务。

例如,为了满足您的特定需求:

  1. 交易管理/连接池
    • 我构建了一个使用Apache commons连接池的基于spring的独立应用程序。另外我认为spring内置了某种事务管理。
  2. 部署支持
    • 我使用ant来部署和运行作为前端加载器的东西。它工作得很好。我只是使用ant分叉一个单独的进程来运行我的Spring独立应用程序。
  3. 线程。
    • Spring支持Quartz,它可以很好地处理线程和线程池
  4. DAO
    • Spring与Hibernate和其他类似项目很好地集成
  5. 配置
    • 使用其xml属性定义 - Spring非常适合多环境配置。

答案 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 盖