Ситуация следующая.
Есть сервер с БД. Нужно дать возможность с ней работать удаленно. Есть два разработчика. Я - знаю 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 экземплярах.
Поругайте или посоветуйте что-то плз.