Java-приложение с клиентом для ПК, Android и IOS - PullRequest
4 голосов
/ 27 декабря 2011

Я создаю приложение с помощью Java Enterprise и Glassfish. Информация между клиентом и сервером обычно представляет собой небольшие объемы данных, но время от времени клиенту необходимо получать больший ресурс (обычно 1-20 МБ). Я все еще планирую архитектуру системы, и мне нужен совет о том, как предоставить ресурсы на сервере нескольким клиентам.

Первоначально у меня было только настольное клиентское приложение, работающее в ACC от javaws и glassfish. Я поместил удаленные интерфейсы в отдельный jar и планировал все интерфейсы клиент-сервер, вызывая методы EJB, предоставляемые через эти интерфейсы. Это все хорошо и хорошо для клиента рабочего стола Java. Это даже должно быть довольно легко для клиента Android. Но я не думаю, что это будет так просто для IOS.

Есть ли способ, которым я могу вызывать свои EJB-модули из объектива-c, работающего на iphone или ipad? Я очень на это надеюсь.

Я ожидаю, что это веб-сервис RESTful. Из того, что я понимаю, это способ свободного объединения клиентских и серверных приложений путем передачи данных в общей форме XML или JSON.

Извините, если я упускаю что-то очень очевидное, но, похоже, отсюда два пути:

  1. сохранить мой бизнес-интерфейс EJB и реализовать дублированный интерфейс restful для универсальных клиентов (iOS и все остальное, что может появиться позже).

  2. создать один интерфейс для всех клиентов.

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

Ответы [ 2 ]

7 голосов
/ 27 декабря 2011

В EJB 3.1 вы можете представить свою бизнес-логику как службу RESTful очень простым способом, например:

@Path("name")
@Stateless
public class NameService {
    @EJB
    private NameBean nameBean;

    @GET
    @Produces("text/html")
    public String getHtml() {
        return "<h2>Hello "+nameBean.getName()+"</h2>";
    }

    @PUT
    @Consumes("text/plain")
    public void put(String content) {
        nameBean.setName(content);
    }
}

Нет необходимости в сервлетах или любом другом делегате.Совершенно нормально иметь разные методы доступа для одной логики, так что некоторые клиенты Java используют EJB (RMI), а другие используют REST.В будущем вы можете даже добавить новые, если это необходимо, например, веб-сервис XML, через асинхронный обмен сообщениями и т. Д.

0 голосов
/ 27 декабря 2011

Я бы предложил вариант 2 с одной модификацией, даже не пытаясь создать веб-сервис.Используйте простой сервлет, который возвращает JSON для использования Android и iOS

...