Foros del Web » Programación para mayores de 30 ;) » Java »

Integración PHP / Java a través de Webservices

Estas en el tema de Integración PHP / Java a través de Webservices en el foro de Java en Foros del Web. Estoy investigando esta área y quisiera conocer experiencias o alguna sugerencia sobre materiales o artículos al respecto (este tema también lo pregunto en el área ...
  #1 (permalink)  
Antiguo 10/03/2007, 09:12
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Integración PHP / Java a través de Webservices

Estoy investigando esta área y quisiera conocer experiencias o alguna sugerencia sobre materiales o artículos al respecto (este tema también lo pregunto en el área POO de PHP).

La idea es construir un sitio web basado en PHP y a través de webservices (soap) acceder a la "capa de dominio" desarrollada enteramente en Java.

He realizado algunas pruebas sencillas y han funcionado sin problemas, accediendo a un webservices implementados en Java al estilo:

Código PHP:
$client = new SoapClient("http://sitio.com/Calculator.wsdl");

echo 
$client->hola("hola mundo"); 
Lo único que hace es devolver "tu has dicho 'hola mundo'", pero se empieza a complicar cuando quiero pasar valores tipados como fechas, pues Java espera algo del tipo "Date".

Pero tengo las siguientes dudas (no tengo experiencia en el tema):
  • ¿Cual es la forma para trabajar con los tipos de datos de ambos mundos? PHP es tipado dinámico y no 100% OO, lo opuesto a Java
  • ¿Se puede implementar un acceso transparente a las clases disponibles en Java? puedo pasar objetos de un lado a otro, o debo usar alguna otra estrategia para poder hacerlo así?

Tal vez debe manejar todo como String y rearmarlos del lado de Java.

¿Sugerencias, experiencias?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 10/03/2007 a las 09:22
  #2 (permalink)  
Antiguo 12/03/2007, 06:03
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Integración PHP / Java a través de Webservices

Hola enriqueplace,

Los webservices son como bien sabrás independiente de la tecnología usada en cliente y servidor. Si tienes servicios en java que esperan un objeto Date como fecha, échale un vistazo al wsdl para ver como se formatean estos parámetros en el mensaje SOAP. Seguramente se traducirá como un string que representa a la fecha y que debe estar en un formato determinado que luego las librerias que estes usando en el lado Java se encarguen de decodificar.

Un Saludo
  #3 (permalink)  
Antiguo 12/03/2007, 13:49
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Re: Integración PHP / Java a través de Webservices

Gracias, tienes toda la razón. Voy a explicar un poco mejor ahora que tengo más información y voy entendiendo el problema.

Por donde viene mi confusión:

Tengo el concepto sobre WS y así lo he usado las veces que lo he necesitado: trabajar en bruto con datos entregados como "cadena de texto", en la mayoría de los casos en formato "xml".

La situación que me plantea mi contraparte (experta en Java, ignorante en PHP) es que de su lado trabaja con DTOs (Data Transfer Object) y me argumenta que yo debería poder recibir y hasta enviar DTOs de un lado a otro (yo, conocedor de PHP, no experto ni en WS ni en Java ).

Aquí es donde me pierdo, y no sé si es posible, y de que forma. He buscando información pero sin éxito.

PD: estoy haciendo la misma pregunta en el foro de PHP pues muchas veces los que saben PHP ignoran el mundo Java y viceversa, por lo tanto estoy viendo de unir las partes.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 12/03/2007, 15:30
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Integración PHP / Java a través de Webservices

Ummmm.... la idea básica de los WS, como bien dijo Valkam, es que la comunicación sea independiente del lenguaje utilizado a cada lado, así que el concepto de enviar "DTOs" de Java "no tiene sentido". Me explico, sea como fuere que la contraparte lo genere, a ti te tiene que llegar un XML, tu lo has de poder tratar y has de generar un XML de respuesta, o viceversa, pero siempre pensando que tu te comunicas en XML. No tendría que depender en ningun momento de como está implementada la otra parte, si no, algo falla.

Teoricamente, tu lo unico que necesitas saber es el WSDL del servicio web y con eso has de poder trabajar. Si la otra parte usa DTOs, esta escrita a pelo en GWBasic o hay un tió con un ábaco calculando los bytes a enviar, , debería darte igual.

Eso sí, hasta aquí la teoría. En la realidad resulta que muchas veces las implementaciones para "ayudar" a realizar web services en cada lenguaje condicionan muy especificamente el WSDL que se genera, llegando a casos donde es muy complicado por la otra parte interpretar fácilmente los datos e imposible usando la "implementación de ayuda" análoga en el otro lenguaje. Quizá este sea tu caso, no lo se.

Por ejemplo, si transformas en su equivalente XML un TreeMap e Java, con ordenación, y se lo pasas a un lenguaje donde ese tipo de objeto no exista "por defecto"... ¿Como va a saber reconstruirlo automaticamente?

Por eso para las interacciones entre varios lenguajes se suele recomendar "simplificar" las cosas para que sean algo fácil de tratar en todos los lenguajes.

Eso si, el tipo fecha no debería dar problemas, digo yo .

S!
  #5 (permalink)  
Antiguo 12/03/2007, 20:47
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Re: Integración PHP / Java a través de Webservices

Si, esa es la sensación que tuve desde el principio, pero como todo tema que uno no domina, por lo menos dejo el "beneficio de la duda"

Este vendría a ser el diagrama con la arquitectura que me plantean:

__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 13/03/2007, 01:35
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Integración PHP / Java a través de Webservices

No soy un experto en PHP, pero viendo el esquema da la impresion de que una imagen es una copia de la otra cambiando los nombres, y dado que PHP y Java no son lo mismo... pues no parece que nadie se haya estudiado realmente las diferencias en los dos lenguajes para ver de que forma aprovechar mejor las características de cada uno .

Para empezar el diagrama parece presuponer orientacion a objetos en PHP, lo cual dentro de mi ignorancia me parece que no es un tema maduro del todo y ya te obliga a usar unas determinadas versiones con algunas peguillas. Al menos eso me dicen mis compañeros que si usan PHP.

Independientemente de todo esto, construir una aplicacion web a base de utilizar una tecnología en la interfaz y comunicarse con web services con el "back-end" es, en la inmensa mayoría de casos por no decir todos, buscarse complicaciones y tirar por la ventana el rendimiento. Algo a hacer cuando no queda otro remedio. Aunque admito que esa es una opinión práctica y no queda muy "cool" .
  #7 (permalink)  
Antiguo 13/03/2007, 02:40
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Integración PHP / Java a través de Webservices

Interesantísimo debate el de este hilo en el que me gustaría dar mi opinión otra vez. GreenEyed (por lo que llevo viendo en el poco tiempo que sigo el foro, crack donde los haya) tiene toda la razón. La arquitectura que planteas no deja de ser un tanto curiosa. La comunicación via Web Services no es lo más rápido del mundo y es la primera vez que veo distribuir la capa de presentación y comunicarla mediante Web Services independientemente de los lenguajes que estés utilizando.
Pero bueno, seguro que al final existe una buena razón para ello. Centrándonos en el tema PHP NO es orientado a objetos. No esperes obtener réplicas de los Transfer Objects al tratar el XML en PHP por que seguramente tendrás que montarte a mano "objetos" PHP que los emulen. Por otro lado como ya te han comentado no puedes reconstruir objetos complejos de Java mediante NuSoap en PHP. Si los Transfer Objects son medianamente complejos, te va a requerir un esfuerzo importante de programación reconstruirlos en el lado PHP.
Mi consejo es que simplifiqueis al máximo posible los datos a comunicar entre ambas capas. Olvidaos un poco de replicar los objetos e iros a tipos básicos: string, enteros y como mucho arrays

Un Saludo
  #8 (permalink)  
Antiguo 13/03/2007, 07:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Integración PHP / Java a través de Webservices

En caso necesario, como he dicho cuando hay no más remedio, otra opción en caso de encontrar poca salida con Web Services podría ser usar CORBA para comunicar ambos lenguajes. Como lleva más tiempo por el mundo, quizá sea algo más maduro y, aunque el rendimiento tambien lo notará bastante, al menos no es tan pesado como los WS.

Aunque una busqueda en Google sobre PHP y CORBA no parece muy alentadora.... Ahí te podrán decir más cosas los expertos en PHP. Quizá sean mejor los WS...
  #9 (permalink)  
Antiguo 13/03/2007, 09:10
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Re: Integración PHP / Java a través de Webservices

Les comparto nuestros avances y pruebas:

Código PHP:
<?php

class Cliente{
    public 
$nombre;
    public 
$direccion;
    function 
__construct($n,$d){
        
$this->nombre $n
        
$this->direccion $d
    }
}
$clientSoap = new SoapClient("http://sitio.com:8080/WSFinancialFacade?wsdl ");

$unCliente = new Cliente("enrique""parque posadas");

$unObjetoRetornado $clientSoap->hola$unCliente ) ;

