2009-04-22 2 views
0

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

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

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

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

ответ

1

Spring имеет управление транзакциями. Вы можете определить источник данных в контексте вашего приложения с помощью 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, что они будут получать через сеттер (так вы можете передать его, когда вы определяете объект в контексте приложения).

4

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

Например, чтобы решить ваши конкретные потребности:

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

+1 - Отлично. Мне жаль, что я не видел его первым. – duffymo

+0

Хороший ответ, но Quartz предназначен для планирования не нарезания резьбы. Конечно, он использует потоки, но его функция - планирование. Тем не менее, хороший ответ. – Robin

+0

К сожалению, аспект, который вы затушевывали: «Я считаю, что весна имеет какую-то транзакционную транзакцию mgmt» - это самая сложная часть того, что я делаю, и тот, с которым мне нужно столкнуться, прежде чем выбирать рамки. Я уже рассматриваю Spring, но мне нужно знать, способен ли он поддерживать систему, которую я хочу построить. –

1

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

HTH Guy

+0

Вы немного сосредоточены, Гай :) Вы ответили на три моих вопроса именно этим ответом. Уверен, что вы были участником сайта, когда мне, наконец, пришлось выбрать решение; Atomicos выглядит неплохо, но инфраструктура уже выбрана. –