Puente PHP/Java

6
70772

Índice de Contenidos

  1. Introducción
  2. Herramientas
  3. Instalación
    1. Instalación de PHP
    2. Instalación de Apache
    3. Instalación del puente PHP/Java
  4. Configuración
  5. Pruebas
    1. Llamada a un método Java desde PHP
    2. Llamada a un EJB desde PHP
  6. Conclusión

1. Introducción

El puente PHP/Java es un protocolo de red que permite conectar en ambas direcciones scripts en PHP con clases Java, EJB, VB.NET, C#, JRuby, etc. Es más rápido que RPC via SOAP y que JNI (Java Native Interface). Permite compartir la sesión entre páginas JSP y scripts PHP corriendo en distintos servidores. Los scripts PHP pueden correr en un servidor Apache, IIS, servidor FCGI o un Tomcat.

Enlaces de interés:

2. Herramientas

Las herramientas necesarias para la instalación en Windows son las siguientes:

3. Instalación

3.1 Instalación de PHP

Creamos un directorio en C:\PHP y descomprimimos el .zip del PHP que nos hemos descargado.

3.2 Instalación de Apache

La instalación de Apache no tiene ninguna complicación. Cuando nos pida la información de configuración del servidor introducimos lo siguiente:

  • Network Domain: localhost
  • Server Name: localhost
  • Administrator’s Email Address: una dirección de correo
  • Install Apache HTTP Server 2.0 programs and shortcuts for: All Users, on Port 80, as a Service

Finalmente si tenemos activado el Firewall de Windows nos bloqueará la ejecución del Apache por lo que debemos desbloquearlo.

3.3 Instalación del puente PHP/Java

Descomprimimos el zip en D:\servidores\php-java-bridge-3.1.8_j2ee

4. Configuración

    • Descomprimimos el JavaBridge.war (D:\servidores\php-java-bridge-3.1.8_j2ee) en el mismo directorio donde se encuentra.
    • Copiamos el JavaBridge.jar que contiene la API de conexión PHP/Java situado en D:\servidores\php-java-bridge-3.1.8_j2ee\WEB-INF\lib en C:\PHP\ext
    • Copiamos la dll java-x86-windows.dll situada en D:\servidores\php-java-bridge-3.1.8_j2ee\WEB-INF\cgi en C:\PHP\ext y la renombramos a php_java.dll para poder utilizar correctamente el puente en Windows.
    • Hacemos una copia del fichero php.ini-recommended y lo renombramos a php.ini situado en C:\PHP. Este fichero contiene las propiedades de arrranque de PHP. Añadimos lo siguiente:
      • Configuramos las extensiones dinámicas de PHP en la línea extension_dir y añadimos el path C:\PHP\ext
extension_dir = "C:\PHP\ext
      • Añadimos en Windows Extensions la dll que acabamos de copiar.
extension = php_java.dll
      • Debajo de Module Settings añadimos un módulo para la conexión con Java con las siguientes propiedades.
[java]
java.java_home ="C:\Archivos de programa\Java\jdk1.5.0_10\bin"
java.java = "C:\Archivos de programa\Java\jdk1.5.0_10\bin\javaw.exe"
java.class.path = "C:\PHP\ext\JavaBridge.jar"
java.library.path = "C:\PHP\ext"
java.log_level = 2

    • Editamos el fichero httpd.conf situado en D:\servidores\Apache2\conf y añadimos lo siguiente:
      • A continuación de AddType application/x-gzip .gz .tgz añadimos:
               AddType application/x-httpd-php .php
               AddType application/x-httpd-php-source .phps
      • A continuación de #LoadModule ssl_module modules/mod_ssl.so introducimos lo siguiente:
               LoadModule php5_module "C:\PHP\php5apache2.dll"
               PHPIniDir = "C:\PHP"

5. Pruebas
Para probar que todo funciona correctamente creamos un script PHP que nos muestra los parámetros de configuración de PHP:

<?php
phpinfo();
?>

Lo guardamos como phpinfo.php en D:\servidores\Apache2\htdocs\pruebas (creamos la carpeta pruebas dentro de htdocs). Para probarlo arrancamos el servidor Apache.

