LINUX.ORG.RU

[Spring] Как все организовать

 


0

1

Ситуация следующая.

Есть сервер с БД. Нужно дать возможность с ней работать удаленно. Есть два разработчика. Я - знаю Java SE, Spring и еще кучу всего. Второй разработчик знает синтаксис Java и чуть Swing.

Сервер - мощный десктопный комп. Клиенты - компы послабее. Клиентов будет может быть от силы 10, и то не одновременно.

  • Есть готовая программа на .NET. Глючная, убогая, падучая, без единого коммента, со страшными копипастами и прибитая гвоздями к Visual Studio 2008. Диагноз - переписать
  • Времени несколько месяцев в режиме один день в неделю.
  • Нужно написать очень дуракоусточивый интерфейс.
  • Нужно распаралелить работу, второй разработчик в силу небольших знаний согласен делать по примеру рутину.
  • Необходим логин с сессией. Отсюда Jax-WS может не подойти.
  • Каждый год меняются разработчики системы, потому к следующему году нужно оставить хорошо отдокументированную систему с нулем быдлокода в буквальном смысле слова. И желательно очень явную.
  • Не хочется заводить на сервере какой-то контейнер приложений.
  • Клиент должен помимо обычной работы для ввода кушать очень простые документы Excel. И помимо обычной работы в таблицах еще иногда генерировать отчеты в PDF. Хотелось бы обойтись открытыми библиотеками, которые работают даже без Excel.

Сейчас видится решение такое.

  • Написать все Entities
  • Написать интерфейс (именно intreface Java, фасад) взаимодействия сервера и клиента
  • На клиенте написать Swing гуевину и я сделаю там одну-две таблицы для примера. Второй разработчик может написать заглушку интерфейса, который просто отдает фиксированные Entities и продолжить писать гуй, пропуская сложные моменты.
  • На сервере использовать или JPA серез EclipseLink/Hibernate. Склоняюсь к EclipseLink. Или попроще заюзать аннотации JDBC 4.0 - легковесный ORM. Еще не разобрался как это дружит с Spring JdbcTemplate, или он не нужен сдесь?
  • БД использовать или MySQL, или PostgreSQL. Я разбираюсь только в MySQL и Oracle. Стоит ли копать Postgre?
  • Паралельно консультировать второго разработчика по сложным моментам гуя.
  • Соеденить клиент и сервер через RMI. По RMI как раз и отдавать сессию. Потом если будет время попытаться запустить это по SSL. С сервером то все понятно, там standalone на Spring. А вот хочется поменьше кода, потому прямо руки чешутся впаять Spring на клиенте. Но там будут иногда компы и по 512 МБ ОЗУ.
  • Также на сервере экспортировать тот же интерфейс через JAX-WS. Только не знаю как это сделать с минимальным изменениями от архитектуры выше. Проблема: в RMI можно вызвать метод login, который вернет какой нибудь Session, который в свою очередь тоже удаленный обьект. Такое не сработает с веб-сервисами. JAX-WS нужен если в будущем, не за нашу бытность, кто-то захочет написать еще какую-то морду, например веб на другой технологии.
  • Раздать клиенты по Java WebStart через Apache. Те, для кого это пишется очень не хотят бегать с флешками и обновлять софт.

Доп. вопросы

  • Насколько безопасно для длительной поддержки этого проекта оформить его в виде проекта NetBeans и GUI намышкокликать в нем же. Ох не возбуждает меня вручную ваять гуй для БД приложения с десятками окон.
  • Кажется еще был для классного отображения БД фреймворк Oracle ADF. От видео опупел, как там быстро человек наваял крутой гуй. Стоить ли начинать в нем копаться. Или проще самому написать свои универсальные гуевые JavaBeans и намышкокликать их в 10 экземплярах.

Поругайте или посоветуйте что-то плз.

★★★★★

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

И даже краткий мануал для средних Java SE кодеров, без знания Spring, как добавлять функциональность. Совсем не ожидается что в следующем году будет неожиданный наплыв Java EE Senior Developer

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

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

ACR
()

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

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

