Abordar los retos de interoperabilidad de la especificación WS-Security, Parte 3: Utilizando el EJB proxy

Incompatibilidades entre las diferentes versiones de las especificaciones de seguridad de los servicios web impiden que un cliente de la plataforma Java ™ 2, Enterprise Edition (J2EE) 1.3, se comunique con un proveedor de servicios web J2EE 1.4 cuando se solicite WS-Security. Este artículo, Parte 3 de una serie, describe como utilizar un EJB como un proxy para solucionar este problema de interoperabilidad. Se proporcionan aplicaciones de muestra.

Zeynep Latif, Software Engineer, IBM

Photo of Zeynep LatifZeynep Latif es un Ingeniero de Software Sénior en el caso de ejemplo IBM Sofware Group, La organización del laboratorio de análisis está ubicada en Research Triangle Park, Carolina del Norte. Sus áreas de especialización incluyen el desarrollo de aplicaciones portlet y J2EE, IBM Rational Application Developer, IBM Rational Software Architect para el diseño de aplicaciones.



David Leigh, Advisory Software Engineer, IBM

David LeighDavid Leigh es un Ingeniero de Software Sénior en la organización del laboratorio de análisis del Grupo de Sofware de IBM, está ubicada en Research Triangle Park, Carolina del Norte. Sus áreas de especialización incluyen IBM WebSphere Process Choreographer, la aplicación y el servidor de seguridad, alta disponibilidad, supervisión, IBM AIX®, y Linux®.



23-01-2012

Introducción

Artículos anteriores de esta serie describen un problema de interoperabilidad de nivel de especificación de WS-Security, y le ayudan a elegir un método alternativo adecuado. Este artículo se centra en la implementación del método alternativo de EJB proxy. El enfoque incluye el diseño de un proxy de servicios web EJB, que actúa como pegamento entre el cliente J2EE 1.3 y el proveedor de servicios web J2EE 1.4. comparado con el enfoque de middleware proxy descrito en un artículo anterior de esta serie, la implementación del enfoque de EJB proxy es un ejercicio de programación básica. No se necesita infraestructura middleware adicional si el nivel middleware frontal contiene un WebSphere® Application Server, Versión 6.0 o posterior, u otro servidor de aplicación J2EE que pueda soportar aplicaciones J2EE 1.4. Además, este enfoque no es tan escalable como el enfoque de middleware proxy, ya que necesita la modificación manual de cada aplicación de cliente J2EE 1.3. El enfoque EJB proxy que se describe en este artículo se utiliza más, cuando necesita una ligera, solución de bajo coste para el recinto de seguridad, prueba o situación de prueba de concepto.

El esfuerzo requerido para implementar el enfoque de EJB proxy es principalmente un trabajo de desarrollo de aplicación, aunque este método alternativo introduce otra aplicación que el equipo de operaciones debe implementar, asegurar, y gestionar. Este enfoque también necesita la participación de probadores y personal de implementación.

Los desarrolladores de aplicaciones que implementen el enfoque EJB proxy deben tener la habilidad básica en el desarrollo de servicios web y J2EE.

Este artículo describe en detalle la forma de implementar el enfoque de EJB proxy utilizando un ejemplo plenamente aplicado que usted puede desplegar en su entorno. La sección Comprensión de la solución describe el enfoque en detalle. La sección Diseño de la solución muestra como se desarrolló la aplicación de muestra proporcionada. La sección Trabajar con la aplicación de muestra describe como personalizar y ejecutar las aplicaciones de muestra en su entorno de tiempo de ejecución.

Comprensión de la solución

La solución de muestra supone que usted están intentando integrar lo siguiente:

  • Una aplicación de proveedor de servicios web J2EE 1.4 que necesite WS-Security
  • Una aplicación de cliente J2EE 1.3 que necesite invocar al proveedor de servicios web

Consulte la Figura 1 para una vista detallada del tiempo de ejecución del método alternativo de EJB proxy. En la Figura 1, la aplicación del cliente, que es un J2EE 1.3 servlet, se comunica con una aplicación EJB proxy J2EE 1.4 EJB por medio de RMI/IIOP. A continuación, la aplicación EJB proxy se comunica con la aplicación del proveedor de servicios web utilizando los servicios web y la especificación de WS-Security versión 1.0. Tenga en cuenta que la aplicación del cliente podría ser un servlet J2EE 1.3, portlet J2EE 1.3, o cualquier otra aplicación de cliente que no se puede comunicar con la especificación WS-Security versión 1.0.

Figura 1. Componentes de la solución EJBProxy
Componentes de la solución EJBProxy

