metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2008-11-14 06:52 pm

Сервера приложений

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

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

В связи с этим, имеется вопрос: если не жаба и не дотнет, и не веб-интерфейсы, а нормальная трехзвенка - субд, аппсервер, более-менее интеллектуальный клиент и все это предпочительно кроссплатформенное - на чем такое вообще писать? И какая должна быть архитектура подобной вещи, а особенно - какая модель данных, какая парадигма программирования и в каком виде гонять данные между клиентом и аппсервером, чтобы это не оказалось очередной инкарнацией СуперУниверсальнойСистемыДляВсего, на которой сделать что-либо сложнее, чем это же склепать по быстрому с нуля вручную :)

[identity profile] slonopotamus.livejournal.com 2008-11-14 08:22 pm (UTC)(link)
J2EE очень монструозна, сложна в настройке и отладке.

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

Jetty для http.
Spring для инициализации приложения, конфигурирования, обеспечения декларативных транзакций, работы с почтой и всяких мелочей.
Hibernate для ORM.
c3p0/commons-dbcp для пулинга работы с базой.
Самодельная либа AutoDAO для DAO.
Apache Wicket для веб-интерфейса.
Maven 2 для сборки.

RPC в зависимости от требований делаю либо с помощью Spring HttpInvoker (только Java<->Java, зато всего 2 строчки конфигов), либо с помощью вебсервисов (сановский jax-ws + jaxws-spring). Асинхронный RPC пока ни разу не понадобился.

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

На клиенте в любом случае опять же юзал бы Spring, для единообразия настройки. Может быть имеет смысл заюзать вебстарт, но пока руки не дошли.

Единственное чем пока в данной конструкции пока недоволен - невозможно больше одного запроса из клиента к серверу в рамках одной транзакции. Как я понимаю при Spring HttpInvoker хоть сколько-нибудь готового решения нет вообще, для вебсервисов есть WSIT, но мне пока не удалось оторвать его от глассфиша.

[identity profile] pete-by.livejournal.com 2008-11-15 12:25 pm (UTC)(link)
В целом соглашусь, можно обойтись и без JEE серверов.
Сам использую Tomcat, Spring, Hibernate/Spring JDBC + тот же Generic Dao, Spring'овские же декларативные транзакции и конфиги, Apache Commons библиотеки, куда уж без них :-). Насчет пула соединений, почему-то кажется, что в jdbc-драйверах последние пару лет есть собственные механизмы для этого. Для веб интерфейса GWT или Flex (этот больше нравится). Для сборки Maven 2 или Ant.

[identity profile] slonopotamus.livejournal.com 2008-11-15 12:35 pm (UTC)(link)
Пулы может и есть, но так получается единообразно для всех баз. И смена бд - вопрос трёх-четырёх строчек в конфиге.

[identity profile] metaclass.livejournal.com 2008-11-15 01:33 pm (UTC)(link)
Хотя, если посмотреть на quickstart от AutoDAO, все выглядит проше :)

[identity profile] slonopotamus.livejournal.com 2008-11-15 04:14 pm (UTC)(link)
Ну я постарался слегка улучшить их идею. Вот только всё никак руки не дойдут нормально задокументировать.