Не проще купить выбить у начальства коробочку с 1С конечно пользователи все равно будут плеваться но те кто будут это все поддерживать после тебя будут тебе благодарны, или я не правельно понял условия задачи?

ACR
()
Ответ на: комментарий от ACR

Выбить у начальства не получится ничего, это универ. Это все на полу-энтузиазме. Тем более, я не знаю студентов, которым хоть сколечки был интересен 1С. Если бы пришел и увидел 1С - я бы наверное так же и ушел бы

vertexua ★★★★★
() автор топика

>Насколько безопасно для длительной поддержки этого проекта оформить его в виде проекта NetBeans и GUI намышкокликать в нем же

Я бы не стал. Сейчас наблюдается тенденция перелезать с нативных десктопных приложений в браузер

yoghurt ★★★★★
()
Ответ на: комментарий от vertexua

Академическая проект? Почему бы тогда не сделать на лиспе будет и тебе интересней и те кто потом это увидят будут под впечатлением несколько лет.

ACR
()
Ответ на: комментарий от vertexua

Ну и конечно второй момент. Руководитель проекта, дядечка - генератор фичреквестов. На любой фазе выполнения проекта может попросить «а можна чтобы можно было вынуть, повернуть, задвинуть и повернуть защелку сбоку ногой». 1С скорее всего сольет.

Ну и конечно я писал о отсутствии быдлокода. Гениально и прекрасно написаный код на 1С - быдлокод by definition

vertexua ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

Верстальщиков нет. Интересующихся в верске нет. Какой формы будут глаза среднего Java SE студента на Spring MVC приложение в Tomcat/Glassfish?

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

> «а можна чтобы можно было вынуть, повернуть, задвинуть и повернуть защелку сбоку ногой»

Для таких дядечек разработано решение - php

ACR
()
Ответ на: комментарий от ACR

Java резко и болезненно отрезает палец за каждую строчку быдлокода. Если только произнести вслух слово php, то будет гарантия что проект будут переписывать КАЖДЫЙ год с нуля. Что кстати и происходит. Delphi->.NET+PHP. В продакшне при этом на данный момент самая первая на делфях поверх Access. Не имеет нужных фич, периодически падает. Программа на .NET - абсолютно немодульная, абсолютно неработоспособная, абсолютно недокументирована.

vertexua ★★★★★
() автор топика

Есть еще один феерический способ. Но о нем думать не хочется. Написать только клиент, удаленную базу указывать через сам JDBC. Отпадает безопасность, отпадает паралелизм разработки, хуже модульность, отпадает возможность написать другие морды

Есть плюс - меньше кода, более правильная форма глаз среднего Java SE кодера в следующем году.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от ACR

Альтернатива - сдавать ВСЕ контрольные на военной кафедре, писать ВСЕ экзамены, ПОЛОВИНУ пересдавать летом, ни и конечно ВСЕ учить

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

И да, маршировать, маршировать, маршировать...

Знаешь, после этого developers, developers, developers очень хорошая перспектива

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

> сдавать ВСЕ контрольные на военной кафедре, писать ВСЕ экзамены, ПОЛОВИНУ пересдавать летом, ни и конечно ВСЕ учить

Я бы посоветовал так и сделать, а по поводу твоего вопроса, если действительно ты так хорошо владеешь всеми перечисленными инструментами то сделай абсолютно не обращая внимания на мелочные альтернативы вроде MySQL vs PostgreSQL

ACR
()
Ответ на: комментарий от ACR

Для Java БД побоку. Через JPA - ВООБЩЕ абсолютно побоку. Я задал одновременно и важные, и простые вопросы. Полезно было бы услышать ответы на любые

vertexua ★★★★★
() автор топика
Ответ на: комментарий от ACR

>Почему бы тогда не сделать на лиспе будет и тебе интересней и те кто потом это увидят будут под впечатлением несколько лет.

В quotes, лол :)

Zloddey
()
Ответ на: комментарий от ACR

> Почему бы тогда не сделать на лиспе

кстати да, +1. и tk к этому делу привинтить.

Rastafarra ★★★★
()

то, что ты рассказал — гарантировано перепишут на следующий год