Las tareas y productos necesarios para crear la solución se muestran en la Tabla 1.

Tabla 1. Tareas y productos necesarios para crear la solución
TareasEntornoRoles responsables
1. Crear una aplicación EJB proxy J2EE 1.4, incluyendo los siguientes artefactos dentro de un único proyecto J2EE 1.4:
  • Una bean de sesión J2EE 1.4
  • Un proxy de cliente de servicios web J2EE 1.4
Rational® Desarrollador de aplicaciones Desarrollador de aplicaciones
2. Si es necesario, crear una biblioteca compartida que contenga archivos de clase utilizados en el servicio web.Rational Application DeveloperDesarrollador de aplicaciones
3. Integrar la aplicación del cliente J2EE 1.3 con el bean de sesión J2EE 1.4 EJB.Rational Application DeveloperDesarrollador de aplicaciones
4. Integrar el bean de sesión EJB con el proxy del cliente del servicio web J2EE 1.4.Rational Application DeveloperDesarrollador de aplicaciones
5. Configurar la aplicación EJB proxy para WS-Security.Rational Application DeveloperDesarrollador de aplicaciones
6. Empaquetar la solución.Rational Application DeveloperDesarrollador de aplicaciones
7. Implementar y probar la unidad de la solución en tiempo de ejecución.WebSphere Application Server Ingeniero de implementación y prueba

La implementación de la Tarea 1 implica el uso de los asistentes adecuados en el Rational Application Developer para crear un bean de sesión y un proxy de cliente de servicios web. Se puede encontrar un ejemplo detallado de esto en la sección Diseño de la solución .

La implementación de la Tarea 2 depende de las necesidades de la aplicación.Si su interfaz de servicios web incluye tipos de objetos complejos, es necesario crear una biblioteca compartida para activar estos objetos complejos y que pasen entre la aplicación el cliente y la aplicación EJB proxy. Debido a que la aplicación del cliente J2EE 1.3 y la comunicación del EJB proxy utilizando RMI, estas clases de objeto deben ser serializables, lo que significa que deben implementar la interfaz java.io.Serializable . Usted puede crear las clases de datos complejas que implementan la interfaz java.io.Serializable que utilizan las opciones de generación de códigos de servicios web en el Rational Application Developer.

Tarea 4 requiere la creación de paquetes implementables para las siguientes aplicaciones:

  • La aplicación del cliente. Es necesario empaquetar de nuevo esta aplicación porque se actualiza para integrarse con la aplicación EJB proxy EJB. La aplicación del cliente puede también necesitar incluir un archivo JAR para la biblioteca compartida, si se utiliza.
  • La aplicación EJB proxy . Esta aplicación se debe empaquetar como un archivo EAR, y puede además incluir un archivo JAR para la biblioteca compartida, si se utiliza.

La implementación de la solución como se indica en la Tarea 7 requiere la implementación de las siguientes aplicaciones:

  • La aplicación del cliente
  • La aplicación EJB proxy
  • la aplicación de proveedor de servicios web sin cambiar

Diseño de la solución

En esta sección se describe cómo crear una EJB proxy adecuada que se puede utilizar para integrar sus aplicaciones de cliente y proveedor. Los siguientes fragmentos de código se toman de las aplicaciones de muestra. Se proporcionan para que pueda ver cómo aplicar este enfoque a su propia aplicación. Tabla 2 ilustra las tareas necesarias.

Tabla 2. Pasos y productos necesarios para crear la solución
TareasPasosTipo de aplicación EntornoRoles responsables
1. Crear una aplicación EJB proxy J2EE 1.4, incluyendo los siguientes artefactos dentro de un único proyecto J2EE 1.4, como EJBProxy :
  • Una bean de sesión J2EE 1.4
  • Un proxy de cliente de servicios web J2EE 1.4
  1. Completar estos pasos para crear un bean de sesión J2EE 1.4:
    1. Crear un proyecto EJB con un proyecto JAR de cliente EJB .
    2. Crear un bean de sesión EJB en el proyecto EJB, como DefaultSessionBean .
    3. Crear un método bean de sesión EJB, como public SampleOperationResponse makeWebservicesCall(String inputString) .
  2. Crear el cliente de servicios webJ2EE 1.4 en el proyecto EJB.
EJB proxy Rational Application Developer Desarrollador de aplicaciones
2. Si es necesario, crear una biblioteca compartida que contenga archivos de clase utilizados en el servicio web. Completar estos pasos para crear una biblioteca compartida:
  1. Crear un proyecto Java.
  2. Mover las clases de clientes de servicios web J2EE1.4 creados del proyecto EJB al proyecto Java.
