Как сделать мое приложение Java Swing клиент-серверным приложением?
Я сделал приложение Java Swing. Теперь я хотел бы сделать его клиент-серверным приложением. Все клиенты должны получать уведомления при изменении данных на сервере, поэтому я не ищу веб-службу. Клиент-серверное приложение будет работать в одной локальной сети, это бизнес-приложение. Сервер будет содержать базу данных, JavaDB.
какие технологии и библиотеки проще всего начать с? Должен ли я реализовать его с нуля с помощью сокетов, или я должен использовать Java RMI, или может быть, JMS? Или есть другие альтернативы, с которых легче начать?
и есть ли какая-либо серверная библиотека, которую я должен использовать? Пирс альтернатива?
5 ответов
мины - это хороший выбор в качестве основы сетевых приложений для создания простого сервера для этой цели - это гораздо лучший вариант, чем через сырые сокеты.
Если вам действительно нужен сервер приложений, вы можете посмотреть на JBoss. Он также предоставляет компонент удаленного взаимодействия (в качестве альтернативы чему-то вроде Мина):
http://www.jboss.org/jbossremoting
У вас, вероятно, не будет большой необходимости в Корпоративные Java-Бобы хотя. В большинстве случаев простой POJO-класс based framework более чем достаточно - вы можете связать это в целом с фреймворком инъекции зависимостей, таким как Guice:
http://code.google.com/p/google-guice/
или Весна. Будь проще., не используйте сервер J2EE, если вам действительно не нужно. Надеюсь, это поможет.
учитывая, что у вас уже есть приложение, возможно, самое простое, что нужно сделать, это определить интерфейс, который вам нужен между клиентом и сервером, и, прежде всего, рефакторировать ваше приложение, чтобы использовать этот интерфейс для разговора между back-end/front-end в рамках того же процесса.
тогда вы можете начать разбивать это на части. Простым решением было бы разделить это на части с помощью RMI (так как вы говорите об объектах Java и имеете вызовы методов Java). Весна содержит полезные инструменты для упрощения / автоматизации экспозиции интерфейсов RMI.
для требования уведомления достаточно простой многоадресной передачи UDP (или широковещательной).
обратите внимание, что как только вы разделите свое приложение, у вас возникнут проблемы. поддержание согласованного представления данных, управление своевременными обновлениями, обработка случаев, когда сервер не работает, возможные проблемы с загрузкой, когда вы получаете много клиентов и т. д. В некотором смысле, разделение приложения на клиент и сервер только начало нового архитектурного процесса.
Это большая часть того, что делает J2EE, но это совершенно новая кривая обучения, потому что они предварительно решили многие проблемы, с которыми вы столкнетесь, и многие из них вы не можете и, следовательно, добавить много новых технологий.
но это самое основное, J2EE отвечает только на этот вопрос.
Я работал в таком проекте. Мы внедрили клиентский Swing и серверную сторону с J2EE. Мы использовали EJB, бобы без гражданства и бобы с сообщением.Также я был в проекте отслеживания устройств, управления. Нашими клиентами были trucks + Swing users, и мы использовали Servets + TCP / UDP,Apache Mina framework для обработки и поддержания соединений.
Я работаю в клиентских/серверных приложениях Java Swing почти 3 года. Я бы предложил вам пойти на RMI / EJBs. Первоначальное приложение, которое мы разработали, делало это, используя RMI / EJB для связи клиент-сервер с WebLogic, являющимся сервером.
но позже мы узнали, что есть много "браузерных" функций, которые должны быть включены в приложение, такие как тайм-аут сеанса и т. д. Итак, мы использовали Брайтсайд Framework, который обертывает вызовы RMI через HTTP. Еще одно улучшение, которое мы сделали, - мы заменили Weblogic на сервер JBoss с открытым исходным кодом.
упаковка вызовов с HTTP станет очень удобной, и вы можете сделать свои приложения swing действительно богатыми. Позже, когда ситуация требует от вас строго использовать веб-сайт, вы можете развернуть свой swing с помощью jnlp.
надеюсь, что это помогло.