2010-05-17 30 views
5

Digamos que tiene un nivel de presentación en JSF, y que su nivel de negocio se accede utilizando servicios web. ¿Cómo llamarías a tus servicios web desde JSF?Llamar a servicios web desde su código JSF

Estaba considerando tener mis respaldos para llamar a los servicios web, pero pensé que podría usar Ajax con JSF para conectarme a los servicios web. ¿Qué elegirías y por qué? ¿Alguna otra opción que puedas recomendar?

EDIT: Estoy utilizando Spring en el nivel de negocios, tal vez esa información puede ayudar con las sugerencias.

Gracias.

Respuesta

10

Completaría la llamada al servicio web en una clase de servicio, a la que se accede a través del bean administrado. Por lo tanto, el front-end no sabrá exactamente cómo llegan los datos: a través de servicios web o por cualquier otro medio.

+0

+1 Estoy de acuerdo con Bozho: me gusta mantener las llamadas al servicio web en la clase de servicio y mantener la capa de presentación aislada de cualquier cambio en el servicio web que ocurra en el futuro. – elduff

+0

Gracias de nuevo Bozho, estoy tomando este enfoque. –

2

Implementaría EJB y los expondría como servicio web (para el acceso remoto independiente del idioma) dentro de la aplicación accedería a los EJB por búsqueda y los llamaría directamente (para un mejor rendimiento). Desafortunadamente, no dijiste qué plataforma estás usando, por lo que no estoy seguro de si mis sugerencias serían factibles.

+0

Estoy usando Spring en el nivel de negocios. –

3

Digamos que tiene un nivel de presentación en JSF, y que se accede a su nivel de negocio mediante servicios web. ¿Cómo llamarías a tus servicios web desde JSF?

El enfoque "clásico" sería inyectar una clase de fábrica de proxy JAX-WS (generado a partir del WSDL) en un ManagedBean:

public class ItemController { 
    @WebServiceRef(wsdlLocation = "http://localhost:8080/CatalogService/Catalog?wsdl") 
    private CatalogService service; 

    public DataModel getItems() { 
     if (model==null || index != firstItem){ 
      model=getNextItems(); 
     } 
     return this.model; 
    } 
    public DataModel getNextItems() { 
     Catalog port = service.getCatalogPort(); 
     model = new ListDataModel(port.getItems(firstItem,batchSize)); 
     return model; 
    } 
} 

muestra tomada de Sample Application using JAX-WS, JSF, EJB 3.0, and Java.

Cuestiones relacionadas