Aplicación java-ee con escritorios, Android y ios clientes

Estoy desarrollando una aplicación con java enterprise y glassfish. La información entre el cliente y el server generalmente será pequeña cantidad de datos, pero de vez en cuando el cliente necesitará get un recurso más grande (de 1 a 20 MB sería típico). Todavía estoy planeando la architecture del sistema, y ​​necesito algunos consejos sobre cómo exponer resources en el server a múltiples clientes.

Originalmente solo iba a tener una aplicación cliente de escritorio ejecutándose en el ACC provisto por javaws y glassfish. Puse las interfaces remotas en un contenedor separado y planeé hacer todas las interfaces del server cliente llamando a los methods EJB expuestos a través de esas interfaces. Todo esto está bien y bien para un cliente de escritorio java. Incluso debería ser bastante fácil para un cliente de Android. Pero no creo que sea tan fácil para ios.

¿Hay alguna forma en que pueda llamar a mis EJB desde el objective -c ejecutándose en un iPhone o iPad? Espero que sí.

Estoy anticipando que la solución es un service web RESTful. Por lo que entiendo, esta es una forma de asociar libremente aplicaciones cliente y server pasando los datos en un formulario genérico XML o JSON.

Lo siento si me falta algo muy obvio, pero parece que hay dos routes desde aquí:

  1. mantenga mi interfaz empresarial EJB e implemente una interfaz restful duplicada para clientes generics (iOS y cualquier otra cosa que pueda popup más adelante).

  2. Crea una interfaz relajante para todos los clientes.

el número 2 parece un layout mucho más limpio, pero significa que tengo que rechazar el trabajo que ya hice y aprender sobre el descanso. ¿Puede alguien con más experiencia ofrecer algunas sugerencias? Lo agradecería mucho.

En EJB 3.1 puede exponer su lógica empresarial como un service REST de una manera muy simple, por ejemplo:

@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); } } 

No necesita servlets ni ningún otro delegado. Está absolutamente bien tener varios methods de acceso para una lógica, de modo que algunos clientes de Java usan EJB (RMI) y otros usan REST. En el futuro, incluso puede agregar algunos nuevos si es necesario, por ejemplo, el service web XML, a través de posts asíncronos y así sucesivamente.

Sugeriría la opción 2 con una modificación, ni siquiera me molestaría en crear un service web. Use un servlet simple que devuelva JSON para que lo consumn Android e iOS