Java Swing - однопользовательское приложение для многопользовательского приложения

Я новичок...... У меня есть приложение Java Swing, и оно отлично работает на моей машине. Я хочу получить доступ к этому приложению с сервера через Citrix. Поэтому, когда я нажимаю на опубликованный значок, он запускает метод main в файле jar и дает мне доступ к приложению. Это приложение сможет получить доступ к БД на сервере БД.

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

  1. Я думал о создании n потоков, доступных для n пользователей (т.е.), я могу установить ограничение на одновременный доступ. Но какой будет точка входа..... Я имею в виду, когда я нажимаю на опубликованный значок, это означает, что каждый раз будет вызываться основной метод.

  2. Я могу думать об отделении моего пользовательского интерфейса от уровня логики.... но я понятия не имею, как это сделать. Конечно, я следую модели MVC. Мой вопрос касается создания нескольких экземпляров графического интерфейса при каждом доступе к приложению.

  3. И, наконец, я хочу использовать пул соединений с БД. Итак, означает ли это, что мне нужно создать отдельную Java-программу, которая создаст этот пул, и мое приложение будет использовать его источник данных?

Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении? Я не ищу конкретные идеи, а просто идею о том, как создать это многопользовательское приложение.

1 ответ

Решение

Как правило, для многопользовательского приложения Swing вы хотите отделить "клиентскую" часть приложения от "серверного" приложения.

Это работает следующим образом:

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

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

  • Вы должны быть намного осторожнее с одновременным доступом к базе данных / потенциальным повреждением от разных клиентов, пытающихся изменить одни и те же данные в одно и то же время.
  • Вы должны разрешить соединения с вашей базой данных от клиентов, которым нельзя доверять. Это угроза безопасности.

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

Другие вопросы по тегам