Более простой, чем JBoss способ иметь POJO RPC в Java с управлением сессией контейнера - PullRequest
1 голос
/ 28 декабря 2008

В настоящее время я знаю только способ выполнения RPC для POJO в Java, и я использую очень сложное решение EJB / JBoss.

Есть ли лучший способ обеспечить аналогичную функциональность с более тонким слоем (внутри или без контейнера Java EE), используя RMI или что-то, что может сериализовать и отправлять полные объекты по проводам?

В настоящее время я не заинтересован в сериализации HTTP / JSON.

EDIT : Для пояснения: я пытаюсь заменить старое решение EJB 2.1 / JBoss 4 чем-то более простым в управлении на уровне контейнера. Мне нужно иметь полный контроль над базой данных (планируя использовать iBATIS, который позволил бы мне использовать довольно сложный SQL очень легко), но единственное, что я хочу сохранить по сети:

  • Вызов методов поиска / модификации данных (здесь происходит автоматическая сериализация).
  • Прозрачный контроль сеанса (аутентификация / авторизация). Я все еще должен увидеть, как этого добиться.

Конечно, оба элемента должны работать в целом. Пользователям, не имеющим учетных данных, нельзя предоставлять доступ.

Поскольку я не очень люблю писать веб-приложения, я планирую создать графический интерфейс (Swing или SWT), который бы управлял только POJO, делал некоторые отчеты и вызывал методы из контейнера. Я хочу, чтобы сериализация была максимально простой.

Ответы [ 4 ]

2 голосов
/ 29 декабря 2008

Как почти всегда, на помощь приходит Spring . Из справочной документации вы можете прочитать главу 17. Удаленное взаимодействие и веб-службы с использованием Spring .

Есть несколько методов на выбор. Прелесть Spring в том, что все ваши интерфейсы и реализации - ванильные POJO. Проводка в RMI или что-либо еще обрабатывается Spring. Вы можете:

  1. Экспорт услуг с использованием RMI : вероятно, самый простой подход;
  2. Использовать HTTP invoker : если удаленный доступ является проблемой, это может быть лучше для брандмауэров и т. Д., Чем для чистого RMI; или
  3. Использование веб-служб , в этом случае я бы предпочел JAX-WS над JAX-RPC .

Spring имеет дополнительное преимущество в том, что он может легко и прозрачно подключить как сервер, так и клиента.

Лично я бы выбрал (2) или (3). HTTP дружественен к сети. Это легко развернуть в веб-контейнере. Долгосрочные соединения Jetty дают вам возможность использовать принудительную передачу (эффективно) через HTTP.

Все эти методы позволяют передавать сложные объекты по проводам, но в этом отношении они немного отличаются. Вам нужно подумать, будут ли ваш сервер и клиент распределяться отдельно и есть ли проблема, если вы измените интерфейс, который вам нужен для перераспределения файлов классов. Или вы можете использовать индивидуальное решение для сериализации (даже XML), чтобы избежать этого. Но это также имеет проблемы.

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

1 голос
/ 28 декабря 2008

Простой RPC - это именно то, для чего был создан RMI. Если вы создаете сериализуемый интерфейс, вы можете вызывать методы одного приложения из другого приложения.

0 голосов
/ 28 декабря 2008

Если вам нужны только объекты значений, просто убедитесь, что POJO реализуют Serializable и записывают объекты через сокеты (используя ObjectOutputStream). На приемном конце прочитайте объекты, используя ObjectInputStream. Принимающая сторона должна иметь совместимую версию POJO (см. SerialVersionUID). Протокол Гессиана / Мешковины - это: http://hessian.caucho.com/ и http://www.caucho.com/resin-3.0/protocols/burlap.xtp

0 голосов
/ 28 декабря 2008

Вы можете попробовать XStream (http://x -stream.github.io / ) поверх REST. Легко наносится на уже существующий набор pojos.

Можете ли вы дать дополнительную информацию о том, чего вы пытаетесь достичь, поскольку вы не заинтересованы в отдыхе / JSON?

...