Consulta sobre posibles alternativas a Java Web Start

Iniciado por AlbertoGLR, 7 Febrero 2015, 20:37 PM

0 Miembros y 1 Visitante están viendo este tema.

AlbertoGLR

Hola a todos,
¿Alguien me sabría indicar si existe alguna alternativa al uso de JWS?
El objetivo es crear en java una aplicación web clásica de gestión.
Llevo algún tiempo probando con este sistema pero me gustaría saber si existe otro 'mejor' antes de ponerme de lleno.
Gracias.


Usuario Invitado

Si vas a desarrollar una aplicaciòn web pues usa el API de Java para Web. Estudia sobre Servlets, JSP o en su lugar Thymeleaf, Estudia sobre requests y responses, cookies y sessions, javascript y CSS. Con lo anterior seras capaz de construir aplicaciones web medianamente complejas. Luego que estes mas avanzado comienza a estudiar Frameworks como Spring MVC o JSF.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

AlbertoGLR

Al menos en lo de los Servlets he acertado, ya que llevo un tiempo probando su funcionamiento, aunque al principio tenia dudas sobre si usar estos o web services, rmi, sockets...
Por otra parte entiendo que el lado del cliente se debería desarrollar en jsp en lugar del java que estaba utilizando hasta ahora, pero ¿ podría mantenerlo si el cliente mantiene sus jar's correspondientes instalados en su pc? (es por evitar que la curva de aprendizaje suba demasiado)


Usuario Invitado

JSP no es una tecnología del lado cliente, es del lado servidor, de ahí su nombre Java Server Pages. Sí, acertaste en aprender cómo funcionan los servlets y como puedes interactuar con la lógica de negocio.

Respecto a esto:

Citar¿ podría mantenerlo si el cliente mantiene sus jar's correspondientes instalados en su pc? (es por evitar que la curva de aprendizaje suba demasiado)

No entiendo. ¿JARs en el cliente? ¿Para qué? Se supone que que si haces una aplicación web es para que el cliente se limite a usarla. En todo caso, ¿Para qué deseas JARs en el cliente?

CitarServidor -> Servlets, JSPs, Java.
Cliente -> CSS, javascript, HTML.

El cliente (browser) lo único que renderiza es la "página" web, HTML y CSS, además de ejecutar el código javascript. El resto lo hace el lado servidor.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

AlbertoGLR

Tienes razón Gus, no lo he explicado bien.
Una de las opciones es, como tú bien dices, Servlets JSP's y java del lado del servidor y javascript, .... del lado del cliente. Y la otra opción que intentaba explicar es, sin ser una aplicación web aunque si accediendo a los datos del servidor via internet, colocar Servlets en el servidor y el resto de jar's en el cliente, evitando el JWS pero trabajando prácticamente igual.

Usuario Invitado

En primer lugar, esa tarea se complica porque un Servlet accede al contextPath de la aplicación, osea, la raíz (/), pero ésta está en el servidor.



Tomando como referencia la imagen de arriba, ¿Cómo vas a acceder al directorio del cliente y ejecutar los JARs que están en los clientes?

La opción más cercana es usar RMI. Realmente no sé si te funcionará, nunca me he planteado algo así. Si lo intentas comenta para saber cómo te fue  :)
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

AlbertoGLR

Los jar's ya estarían descargados/instalados en el cliente, y serían estos los que harían las llamadas a los servlets para recuperar los datos de la bd del servidor.

Usuario Invitado

¿Quieres obtener los datos del servidor en el cliente?

Lo puedes hacer con un WebService REST.

Creamos un EJB que hace el CRUD:

Código (java) [Seleccionar]
@LocalBean
@Singleton
public class ProductManager {
@PersistenceContext(unitName="NOMBRE_DE_PERSISTENCIA-EN_PERSISTENCE.XML")
private EntityManager em;

public List<Product> findAll() {
List<Product> products;

try {
TypedQuery<Product> query = em.createQuery("SELECT p FROM Products p");
products = query.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
}
return products;
}

public Product find(int id) {
return em.find(Product.class, id);
}
}


Luego, en nuestro RESTful, usamos el EJB para obtener los datos de la BBDD:

Código (java) [Seleccionar]
@Path("/products")
public class ProductsService {

@Inject private ProductManager manager;

@GET
@Path("/products/all")
@Procudes("application/json")
public List<Product> findAll() {
return manager.findAll();
}

@POST
@Path("/products/edit/{i}")
public String edit(@PathParam("i") int id) {
Product product = (Product) manager.find(id);
// crear un formulario que tenga los datos del producto y lo devolvemos
String editProduct = ...
return editProduct;
}

@GET
@Path("/products/{i}")
@Produces("application/json")
public Product find(@PathParam("i") int id) {
return manager.find(id);
}

}


@Path de la clase indica la ruta base del servicio y los @Path de los métodos las rutas siguientes al de la clase.

@Produces("application/json"), indica que la llamada a dicho método devolverá la lista de productos en formato JSON.

@GET, @POST, son los tipos de peticiones.

Cuando un @Path tiene un parámeto, se debe colocar entre llaves:  {i} y para acceder a él desde el método usamos la anotación @PathParams("i"), que indica que dicho parámetro del método es el parámetro enviado en la URL.

Por ejemplo, para obtener el producto con índice 5, haríamos:

http://tudominio:puerto/productos/5

Para obtener todos los productos:

http://tudominio:puerto/products


Esa es la manera más sencilla de obtener datos del servidor. Los clientes solo en su aplicación acceden al producto deseado e internamente debe llamar a dicha URL, obtener los datos en JSON y mostrarlos por ejemplo en una tabla.

En el ejemplo he usado tecnologías como RESTful (Jersey), EJB y JPA. Aunque al principio te parezca complicado, si logras enterderlo, vas a poder simplificar mucho trabajo.

Un saludo.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein