icono_twiter icono LinkedIn
Juan Alonso Ramos

Consultor tecnológico de desarrollo de proyectos informáticos.

Ingeniero en Informática, especialidad en Ingeniería del Software

Puedes encontrarme en Autentia: Ofrecemos de servicios soporte a desarrollo, factoría y formación

Somos expertos en Java/J2EE

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2007-02-23

Tutorial visitado 40.973 veces Descargar en PDF
Puente PHP/Java

Puente PHP/Java

22/02/2007

Índice de Contenidos

1. Introducción

2. Herramientas

3. Instalación

3.1 Instalación de PHP

3.2 Instalación de Apache

3.3 Instalación del puente PHP/Java


4. Configuración

5. Pruebas

5.1 Llamada a un método Java desde PHP

5.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:

    Web oficial: http://php-java-bridge.sourceforge.net/pjb/index.php

    API:  http://php-java-bridge.sourceforge.net/pjb/server/documentation/API/index.html


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.


A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Fecha publicación: 2011-02-24-23:53:07

Autor: SouzaRM

Thanks!
java-x86-windows.dll --> http://php-java-bridge.sourceforge.net/NEWS

Version 3.2.1
(...)
* Since PHP>= 5.2 the Windows java extension ("java-x86-windows.dll"
or "php_java.dll") is not necessary anymore. Please use our pure PHP
PHP/Java Bridge implementation instead.
(...)

Fecha publicación: 2010-06-22-00:20:46

Autor: helacer

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

Fecha publicación: 2009-09-17-04:55:49

Autor:

[Alejandro Lora] Hola como estan, haciendo pruebas en l aparte que dice "Copiamos la dll java-x86-windows.dll situada en D:servidoresphp-java-bridge-3.1.8_j2eeWEB-INFcgi en C:PHPext y la renombramos a php_java.dll para poder utilizar correctamente el puente en Windows."...tengo problemas es decir no encuentro el tal "java-x86-windows.dll", para renombrarlo luego a "php_java.ini", me podrian ayudar porfavr

Fecha publicación: 2009-09-08-10:16:52

Autor:

[vic] me parece muy bueno todo lo que esta aqui, pero me gustaria mas ejemplos como mostrar datos de una base de datos a travez de jasper con php

Fecha publicación: 2009-08-24-02:47:45

Autor:

[TITO] Hola Buen tutorial felicitaciones, quería comentarles que hice la integración de PHP y Java con las últimas versiones actualmente, donde ya no es necesario instalar el javabridge como modulo, esto es desde php5, ademas implemente la ejecución de reportes con Jasperreport con acceso a base de datos, pueden visitar mi pagina www.ideas.blogid.ec

Fecha publicación: 2009-07-09-09:27:33

Autor:

[K. G.] Primeramente los quiero felicitar por su forma tan didáctica y fácil de tránsmitir sus conocimiento. El curso está Excelente pocas pág hablan sobre este tema... Quería comentales el siguiente inconveniente que tuve. Les puedo asegurar que realize todos los pasos anteriores de manera exacta varias veces para instalar el Puente PHP/JAVA y NO me funciona, Estoy realizando un proyecto el cual tiene que imprimir un reporte (JasperReport) que consulta a la base de datos MySQL, y no he logrado conectar el software que tengo en PHP son JasperReport, POR FAVOR respondanme si alguien sabe como hacerlo este es mi correo kelvinguzman(arroba)hotmail.com Espero por su respuesta... Tengo instalado el paquete de xampp 1.7.0 (creo que es el más actul) y Java JDK 1.7 Por Favor alguien que me pueda ayudar ¿Porqué no me funciona el puente? ¿Será que puedo utilizar los applet de java como segunda opción?

Fecha publicación: 2009-06-17-03:15:46

Autor:

[Claudia] Necesito ayuda instale el xampp y me paarece en el phpinfo la configuracion de php pero no me aparece la de java. vi que Nancy abajo le paso lo mismo como soluciono esto. Ayuda

Fecha publicación: 2009-06-10-07:26:50

Autor:

[Alfredo] Necesitaria saber cuales son las versiones que se complementan , ya que con appserv no funciona y con versiones mas nuevas tanto del puente como del apache y php no funcionan. Desde ya gracias

Fecha publicación: 2009-05-29-05:44:15

Autor:

[Nancy] ah y cuando corro el phpinfo(); no me aparece el modulo de java creado [java] java.java_home ="C:Archivos de programaJavajdk1.6.0_12bin" java.java = "C:Archivos de programaJavajdk1.6.0_12binjavaw.exe" java.class.path = "C:Archivos de programaxamppphpextJavaBridge.jar" java.library.path = "C:Archivos de programaxamppphpext" java.log_level = 2

Fecha publicación: 2009-05-29-05:41:31

Autor:

[Nancy] hola me da un error al iniciar el apache en esta linea PHPIniDir = "C:PHP" yo la cambie por PHPIniDir = "C:Archivos de programaxamppPHP" porque ahi es la direccion donde tengo guardado el php y apache, agradezco tu ayuda

Fecha publicación: 2009-05-26-11:17:52

Autor:

[Manuel] tengo la misma pregunta que williams, sera posible dicha integracion entre las ultimas versiones de java y php ???

Fecha publicación: 2009-05-01-08:41:30

Autor:

[williams] tengo php 5.2.8 que venia en wamp, seguí estos pasos y no me funciona. Sera que ya no se usa en las nuevas versiones? ayuda please

Fecha publicación: 2007-04-24-07:07:43

Autor:

[Carlos] Excelente.