aplicación del cliente, EJB proxy Rational Application DeveloperDesarrollador de aplicaciones
3. Integrar la aplicación del cliente J2EE 1.3 con el bean de sesión J2EE 1.4 EJB. Actualizar la aplicación del cliente para realizar llamadas EJB.Aplicación de cliente Rational Application DeveloperDesarrollador de aplicaciones
4. Integrar el bean de sesión EJB con el proxy del cliente del servicio web. Actualizar el método bean de sesión EJB, public SampleOperationResponse makeWebservicesCall(String inputString) , para realizar la llamada al servicios web.EJB proxyRational Application DeveloperDesarrollador de aplicaciones
5. Configurar la aplicación EJB proxy para WS-Security.Configurar la aplicación EJB proxy por seguridad. EJB proxyRational Application DeveloperImplementador
6. Empaquetar la solución.Crear paquetes para las siguientes aplicaciones de solución:
  • Aplicación de cliente
  • EJB proxy
  • Proveedor de servicios web
Aplicación de cliente, EJB proxy, proveedor de servicios webRational Application DeveloperImplementador
7. Implementar y probar la solución durante el tiempo de ejecución. Implementar y probar las aplicaciones de solución empaquetadas en el entorno de tiempo de ejecución Aplicación de cliente, EJB proxy, proveedor de servicios webWebSphere Application ServerIngeniero de implementación y prueba

Tarea 1. Crear la aplicación EJB proxy

Para implementar este paso:

  1. Las operaciones EJB necesarias se muestran en Tabla 2. Consulte Recursos para los enlaces a las explicaciones detalladas para implementar las operaciones relacionadas a EJB necesarias.
  2. A continuación se muestra lo básico para crear un cliente de servicios web.Consulte las secciones Visión general de la solución y Recursos para los enlaces a las explicaciones detalladas para las operaciones relacionadas de clientes de servicios web.
    • Invocar el Asistente de Cliente de Servicio Web dentro del Rational Application Developer.
    • Seleccionar Java proxy como un tipo de cliente, e introducir un URI a un WSDL en la página de selección de servicios web.
    • En la página de Configuración del entorno de cliente, seleccione la versión J2EE como 1.4 y EJB como un tipo de cliente, junto con un proyecto de cliente y un proyecto EAR.

Tarea 2. Crear una biblioteca compartida

Usted está listo para mover las clases de cliente de servicios web J2EE 1.4 una vez completada la Tarea 1 y crear un proyecto Java. Consulte la sección Recursos de explicaciones detalladas para implementar este paso. Las clases de servicio al cliente generadas se encuentran en una carpeta determinada por el espacio de nombres de destino del servicio web. A continuación se muestra una lista de archivos que hay que mover:

  • Una clase Java por cada tipo de datos complejos. El nombre de clase relacionada para la aplicación de muestra es SampleOperationResponse.
  • Un convertidor paralelo a serie, un desconvertidor paralelo a serie, y una clase ayudante por cada tipo de datos complejos, *_Ser, *_Deser y en el *_Helper. Los nombres de clases relacionados para la aplicación de muestra son SampleOperationResponse_Ser, SampleOperationResponse_Deser y en el SampleOperationResponse_Helper.
  • Un proxy de cliente y un resguardo complementario de cliente *_PortTypeProxy y en el *SOAPStub. Los nombres de clases relacionados para la aplicación de muestra son SampleOperationResponse_PortTypeProxy y en el SampleServiceSOAPStub.
  • Una interfaz y una clase de implementación para el ubicador del servidor complementario del cliente *_Service y en el *_ServiceLocator. Los nombres de clases relacionados para la aplicación de muestra son SampleService_Service y en el SampleService_ServiceLocator.
  • Clases de extensión especificas de WebSphere *_ServiceInformation. El nombre de clase relacionada para la aplicación de muestra es SampleService_ServiceInformation.

La Figura 2 muestra los archivos que fueron reubicados para la aplicación de muestra.

Figura 2. Archivos reubicados
Archivos reubicados

Moviendo las clases de clientes de servicios web provoca errores de compilación, porque los archivos J2ee.jar y webservices.jar no están en la vía de acceso de construcción Java del proyecto inicial de Java. Una biblioteca adecuada, que incluye archivos j2ee.jar y webservices.jar, se incluye en la vía de acceso de diseño Java del proyecto Java una vez completado Tarea 4. Empaquetado de las aplicaciones de la solución.

Tarea 3. Llamada a la aplicación EJB proxy desde la aplicación del cliente

