Как мне написать приложение, которое более или менее действует как контейнер? - PullRequest
0 голосов
/ 23 апреля 2009

Я планирую приложение, которое должно предоставлять сервисы, которые очень похожи на сервисы контейнера Java EE для стороннего кода расширения. По сути, это приложение находит набор рабочих элементов (в настоящее время планируется использовать Hibernate) и отправляет их потребителям рабочих элементов.

Потребители рабочего элемента загружают сведения об элементе, вызывают сторонний код расширения, а затем, если сторонний код не вышел из строя, обновляют состояние рабочего элемента и фиксируют всю выполненную работу.

Я явно не пишу это как приложение Java EE. По сути, мое приложение, однако, должно предоставлять многие услуги контейнера; он должен обеспечивать управление транзакциями, пул соединений и управление ими, а также определенную поддержку развертывания. Как мне A) предоставить их напрямую или B) выбрать стороннюю библиотеку для их предоставления. Из-за требования более крупного проекта разработчики расширений будут использовать Hibernate, если это будет иметь какое-либо значение.

Стоит отметить, что из всех упомянутых мною функций менее всего я знаю управление транзакциями. Как я могу предоставить эту услугу для кода расширения, работающего в моем контейнере?

Ответы [ 3 ]

4 голосов
/ 23 апреля 2009

Привет, я рекомендую использовать Spring Framework. Это хороший способ объединить множество различных услуг, о которых вы говорите.

Например, для удовлетворения ваших конкретных потребностей:

  1. Управление транзакциями / Пул соединений
    • Я создал отдельное приложение на основе Spring, которое использовало пул соединений Apache commons. Также я считаю, что в Spring встроена какая-то транзакция mgmt.
  2. Поддержка развертывания
    • Я использую ant для развертывания и запуска вещей в качестве фронтального загрузчика. Это работает довольно хорошо. Я просто запускаю отдельный процесс, используя ant для запуска моего отдельного приложения Spring.
  3. Threading.
    • Spring имеет поддержку Quartz, которая хорошо работает с потоками и пулами потоков
  4. DAO
    • Spring прекрасно интегрируется с Hibernate и другими подобными проектами
  5. Конфигурация
    • Использование определений свойств xml - Spring довольно хорош для конфигурации с несколькими средами.
1 голос
/ 03 июня 2009

Вы можете попробовать Atomikos TransactionsEssentials для управления транзакциями Java и пула соединений (JDBC + JMS) в среде J2SE. Нет необходимости в каких-либо приложениях, и работать с ним гораздо веселее; -)

НТН Guy

1 голос
/ 23 апреля 2009

Spring имеет управление транзакциями. Вы можете определить DataSource в контексте вашего приложения, используя Apache DBCP (используя org.apache.commons.dbcp.BasicDataSourceorg.springframework.jdbc.datasource.DataSourceTransactionManager для DataSource. После этого любой объект в вашем приложении может программно определять свои собственные транзакции, если вы передадите ему TransactionManager, или вы можете использовать перехватчики AOP на определение объекта в контексте приложения, чтобы определить, какие методы нужно запускать внутри транзакции.

Или более простой подход в Spring в настоящее время состоит в том, чтобы использовать аннотацию @Transactional в любом методе, который необходимо запустить внутри транзакции, и добавить что-то подобное в контекст приложения (при условии, что ваш TransactionManager называется txManager):

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

Таким образом, ваше приложение будет легко принимать новые компоненты позже, которые могут иметь управление транзакциями, просто используя аннотацию @Transactional или напрямую создавая транзакции через PlatformTransactionManager, который они получат через установщик (так что вы можете передать его, когда вы определить объект в контексте вашего приложения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...