сделай че-то легковесное, типа легковесного орм-а на аннотациях (кстати, дай ссылку на это — интересно взглянуть на легковесный орм)

веб-интерфейс (и та часть sql-запросов, что проста) тоже должен генериться через аннотации к классам — это самое идеологически простое и легковесное; конкретный фреймворк не назову (т.к. сам не знаю и интересуюсь)

По RMI как раз и отдавать сессию

отдавай как-нить проще

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> орм-а на аннотациях

веб-интерфейс ... генериться через аннотации к классам

дай ссылку на это

Не знаю, всё ли я правильно понял, но первое это http://www.glorp.org , а второе - http://www.lukas-renggli.ch/smalltalk/magritte

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

лично мне статическая типизация + аннотации нравится больше динамической типизации, но щас спорить на эту тему не буду

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

веб-интерфейс (и та часть sql-запросов, что проста) тоже должен генериться через аннотации к классам — это самое идеологически простое и легковесное; конкретный фреймворк не назову (т.к. сам не знаю и интересуюсь)

Нужны проверенные решения. Нам НУЖНО ЭТО сделать. А так можно просто промахнуться с парадигмой. Для себя я бы с удовольствием поэкспериментировал.

vertexua ★★★★★
() автор топика

гуй для БД приложения с десятками окон


http://www.sql.ru/forum/actualthread.aspx?tid=798773
http://www.nakedobjects.org/oouis.html

Кажется еще был для классного отображения БД фреймворк Oracle ADF

http://www.oracle.com/us/products/middleware/index.html

«Не осилили. А вот Оракл — осилила, выпустив месяц назад Oracle Fusion Applications» rsdn.ru/forum/flame.comp/3999018.aspx

Karapuz ★★★★★
()

[жж]

Сейчас разбираюсь как запустить Spring Security вместе с RMI. Пока безуспешно. Мне бы хоть как-то сессию выдать. Через Spring это нетривиально. Зато если получится, будет много профита

vertexua ★★★★★
() автор топика

я ничего не понял. Конкретно - я не понял задания,

Есть сервер с БД. Нужно дать возможность с ней работать удаленно.

Просто свинговое приложение с полем для ввода SQL и таблицей для вывода результатов не годится?

Необходим логин с сессией. Отсюда Jax-WS может не подойти.

я реализовывал авторизацию с сессией через jax-ws. Как раз делалсь веб-сервис морда для БД. (любой БД, не конкретной). Но зачем statefull? Мне кажется, можно обойтись stateless, тогда сессия не нужна

Не хочется заводить на сервере какой-то контейнер приложений.

все таки http облее устойчивый протокол, чем транспортный уровень драйвера БД.

На сервере использовать или JPA серез EclipseLink/Hibernate. Склоняюсь к EclipseLink.

согласен

Кажется еще был для классного отображения БД фреймворк Oracle ADF.

это компоненты JSF, т.е. вебморда для веба.

БД использовать или MySQL, или PostgreSQL. Я разбираюсь только в MySQL и Oracle. Стоит ли копать Postgre?

если выбор между мускулем и постгресом, я бы выбрал постгрес. Меньше геморроя.

А вот хочется поменьше кода, потому прямо руки чешутся впаять Spring на клиенте. Но там будут иногда компы и по 512 МБ ОЗУ.

и? нормально спринг будет там подниматься.

Попробуй сделать rest api на сервере, затем к нему написать клиента - имхо, довольно хорошо в плане расширяемости.

И все таки хотелось бы услышать более точную формулировку задачи.

JFreeM ★★★☆
()
Ответ на: комментарий от vertexua

>> веб-интерфейс (и та часть sql-запросов, что проста) тоже должен генериться через аннотации к классам — это самое идеологически простое и легковесное; конкретный фреймворк не назову (т.к. сам не знаю и интересуюсь)

Нужны проверенные решения. Нам НУЖНО ЭТО сделать. А так можно просто промахнуться с парадигмой. Для себя я бы с удовольствием поэкспериментировал.