Usted está preparado para realizar este paso una vez completadas las Tarea 1 y Tarea 2 Tabla 2. Esta sección explica las actualizaciones necesarias en la aplicación del cliente para invocar al EJB proxy, que a su vez, invoca al proveedor servicios web.

  1. Añadir un método que se encarga de realizar la llamada EJB proxy y de devolver un objeto complejo. Las aplicaciones de muestra de la clase Java EJBAccessBean como parte de la aplicación servlet, y utiliza el método public SampleOperationResponse ejbCall(String inputString) para realizar la llamada EJB proxy. El EJBAccessBean está ubicado en el proyecto SampleClient.
    Listado 1. Muestra de método servlet para realizar una llamada EJB
    
    /**
    * Step 1. Add required imports
    **/
    
    package test.bean;
    
        import java.util.Hashtable;
        import javax.naming.Context;
        import javax.naming.InitialContext;
        import javax.rmi.PortableRemoteObject;
    
        import com.test.SampleOperationResponse;
        import ejbs.DefaultSession;
        import ejbs.DefaultSessionHome;
        ...
    
        public SampleOperationResponse ejbCall(String inputString)
        {
            //Enterprise Bean name is: DefaultSession
            DefaultSession sampleProxy = null;
            Hashtable env = new Hashtable();
            SampleOperationResponse responseObj = null;
    
            try
            {
            
                /**
                * Step 2. Set the following JNDI environment properties in the
                *         initial context constructor and get the initial context.
                * i. java.naming.provider.url (provider URL) property that specifies the
                *       location of the registry. 
                * ii.java.naming.factory.initial which specifies the class name of the
                *       initial context factory for the registry service provider. 
                **/
            
                env.put(Context.INITIAL_CONTEXT_FACTORY,
                    "com.ibm.websphere.naming.WsnInitialContextFactory");
                env.put(Context.PROVIDER_URL, "corbaloc::localhost:2809");
    
                InitialContext initialContext = new InitialContext(env);
                ...		
    
            
                /**
                * Step 3. Perform the lookup
                **/
            
                String jndiName = "ejb/ejbs/DefaultSessionHome";	
                Object ejbObj = initialContext.lookup(jndiName);
                ...	
    
            
                /**
                * Step 4. Get the home interface for the EJB Proxy: DefaultSession.  
                **/
            
                DefaultSessionHome home = (DefaultSessionHome) PortableRemoteObject
                                            .narrow(ejbObj, DefaultSessionHome.class);
                ...
    
            
                /**
                * Step 5. Obtain the remote reference for the EJB Proxy: DefaultSession.
                **/	        
            
                sampleProxy = home.create();
                ...
            
            /**
            * Step 6. Invoke and work with the remote EJB method,
            * makeWebservicesCall(String inputString, OtherMethodParameters parameters)
            **/	
            
                responseObj = sampleProxy.makeWebServicesCall(inputString);
                ...
            }
            catch(Exception e)
            {
                System.out.println("EJBAccessBean::ejbCall() -> Caught an error with
                                            following reason: " + e.getMessage());
            }
    
            return responseObj;
        }

    Debido a que el cliente y las aplicaciones EJB proxy pueden no residir en el mismo contenedor de servidor de aplicaciones como se muestra en la Figura 1, las propiedades de contexto predeterminadas no se pueden usar para bloquear la interfaz de inicio del bean de sesión EJB .

  2. El fragmento de código coloreado en negrita que se muestra en el Listado 2 ilustra la segunda actualización para invocar el método public SampleOperationResponse ejbCall(String inputString) , que realiza la llamada EJB y devuelve el objeto complejo SampleOperationResponse en la aplicación del cliente de muestra public class SampleServlet2_3. La public class SampleServlet2_3 está ubicada en el proyecto SampleClient. está además ubicada en el proyecto SampleClient.
    Listado 2. Invocar la llamada EJB proxy
    ...
    import com.test.SampleOperationResponse;
    import test.bean.EJBAccessBean;
    ...
    
    public class SampleServlet2_3 extends HttpServlet implements Servlet
    {
        ...
    
        protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws
                                                    ServletException, IOException
        {
            ...
            displayInputPage(arg0, arg1);
            ...
        }
        ...
    
        protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws
                                                    ServletException, IOException
        {
            ...
            String inputValue = (String)arg0.getParameter("inputText");
            if (inputValue != null)
            {
                ...
            
                EJBAccessBean accessBean = new EJBAccessBean();
                SampleOperationResponse responseObj = accessBean.ejbCall(inputValue); 
                ...
            }
            ...
        }
        ...
    }

El siguiente paso en el diseño de la solución es actualizar el bean de sesión en el proyecto EJB para invocar al proveedor de servicios web utilizando la clase de proxy del cliente de servicios web generado.

Tarea 4. Llamada a la aplicación de proveedor de servicios web desde el bean de la sesión EJB

El fragmento de código que aparece en el Listado 3 muestra el método bean de sesión EJB public SampleOperationResponse makeWebservicesCall(String inputString), el cual se creó en Tarea 1 desde Tabla 2. Este método llama al proveedor de servicios web utilizando la clase de proxy de cliente del servicio web SampleService_PortTypeProxy y devuelve un objeto complejo, SampleOperationResponse, a su interlocutor. La bean de sesión EJB public class DefaultSessionBean, se ubica en el proyecto EJBProxy.

Listado 3. Invocar un proveedor de servicios web

            /**
            * Step 1. Add required imports
            **/
            import com.test.SampleOperationResponse;
            import com.test.SampleService_PortTypeProxy;
            ...

            
            /**
            * Step 2. This sample EJB method accepts a String as a method parameter, which
            * will be provided by the servlet. 
            * This method passes its method parameter to the to the Web service provider
            * and returns a SampleOperationResponse type of complex object to the
            * servlet.
            **/ 

            public SampleOperationResponse makeWebServicesCall(String inputString)
            {
                
                /**
                * Step 3. Instantiate the Web service proxy class
                * SampleService_PortTypeProxy, and invoke the Web service operation
                * sampleOperation(inputString)
                **/

                SampleService_PortTypeProxy sampleServiceProxy =
                            new SampleService_PortTypeProxy();	

                SampleOperationResponse response = null;
		
                try
                {
                    response = sampleServiceProxy.sampleOperation(inputString);
			
                }
                else
                    System.out.println("DefaultSessionBean::makeWebServicesCall() ->
                        Response String is Null");
                }
                catch(Exception e)
                {
                    System.out.println("DefaultSessionBean::makeWebServicesCall() ->
                        An error caught with the following reason" + e.getMessage());
                }
		
                return response;
            }

La Figura 3 muestra el diagrama de secuencia para visualizar cómo la aplicación del cliente invoca al proveedor de servicios web a través del EJB proxy.

Figura 3. Diagrama de secuencia de la llamada del proveedor de servicio web J2EE 1.4 desde el servlet J2EE 1.3
Diagrama de secuencia de la llamada del proveedor de servicio web J2EE 1.4 desde el servlet J2EE 1.3

Tarea 5. Configuración de la aplicación de EJB proxy para WS-Security

Consulte Recursos para explicaciones detalladas para implementar este paso.

Tarea 6. Empaquetado de las aplicaciones de la solución

En esta sección se describe cómo empaquetar los componentes de la solución, que se crearon en el entorno de Rational Application Developer.

  1. Paquete de la aplicación del cliente.

    Los siguientes archivos JAR dependientes deben empaquetarse con la aplicación del cliente:

    • El archivo JAR del cliente EJB. Este archivo JAR se generó de forma predeterminada a través de las herramientas cuando se creó la aplicación EJB proxy (ver Tarea 1 en la Tabla 2).
    • El archivo JAR que contiene la biblioteca compartida.

    Las siguientes son las tareas necesarias para el paquete de servlet, que se utiliza como la aplicación del cliente en este ejemplo del artículo:

    1. En el proyecto ServletEAR, abrir el archivo META-INF/application.xml , y hacer clic en la pestaña Module .
    2. Abrir la sección JARs de Utilidades de Proyecto, y seleccionar al proyecto de cliente EJB . A continuación seleccione el proyecto Java de la biblioteca compartida. Este paso añade dos archivos JAR en el JARs de Utilidades de Proyecto: el JARs del cliente EJB y el JAR de la biblioteca compartida.
    3. Ir al proyecto, resáltelo, y haga clic derecho. Ir a Properties > Java Jar Dependencies.
    4. En la pantalla Dependencias Java Jar , seleccione el proyecto de cliente EJB. A continuación seleccione el proyecto Java de la biblioteca compartida para añadirlo a Dependencias Java Jar .
    5. Haga clic en OK.
    6. En el proyecto Web, abrir el archivo WebContent/WEB-INF/web.xml , y haga clic en la pestaña Overview .
    7. Ir al ícono Proyectos de Biblioteca Web, y añada el proyecto de cliente EJB . A continuación seleccione el proyecto Java de la biblioteca compartida para añadirlo a Proyectos de Biblioteca Web.
  2. Paquete del cliente EJB.

    El proyecto del cliente EJB debe ser consciente de las clases de servicios web en un archivo JAR dependiente, por lo que se debe configurar el archivo JAR que contiene la biblioteca compartida. Los siguientes pasos muestran un ejemplo.

    1. Ir al proyecto de cliente EJB, resáltelo, y haga clic derecho. Ir a Properties > Java Jar Dependencies.
    2. En la pantalla Dependencias Java Jar , seleccione el proyecto de la biblioteca compartida.
    3. Haga clic en OK.
    4. El archivo para el cliente EJB se incluye en la aplicación del cliente EAR y el EJB proxy EAR.
  3. Paquete EJB proxy.

    El proyecto EJB para la aplicación EJB proxy también debe ser consciente de las clases de servicios web en un archivo JAR dependiente.

    1. En el proyecto EJB proxy EAR, abrir el archivo META-INF/application.xml , y hacer clic en la pestaña Module .
    2. Abrir la sección Project Utility JARs , y seleccionar el proyecto Java de la biblioteca compartida que incluye los archivos de clase de servicio. Este paso añade dos archivos JAR en el JARs de Utilidad de Proyecto: el JAR del cliente EJB y el JAR de la biblioteca compartida.
    3. Ir al proyecto EJB, resáltelo, y haga clic derecho. Ir a Properties > Java Jar Dependencies.
    4. En la pantalla Dependencias Java Jar, seleccione el proyecto Java de la biblioteca compartida para añadirlo a Dependencias Java Jar.
    5. Haga clic en OK.

Las aplicaciones están ahora listas para la implementación y prueba.

Tarea 7. Implementar y probar la solución

Consulte Recursos para los enlaces de las explicaciones detalladas para implementar este paso.


Trabajar con las aplicaciones de muestra

En esta sección se explica cómo desplegar las aplicaciones de muestra totalmente implementadas en el entorno de tiempo de ejecución. Para implementar las muestras, se necesita:

  • WebSphere Application Server, Versión 5.0.x o posterior, para ejecutar la aplicación del cliente.
  • WebSphere Application Server, Versión 6.0.x o posterior, para ejecutar la aplicación EJB proxy y la aplicación de proveedor de servicios web.

Estos entornos de tiempo de ejecución se deben configurar para utilizar la seguridad global, y deben estar configurados para utilizar la autenticación LTPA con la misma clave LTPA.

El primer paso para trabajar con la aplicación de muestra, es descargar los archivos proporcionados en sección Download . Los archivos son:

  • SampleProjects.zip, el cual incluye el código fuente de las aplicaciones de muestra
  • SampleService.ear, que es el archivo de archivado implementable de la aplicación de proveedor de servicios web.
  • EJBProxy.ear, que es el archivo de archivado implementable de la aplicación de EJB proxy.
  • SampleClient.ear, que es el archivo de archivado implementable de la aplicación de cliente.

Las aplicaciones de ejemplo que se proporcionan para este artículo son intencionalmente sencillas de mantener el enfoque en la comprensión de la solución EJB proxy. Las aplicaciones de ejemplo siguen el patrón de diseño Model-View-Controller (MVC), con las siguientes características:

  • aplicación de proveedor de servicios web de muestra constituye la capa del modelo de la solución. Contiene un componente EJB y un componente de servicios web. El servicios web proporciona la operación sampleOperation(inputString) . Esta operación toma un valor de cadena de caracteres de la capa del controlador y devuelve un complejo tipo de objeto SampleOperationResponse . Este tipo de datos contienen lo siguiente:
    • String serviceResponseString. El servicio web pone el valor de inputString dentro de esta cadena de caracteres de respuesta.
    • String serviceUserName. El componente EJB del servicio web introduce el nombre de usuario contenido en el contexto de seguridad actual dentro de esta cadena de caracteres de respuesta.
  • La aplicación del cliente de muestra constituye la capa controladora de la solución. Contiene un servlet J2EE 1.3 que implementa la especificación servlet 2.3 . La aplicación del cliente de muestra hace los siguiente:
    • Muestra una página de entrada para que un usuario proporcione la cadena de caracteres.
    • Llama a la aplicación EJB proxy por medio de la cadena de caracteres suministrada como el valor inputString .
    • Visualizar la llamada EJB proxy da como resultado la página de salida que se muestra en La Figura 5.
  • La aplicación EJB proxy de muestra forma parte de la capa modelo, y contiene un EJB SessionBean. La aplicación EJB proxy hace los siguiente:
    1. Aceptar la cadena de caracteres de entrada inputString que la aplicación del cliente proporciona.
    2. Invoca la clase proxy de los servicios web SampleService_PortTypeProxy, que a cambio pasa la cadena de caracteres de entrada al proveedor de servicios web por medio de la operación sampleOperation(inputString) . Esta se proporciona a través de la clase SampleService_PortTypeProxy . En respuesta, el proxy recibe un objeto de tipo de datos SampleOperationResponse .
    3. Obtiene una instancia del objeto complejo SampleOperationResponse.
    4. Devuelve la instancia del objeto complejo a la aplicación del cliente, en el que aparecen los atributos del objeto en la página de salida como se muestra en La Figura 5.
  • La aplicación de proveedor de servicios web de muestra está configurada para utilizar WS-Security con una ligera señal de Third Party Authentication (LTPA). Las señales LTPA son una manera de propagar la identidad del usuario de un cliente a un proveedor de servicios web. Al devolver y mostrar el nombre de usuario del contexto de seguridad actual como se ve en la aplicación del proveedor de servicios, estas operaciones de muestra pueden validar que la aplicación del cliente J2EE 1.3 puede en realidad comunicarse con el proveedor de servicios web J2EE 1.4 .

Ahora está usted listo para tomar cualquiera de las siguientes acciones una vez descargados los archivos proporcionados:

  • Ejecutar las aplicaciones de muestra en el WebSphere Application Servers como se muestra en la Figura 1. Completar las tareas 1-6 para personalizar y ejecutar las aplicaciones de muestra de forma remota como aparece en la siguiente lista.
  • Ejecutar las aplicaciones de muestra localmente en el mismo WebSphere Application Server. Saltar las Tareas 1-3, y seguir las Tareas 4-6, como se muestra en la siguiente lista.

Las tareas necesarias para ejecutar las aplicaciones de muestra de forma local o remota son las siguientes:

  1. Importar el código fuente de las aplicaciones de muestra al espacio de trabajo del Rational Application Developer.
  2. Actualizar los archivos fuente necesarios para reflejar los nombres de host en el entorno de tiempo de ejecución.
  3. Paquete de los componentes de la solución.
  4. Implementar las aplicaciones dentro del tiempo de ejecución.
  5. Configurar la seguridad en el WebSphere Application Server.
  6. Ejecutar las aplicaciones de muestra.

la siguiente sección describe estas tareas en detalle.

Tarea 1. Importar el código fuente de las aplicaciones de muestra

El código fuente para las aplicaciones de muestra, el cual se compone de varios artefactos, como se muestra en la Tabla 3, se encuentra en el archivo SampleProjects.zip . La función de exportación de Intercambio de Proyectos del Rational Application Developer se utiliza para exportar el código fuente de la solución en el archivo SampleProjects.zip, así que este código fuente puede ser fácilmente importado a otro espacio de trabajo de Rational Application Developer.

  1. Haga clic en File > Import, y seleccione Project Interchange.
  2. Haga clic en Next. A continuación, proporcione la ubicación del archivo zip, y seleccione los proyectos suministrados.
Tabla 3. Lista de artefactos de aplicaciones de muestra
Tipo de aplicación Tipo de proyecto Nombre del proyecto Descripción
Proveedor de servicios web Proyecto EAR SampleServiceEAREste proyecto incluye el archivo application.xml .
Proveedor de servicios web Proyecto EJB SampleServiceEJBEste proyecto incluye el bean de sesión SampleServiceBean.
Proveedor de servicios web Proyecto Java SampleServiceEJBClient Este proyecto incluye las siguientes clases:
  • Una interfaz remota de el bean de sesión SampleService
  • Una interfaz de inicio de el bean de sesión SampleServiceHome
  • Una interfaz local de el bean de sesión SampleServiceLocal
  • Una interfaz de inicio local de el bean de sesiónSampleServiceLocalHome
Proveedor de servicios web proyecto WebSampleServiceWebEste proyecto incluye los servicios web relacionados con las clases, incluyendo una clase Java para el tipo de datos complejos definidas en el WSDL para que se transfieran al y desde el servicio SampleOperationResponse.
EJB proxyProyecto EAR EJBProxyEAREste proyecto incluye el archivo application.xml .
EJB proxyProyecto EJB EJBProxy
  • Clases de cliente de servicios web J2EE 1.4:
    • Una clase Java para el tipo de datos complejos definidas en el WSDL para que se transfieran al y desde el servicio SampleOperationResponse
    • Un proxy de cliente de servicios web SampleService_PortTypeProxy clase
  • Una bean de sesión EJB DefaultSessionBean
EJB proxyProyecto Java EJBProxyClient Este proyecto incluye las siguientes clases:
  • Una interfaz remota de el bean de sesión DefaultSession
  • Una interfaz de inicio de el bean de sesión DefaultSessionHome
Cliente y EJB proxyProyecto Java CommonClasses
  • Este proyecto incluye la biblioteca compartida donde se ubican las clases de servicios web.
ClienteProyecto EAR SampleClientEAREste proyecto incluye el archivo application.xml.
ClienteProyecto WebSampleClient Este proyecto incluye dos tipos de clases:
  • Un servlet J2EE 1.3 creado con la especificación Servlet 2.3 SampleServlet2_3
  • Una clase ayudante para el servlet EJBAccessBean

Tarea 2 - 4. Actualización, empaquetado, e implementación de la solución de muestra dentro del tiempo de ejecución

  1. El código fuente de la aplicación del cliente y el EJB proxy deben ser personalizados para reflejar los nombres de host de el entorno de tiempo ejecución.
    1. Personalizar el public SampleOperationResponse ejbCall(String inputString) método de la EJBAccessBean. Proporcionar un nombre de host donde la aplicación EJB proxy se encuentre ubicada como una URL del proveedor, como se muestra en el Paso 2 en El Listado 1.
    2. Proporcionar un nombre de host in los siguientes archivos. Buscar la cadena de caracteres localhost, y reemplazarla con un nombre de host adecuado.
      • La clase de ubicador ubicada en el proyecto EJBProxy com.test.SampleService_ServiceLocator.java
      • El archivo WSDL ubicado en el directorio META-INF del proyecto EJBProxy sampleService.wsdl
    3. Regenerar las clases de implementación de EJB, debido a que la aplicación EJB Proxy no incluye las clases de implementación generadas.
      1. En la perspectiva J2EE, ir al proyecto EJBProxy. A continuación resaltarlo y hacer clic derecho.
      2. Seleccione Deploy.
  2. Una vez personalizados los archivos necesarios, ya está listo para crear paquetes implementables para el servlet y las aplicaciones EJBProxy utilizando los proyectos SampleClientEAR y EJBProxyEAR. A continuación, impleméntelos y también los archivos SampleService.ear proporcionados por la aplicación del proveedor de servicios web en el WebSphere Application Server.

Tarea 5. Configurar la seguridad en el WebSphere Application Server

Configurar el WebSphere Application Server así que el Active Authentication Mechanism se establece a LTPA. Haga esto haciendo clic en la opción Security and Global Security utilizado la consola de administración de WebSphere.

Tarea 6. Ejecutar la solución de muestra

Ya está listo para ejecutar la solución después de personalizar e implementar la aplicación de muestra en el WebSpherer Application Server. Los siguientes pasos enseñan como ejecutar la solución de muestra:

  1. Ejecutar el servlet en el que aparece la página de entrada, como se muestra en la Figura 4. Se le pedirá que autentique al servlet.
  2. Autenticar con cualquier ID de usuario que sea parte del registro utilizado para la seguridad global. Proporcionar una cadena de caract.
Figura 4. Página de entrada
Página de entrada

El servlet llama a la aplicación EJB proxy con la cadena de caracteres de entrada que se proporciona a la aplicación del proveedor de servicios web. A continuación, muestra el resultado devuelto por la llamada de la aplicación EJB proxy en una página de salida como aparece en la Figura 5.

Figura 5. Página de salida
Página de salida

El ID de usuario que aparece en la página de salida debe ser el mismo que usted utilizo para autenticarse en el servlet. Si este es el caso, usted puede estar seguro que la identidad del usuario cliente está siendo propagada con éxito a la aplicación de proveedor de servicios web utilizando WS-Security.


Conclusión

En este artículo describe cómo utilizar un EJB proxy para gestionar el problema de interoperabilidad del nivel de especificación de WS-Security. El enfoque EJB proxy es el más adecuado al recinto de seguridad, prueba, o situaciones de prueba de concepto en las que actualizar las aplicaciones de consumidores de servicios web a J2EE 1.4, no es una opción y en el que el coste de la configuración de un middleware proxy es prohibitivo. Este enfoque es sobre todo un ejercicio de desarrollo de aplicación directa. Los ejemplos muestran cómo gestionar algunos de las dificultades en torno a tratar con tipos de mensaje complejo.


Acuse de recibo

Los autores desean agradecer a Billy Lo y Hyen V Chung por sus comentarios y contribuciones como revisores técnicos.


Descargas

DescripciónNombretamaño
Sample projects zip fileSampleProjects.zip71KB
Sample service ear fileSampleService.ear74KB
Sample EJB proxy ear fileEJBProxy.ear93KB
Sample client ear fileSampleClient.ear104KB

Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=WebSphere
ArticleID=788303
ArticleTitle=Abordar los retos de interoperabilidad de la especificación WS-Security, Parte 3: Utilizando el EJB proxy
publish-date=01232012