Abrimos un navegador e introducimos http://localhost/pruebas/phpinfo.php. Se nos muestra una página con todos los parámetros configurados para PHP.

Lo más interesante es ver si está correctamente configurado el módulo Java que está un poco más abajo en la misma ventana. Si no os saliera deberéis revisar los pasos en la configuración.

5.1 Llamada a un método Java desde PHP

    • Primero creamos una clase de prueba con un método para llamarlo desde un script PHP. Hacemos un clásico Hola Mundo!!
public class HolaMundo {
    public String saludo() {
        return "Hola Mundo!!";
    }
}

Lo guardamos como HolaMundo.java y lo compilamos con javac Holamundo.java

Una vez creado el .class creamos un jar con el comando jar cvf HolaMundo.jar HolaMundo.class

    • Ahora creamos el script PHP que llamará al método saludo() de nuestra clase HolaMundo:
	<?php

	java_require('http://localhost/pruebas/HolaMundo.jar');   <- Indicamos dónde se encuentra el jar con la clase HolaMundo

	$holaMundo = new Java('HolaMundo'); 	<- Creamos un objeto de la clase HolaMundo

	echo (String) $holaMundo->saludo();	<- LLamamos al método saludo e imprimimos el resultado

	?>

 

5.2 Llamada a un EJB desde PHP

    • Creamos la interfaz remota y el bean de sesión que la implementa. Lo haré con EJB3 ya que resulta muy sencillo.
Interfaz Remota
package src.main.java;
import javax.ejb.Remote;

@Remote
public interface HolaMundoRemote {
    public String saludo();
}
Bean se Sesión sin Estado
package src.main.java;
import javax.ejb.Stateless;

@Stateless
public class HolaMundoBean implements HolaMundoRemote {
    public String saludo() {
        return "HolaMundo!!";
    }
}

Creamos un jar y lo añadimos al directorio deploy del JBoss y también en la parte cliente, en este caso en C:\PHP\ext. También añadimos los jars necesarios de la parte cliente del JBoss a C:\PHP\ext (no se detallan estos pasos ya que no son el objetivo principal de este tutorial).

Desde la consola jmx del JBoss comprobamos que se ha desplegado el Bean correctamente:

    • Para llamar al Bean remoto desde PHP creamos un script en el que añadimos lo siguiente:
<?php
	#Declaramos un array con las propiedades de la conexión JNDI
	$envt = array("java.naming.factory.initial" => "org.jnp.interfaces.NamingContextFactory",
				  "java.naming.factory.url.pkgs"=>"org.jboss.naming:org.jnp.interfaces",
				  "java.naming.provider.url" => "localhost");

	#Creamos un objeto InitialContext
	$ctx = new Java("javax.naming.InitialContext", $envt);

	#Hacemos lookup para acceder al objeto remoto
	$obj = $ctx->lookup("HolaMundoBean/remote");

	#Llamada al método saludo() del HolaMundoBean, el resultado se guarda en la variable saludo
	$saludo = $obj->saludo();

	#Mostramos el resultado
	echo "Llamamos a un EJB desde PHP y nos contesta con : ";
	echo "<br>";
	echo $saludo;
?>

6. Conclusión

Como podéis comprobar no es nada complicado unir dos mundos tan distintos como son PHP y Java si dispones del software apropiado. Quizá no sea un buen planteamiento para arrancar un proyecto inicial ya que existen otras herramientas pero sí puede resultar útil a la hora de conectar PHP con otras aplicaciones.

6 COMENTARIOS

  1. Buenas Tardes. Primero que todo gracias por el tuto. Nose nada de Java pero por razones de un proyect oque estoy realziando debo integrar codigo jav acon mis paginas PHP. La duda que tengo es si este puente funciona en Linux también, es decir cual seria la libreria que se debe configurar en Linux o como sería la configuración del puente.
    Espero me haya hecho entender y me puedan ayudar. Gracias

  2. buen dia, exelente informacion. pregunto? con esta extension puedo conectar un lector de huellas.
    ejemplo desde java genero la comunicacion al lector y le pase la informacion a php

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad