0

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

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

我明确没有将其编写为 Java EE 应用程序。但是,本质上,我的应用程序必须提供容器的许多服务;它必须提供事务管理、连接池和管理,以及一定的部署支持。我如何 A) 直接提供这些,或 B) 选择第三方库来提供它们。由于较大项目的要求,扩展编写者将使用 Hibernate,如果这有什么不同的话。

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

4

3 回答 3

4

嗨,我建议使用 Spring Framework。它提供了一种很好的方式来汇集您正在谈论的许多不同的服务。

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

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

Spring确实有事务管理。您可以使用 Apache DBCP 在应用程序上下文中定义一个数据源(使用 aorg.apache.commons.dbcp.BasicDataSourceorg.springframework.jdbc.datasource.DataSourceTransactionManager作为数据源。之后,如果您将 TransactionManager 传递给应用程序中的任何对象,则可以通过编程方式定义自己的事务,或者您可以在对象的定义上使用 AOP 拦截器在您的应用程序上下文中,定义哪些方法需要在事务中运行。

或者,现在使用 Spring 更简单的方法是在需要在事务中运行的任何方法中使用 @Transactional 注释,并将类似这样的内容添加到您的应用程序上下文中(假设您的 transactionManager 名为 txManager):

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

这样,您的应用程序稍后将轻松接受新组件,只需使用 @Transactional 注释或通过 PlatformTransactionManager 直接创建事务,它们将通过 setter 接收(因此您可以在定义对象时传递它)在您的应用程序上下文中)。

于 2009-04-23T14:39:41.433 回答
1

您可以在 J2SE 环境中尝试用于 Java 事务管理和连接池 (JDBC+JMS) 的Atomikos TransactionsEssentials 。不需要任何应用服务器,使用起来更有趣;-)

HTH 家伙

于 2009-06-02T20:36:46.390 回答