var_dump($unObjetoRetornado);

echo 
"Retorno: ".$unObjetoRetornado->nombre;

?>
Resultado

Código PHP:
object(stdClass)#4 (2) { 
   
["nombre"]=>  string(20
   [
"direccion"]=>  string(20
}

RetornoMi nombre es "enrique" 
Otras pruebas

Código PHP:
var_dump($clientSoap->__getFunctions()); 
Retorna

Código PHP:
array(1) { 
   [
0]=>  string(27"Cliente hola(Cliente $c)" 

Ejecuto

Código PHP:
var_dump($clientSoap->__getTypes()); 
Retorna

Código PHP:
array(1) { 
   [
0]=> string(53"struct Cliente { string nombre; string direccion; }" 

Resumiendo

Se logra a través del wsdl armar algo de lo que está del lado del servidor, pero dinámicamente. Según me comenta mi colega en java tiene la opción de hacer wsdl2java (o algo similar) y generar estáticamente la estructura del lado del cliente (como un cabezal), así, si quiere usarla sabe como hacerlo sin tener que solicitar información extra. En el caso opuesto (php), estaríamos armando siempre dinámicamente la estructura pero de forma incompleta (mucho menos información).

Los DTOs sería en este caso la clase Cliente que viaja por el WS.

¿No estamos tan lejos ni tan mal, no?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 13/03/2007, 11:03
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Integración PHP / Java a través de Webservices

Jejeje. No, esta muy bien. Las "pegas" que yo le veo son desde el punto de vista de rendimiento, usar WS para comunicarse internamente es mucho "overhead", y que en caso de querer pasas objetos complejos, la cosa puede complicarse mucho.

Pero vamos, la teoría de los WS es esa, generar un WSDL, que ambos lados respeten esa "especificación" y a volar.

Si manteneis la idea de objetos simples, como los que muestras, y el rendimiento no os da problemas, pues adelante.

Ahora en modo curioso, ¿Puedes comentarnos un poco las razones para hacer una combinación tan poco frecuente?

Ojo que no pido "justificaciones", cada uno solventa sus problemas como puede y quiere, sólo es curiosidad por saber los motivos y si me encuentro en una situación similar y es una solución viable, poder aplicarla teniendo ya un "precedente". Siempre es bueno aprender cosas nuevas, sobretodo si funcionan .

Por otro lado, me habían comentado que la versión de PHP que da soporte a objetos tenia algunos problemillas, modulos de apache con algunos bugs pendientes o así, ¿Que experiencia estais teniendo vosotros? Aunque bueno, en vez de eso quizá debiera pasarme por el foro de PHP a ver, jejeje.

Un saludo y gracias por tenernos informados .
  #11 (permalink)  
Antiguo 14/03/2007, 02:40
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Integración PHP / Java a través de Webservices

Cita:
Iniciado por enriqueplace Ver Mensaje
¿No estamos tan lejos ni tan mal, no?
Bueno, no es por meter el dedo en la yaga , pero la respuesta a esa pregunta creo que sería: "depende de lo que querais hacer"
Estas mostrando objetos simples que en definitiva son casi como structs. Habría que ver que pasa si teneis objetos cuyos atributos sean otros objetos, etc...

Pero yo creo que el objetivo principal lo estais cubriendo. Al fin y al cabo conseguís distribuir la lógica de negocio y comunicarla con la interfaz con Web Services y conseguís intercambiar información mas o menos compleja entre ambas capas. Mientras puedas enviarle los valores de los atributos de los DTO a la fachada y que esta se encargue de reconstruir los objetos con toda la complejidad que puedan tener, perfecto
  #12 (permalink)  
Antiguo 16/03/2007, 05:31
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Re: Integración PHP / Java a través de Webservices

Cita:
Jejeje. No, esta muy bien. Las "pegas" que yo le veo son desde el punto de vista de rendimiento, usar WS para comunicarse internamente es mucho "overhead", y que en caso de querer pasas objetos complejos, la cosa puede complicarse mucho.
Sí, lo que estoy viendo ahora es de "automatizar" que baje el WSDL y no que lo consulte constantemente, pues ahí aumenta innecesariamente el tráfico cuando el WSDL no va a recibir cambios.

Cita:
Ahora en modo curioso, ¿Puedes comentarnos un poco las razones para hacer una combinación tan poco frecuente?
La idea ya me la habían planteando desde distintas empresas, era aprovechar la existencia de arquitecturas Java por un lado y por otro una aplicación web en PHP, y su única "integración" era usar la misma base de datos. En ambos mundos ya contaban con horas de desarrollo invertido, por lo tanto buscaban aprovechar lo existente, principalmente desde PHP usando la "capa de negocio" desarrollada en Java.

Cita:
Ojo que no pido "justificaciones", cada uno solventa sus problemas como puede y quiere, sólo es curiosidad por saber los motivos y si me encuentro en una situación similar y es una solución viable, poder aplicarla teniendo ya un "precedente". Siempre es bueno aprender cosas nuevas, sobretodo si funcionan .
No hay problema, mi estrategia es dar siempre sin esperar nunca nada a cambio, lo cual me ha dado siempre muchas satisfacciones

Cita:
Por otro lado, me habían comentado que la versión de PHP que da soporte a objetos tenia algunos problemillas, modulos de apache con algunos bugs pendientes o así, ¿Que experiencia estais teniendo vosotros? Aunque bueno, en vez de eso quizá debiera pasarme por el foro de PHP a ver, jejeje.
A pesar que trabajo fundamentalmente en PHP5, y originalmente las pruebas fueron hechas en esta versión (lo cual todo se vuelve más sencillo) tuve que traducir los ejemplos a PHP4+Nusoap a solicitud de los clientes (dio un poco de trabajo pero se pudo lograr) .

Cita:
Un saludo y gracias por tenernos informados .
De nada, a las órdenes.

PD: luego voy a escribir sendos artículos sobre el tema pues en mi búsqueda de información no encontré nada concreto que me explicara justamente lo que logramos hacer en muy poco pasos.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 16/03/2007 a las 07:09
  #13 (permalink)  
Antiguo 18/03/2007, 14:16
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Re: Integración PHP / Java a través de Webservices

Cita:
Iniciado por enriqueplace Ver Mensaje
Sí, lo que estoy viendo ahora es de "automatizar" que baje el WSDL y no que lo consulte constantemente, pues ahí aumenta innecesariamente el tráfico cuando el WSDL no va a recibir cambios.
Eso estaría bien, sobretodo en casos donde el tráfico sea habitual, como parece el caso, si cada vez se ha de bajar el WSDL, auch. No se si se puede hacer que lo consulte localmente, como a veces he hecho con los DTD, y luego hacer un proceso, automatico o manual, que de vez en cuando compruebe si hay nueva versión y actualice la versión local.

Cita:
Iniciado por enriqueplace Ver Mensaje
La idea ya me la habían planteando desde distintas empresas, era aprovechar la existencia de arquitecturas Java por un lado y por otro una aplicación web en PHP, y su única "integración" era usar la misma base de datos. En ambos mundos ya contaban con horas de desarrollo invertido, por lo tanto buscaban aprovechar lo existente, principalmente desde PHP usando la "capa de negocio" desarrollada en Java.
Umm, es una solución, principalmente cuando ya hay bases de código establecidas, pero lo que me escama es que los WS están pensados para comunicaciones con granularidad grande, donde su pobre rendimiento no es un obstáculo y no hay más narices, pero para comunicaciones de aplicaciones internas donde hay muchas llamadas con pocos datos, este tipo de soluciones no suele escalar muy bien. En Java ya hubo una fiebre parecida con los EJB y las llamadas remotas, y se vio que para muchos casos no era nada recomendable, puesto que el proceso de "marshalling/unmarshalling" (montaje/desmontado) de los datos y envió por la red no escala muy bien... o lo hace a costa de muchos recursos.

Si haces pruebas de rendimiento, me interesaría saber que tal va la cosa puesto que a veces la realidad te sorprende .

De todos modos, recalcando que "para muchos casos" no son todos, así que si en el vuestro os saca del apuro y os da el rendimiento necesario, perfecto. Otra opción que ha aparecido ultimamente sería ejecutar la parte PHP dentro de un contenedor de servlets, con lo que incluso se gana en seguridad, y utilizar mecanismos de comunicación internos/directos para comunicarse con las librerías Java de la lógica de negocio. Quercus, de Caucho (http://quercus.caucho.com/), es un ejemplo de este tipo de soluciones que están saliendo y podría ser una opción a considerar, en caso de que por A o B los WS no os sirvieran.

Ahora que con Java 6 se pueden ejecutar lenguajes de script directamente sobre la JVM, incluido PHP, se verán más soluciones mixtas, que pueden servir para algunos casos.

Cita:
Iniciado por enriqueplace Ver Mensaje
A pesar que trabajo fundamentalmente en PHP5, y originalmente las pruebas fueron hechas en esta versión (lo cual todo se vuelve más sencillo) tuve que traducir los ejemplos a PHP4+Nusoap a solicitud de los clientes (dio un poco de trabajo pero se pudo lograr) .
Ajá, en ese caso no tendreis POO en la parte de PHP...¿No? Pero bueno, si manteneis estructuras simples tampoco ha de ser un problema.

Cita:
Iniciado por enriqueplace Ver Mensaje
PD: luego voy a escribir sendos artículos sobre el tema pues en mi búsqueda de información no encontré nada concreto que me explicara justamente lo que logramos hacer en muy poco pasos.
Eso está muy bien, si nos pones la dirección podemos darle algo de publicidad, en javaHispano por ejemplo, y si te animas y escribes una versión en inglés yo me encargo de que se publique en java.net .

Un saludo.
  #14 (permalink)  
Antiguo 09/04/2007, 20:28
 
Fecha de Ingreso: abril-2007
Mensajes: 2
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Integración PHP / Java a través de Webservices

Hola amigos, me ha gustado mucho sus explicaciones y me ha interesado el tema, yo me pregunto si ustedes tienen algun ejemplo de como crear un web service en php y consumirlo desde un cliente en java, algo simple....

Si ustedes conocen algun ejemplito sencillo por favor , me es necesaria para mi trabajo de tesis.........

Saludos..................
  #15 (permalink)  
Antiguo 06/03/2008, 14:01
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años
Puntos: 1
Re: Integración PHP / Java a través de Webservices

holas me parece bien todo solo que no muestras el ejemplo completo osea como es que se contectan java y php
el metodo
Cita:
$cliente->hola(); osea hola()
es el servicio web que se consume del otro lado ?
plis expliquenme esto lo necesito
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:09.