Seam генерит полноценное веб приложение, даошки и прочуб обвязку из схемы БД. Может прямо залезть в бд и оттуда взять таблицы и на их основе создать сайт-админку этих данных. Либо может генерить из entity.
http://docs.jboss.org/seam/2.2.1.CR2/reference/en-US/html/gettingstarted.html...
http://docs.jboss.org/seam/2.2.1.CR2/reference/en-US/html/gettingstarted.html...

JFreeM ★★★☆
()
Ответ на: комментарий от www_linux_org_ru

>сделай че-то легковесное, типа легковесного орм-а на аннотациях (кстати, дай ссылку на это — интересно взглянуть на легковесный орм)

по-моему, сейчас все ORM умеют как конфиги исключительно в xml, так и конфигурацию исключительно через аннотации. EclipseLink, Hibernate. Первый предпочтительнее.

JFreeM ★★★☆
()
Ответ на: комментарий от vertexua

>Для Java БД побоку. Через JPA - ВООБЩЕ абсолютно побоку.
К сожалению, только в академических проектах. А в реальности все не так, как в теории.

JFreeM ★★★☆
()
Ответ на: комментарий от JFreeM

Просто свинговое приложение с полем для ввода SQL и таблицей для вывода результатов не годится?

Для секретуток не подойдет

я реализовывал авторизацию с сессией через jax-ws. Как раз делалсь веб-сервис морда для БД. (любой БД, не конкретной). Но зачем statefull? Мне кажется, можно обойтись stateless, тогда сессия не нужна

Можно ли сделать в обычной standalone сервис jax-ws с авторизацией? Насколько толсто оно будет одавать тысячи полей БД?

все таки http облее устойчивый протокол, чем транспортный уровень драйвера БД.

А это причем? Я же отдаю по RMI уже обычные JavaBeans. Все взаимодействие с БД локально на сервере

vertexua ★★★★★
() автор топика
Ответ на: комментарий от JFreeM

Мне одинаково было, только на хибере была проблема с Orphan removal, не помню какая. Вот и свалил с него

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

Можно ли сделать в обычной standalone сервис jax-ws с авторизацией?

не знаю, я делал только под томкатом.

А это причем? Я же отдаю по RMI уже обычные JavaBeans. Все взаимодействие с БД локально на сервере

ок, понял.

JFreeM ★★★☆
()
Ответ на: комментарий от JFreeM

Не хочется заводиться с контейнерами приложений/сервлетов. Что не софтина, что не версия, новые пляски с бубном. Каждый раз, всегда и всегда новые. С переносом на другой - еще фееричнее. Ну нет у нас спецов по Java, нужно так, чтобы студенты просто открыли проект, поменяли чуть очевидного кода, собрали и запустили. Никакого дерьма с дерьмом Tomcat. Конечно если уже совсем прижмет, то может прийму во внимание стеклорыбу. Но пока постараюсь на standalone

Пускай просто люди запускают программу старым добрым java -jar и не парят себе мозги. Надо что-то поменять, пускай properties отредактируют и все.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

jetty вполне себе так и запускается. web-приложение спокойно может читать конфиги.

vorpal
()

Spring mvc может отдавать данные в xml и json, что-то есть для генерации Excel файлов и pdf. JSON - через ajax в браузере и напрямую для толстого клиента (это не пробовал). Прекрасно интегрируется со spring security. Не совсем понимаю зачем вообще нужен толстый клиент.

Вот книжка spring mvc:

http://apress.com/book/view/1430224991

расписывается по шагам, у человека со знанием Java SE, проблем возникнуть не должно.

vorpal
()
Ответ на: комментарий от vertexua

Ну нет у нас спецов по Java, нужно так, чтобы студенты просто открыли проект, поменяли чуть очевидного кода, собрали и запустили. Никакого дерьма с дерьмом Tomcat


Тогда у тебя единственный вариант, написать на VisualFoxPro.

Karapuz ★★★★★
()

Решил проблему через HttpInvoker, еще попытаюсь выпилить HttpClient из Apache Commons. Новый просто не совместим со Spring, потому нужно качать 3.0-legacy.

Сейчас пишу классы по паттерну Naked Objects ради эксперимента

vertexua ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.