Ejecutar codigo Java en PHP y viceversa

La interoperabilidad entre lenguajes Java y PHP es muy deseable para cualquier desarrollador, y sería ideal contar con alguna manera de hacer que estos dos lenguajes trabajen juntos de manera transparente ¿y para que queremos esto? bueno, hay muchísimas opciones, entre las que podemos destacar:

  • reuso de componente ya existentes, pero en otro lenguaje
  • le agregamos funcionalidad a nuestras aplicaciones mediante herramientas que nos dan otros lenguajes. Por ejemplo, podemos tener código PHP con multithreading (gracias a Java) o usar la enorme potencia de las excepciones de java, no disponible en versiones más viejas de PHP.
  • Aprovechamos la eficiencia para ejecutar código PHP desde dentro de Java.

Para realizar esto utilizaremos PHP/Java Bridge,  una potente herramienta que nos permite ejecutar instanciar clases java y ejecutar su código desde PHP, y viceversa. Esto lo hace de manera muy sencilla, e incluso no es necesario conocer Java (o php, dependiendo del caso) para utilizarlo.

La página oficial tiene guías para instalarlo desde el código fuente, o utilizando un rmp, o incluso sobre Windows. Más información aquí: http://php-java-bridge.sourceforge.net/doc/installation.php

En distribuciones derivadas de Debian, como Ubuntu, que utilizan .deb como sistema de paquetes, la instalación es también muy sencilla. Asumiendo que ya tenemos apache y php5 instalado, instalamos los siguiente programas para tener todas las dependencias satisfechas:

sudo apt-get install libitext-java liblucene-java php5-cli

Luego, descargamos el  archivo php-java-bridge_5.2.2-1_i386.deb (recomiendo ir a la página de descargas para ver si hay una versión más nueva). Luego abrimos una consola y escribimos:

cd DIRECTORIO_DONDE_DESCARGAMOS_EL_ARCHIVO

sudo dpkg -i php-java-bridge_5.2.2-1_i386.deb

Listo, con esto ya lo tenemos instalado. ¿cómo se usa?

Supongamos que tenemos la siguiente clase Java:

import java.util.*;
import java.text.*;
 
public class HolaMundo {
 
public String saludarAlMundo() {
  Date hoy = new Date();
  return "Hola amigos, hoy es " + hoy;
}

 }

Desde PHP, podemos usarla asi:

<?phpjava_require ("/var/classes");  //directorio donde tenemos las clases Java
$java_obj = new Java("HolaMundo");
// llamamos al metodo saludarAlMundo
$str = $java_obj->saludarAlMundo();
echo
$str;

?>
¿fácil no?
Updates:
que pasa si obtenemos un Call to undefined function java_require() in… o un Call to undefined function Java in … . Bueno, aparentemente, no esta todo bien instalado. Veamos la configuracion de php en java. Nos hacemos un phpinfo() y nos fijamos que dice la seccion de Java:

java

java support Enabled
java bridge 5.2.2
java.java_home no value
java.java java
java.log_file <stderr>
java.log_level no value (use back-end’s default level)
java.security_policy Off

no tenemos seteado el java_home! Tendremos q editar el archivo de configuracion de java. Abrimos una consola y escribimos:

sudo mcedit /etc/php5/apache2/conf.d/java.ini

buscamos la linea donde dice java_home, la decomentamos y escribimos la ruta completa hasta el directorio java, en mi caso /usr/lib/jvm/java-6-sun . Guardamos y reiniciamos el apache:

sudo /etc/init.d/apache2 restart

Ahora probamos nuevamente a ver si nos anda😀 .

¿sigue sin andar? Bueno, vamos por la segura entonces…. Es muy probable que PHP no esté viendo el Java.inc y por eso esté rompiéndose. Vamos a buscar el archivo JavaBridge.jar y vamos a descomprimirlo dentro del include_path. Por ejemplo, mi include_path es /var/lib , con lo cual ahora tendré /var/lib/java y allí tendré dos directorios:

  • META-INF
  • php
Ahora, vamos a decirle al sr. PHP que incluya sí o sí el JavaBridge, y luego vamos a probarlo. Les dejo otro ejemplito, pero esta vez mas completito:

<?
require_once(“JavaBridge/META-INF/java/Java.inc”);$system = new Java(‘java.lang.System’);echo ‘Java version=‘ . $system->getProperty(‘java.version’) . ‘ <br />’;
echo ‘Java vendor=‘ . $system->getProperty(‘java.vendor’) . ‘<br />’;
echo ‘OS=’ . $system->getProperty(‘os.name’) . ‘ ‘ .
$system->getProperty(‘os.version’) . ‘ on ‘ .
$system->getProperty(‘os.arch’) . ‘<br />’;

$formater = new Java(‘java.text.SimpleDateFormat’,
“EEEE, MMMM dd, yyyy ‘at’ h:mm:ss a zzzz”);
echo $formater->format(new Java(‘java.util.Date’));

?>

Edit. 10/9/08

Les agrego un par de datos que creo que les pueden servir:

– muchas veces tira un error tipo: Exception: Invoke failed:[…] . ¿a qué se debe esto? Bueno, los motivos pueden ser varios, pero lo más común es que intentemos crear objetos y / o ejecutar métodos que se encuentran en otras clases (incluso dentro de archivos .jar ). Y si, muchas veces sucede que no los encuentra.

Una solucion es listar TODOS los jars en la funcion java_require (o java_autoload), separadas con punto y coma, y con el path completo. Ej: java_require(“/home/gonetil/lib.jar1;/home/gonetil/lib/jar2”); A veces son demasiados jars y esto puede ser un problema, ya que el código puede quedar muy extenso y atenta enormemente contra la extensibilidad (cada jar que se incorpore al proyecto Java requerirá que se modifique el proyeco php). Pero bueno, servir, sirve. Es importante que reinicien el servidor web para asegurarse que los cambios sean efectivos.

Otra solución es hacer que el classpath incluya al directorio donde estan los jars o las clases adicionales (los .class). Y por practicidad, yo pondría todo lo que es “java” allí (las clases que yo hice, y las que necesito). ¿cómo lo hago? Vamos a suponer que todas mis clases Java (archivos class, jar y war) se encuentran en /var/www/clases:

En Linux, tienen que fijarse con que usuario se ejecuta el Apache y editar su archivo de profile:

  • si lo ejecutan con su usuario, tendran que editar el /home/usuario/.bash_profile
  • si lo ejecutan como root, tendran que editar el archivo /root/.bashrc
  • sino, tambien pueden editar el archivo /etc/environment

Más allá de cuál archivo modifiquen, lo que tienen que poner es:

CLASSPATH = /var/www/clases

export CLASSPATH

¡Listo! Si editaron el profile de su usuario, simplemente cierren y abran la sesion nuevamente. Sino, deberán reiniciar el sistema. Pueden verificar si esto les anduvo abriendose una terminal y ejecutando el comando env | grep CLASSPATH, (si editaron el classpath del usuario roor, ejecuten primero un sudo su y luego tiren el comando env | grep CLASSPATH ).

En Windows, la cosa es muy parecida. Hacemos clic en Mi PC con el boton derecho, y vamos a propiedades. Allí vamos a avanzadas-> variables de entorno. Y agregamos (o editamos) la variable CLASSPATH del sistema (para asegurarnos que cualquier usuario la verá). Si las clases están en c:wwwclasses, ese mismo valor deberá contener nuestra variable CLASSPATH.

Un último dato.

Apache (y asumo que la mayoría de los servidores web) mantiene las clases Java en una cache propia. Esto significa que por más que hagamos cambios en los archivos java y los recompilemos (o sea, cambiemos los .class, .jar o .war), no veremos los cambios. La única solución viable que encontré para este problema es reiniciar el Apache (si les tira un error, intenten varias veces).

  • En Linux, con el comando /etc/init.d/apache2 restart . Quizás necesiten hacerlo con sudo.
  • En Windows, vamos a ejecutar y escribimos: net stop apache2 y luego net start apache2 .

De todos modos, ambos sistemas poseen herramientas gráficas para controlar estos servicios (he escrito un post por aquí al respecto).

Edit 19/06/2009:

En esta semana instale el JavaBridge en otro servidor, esta vez con Debian 64 en vez de Ubuntu. Esta vez instale el php-java-bridge 5.4.4.2, pero  bajando los fuentes y compilandolo. El tema es bastante simple:

Lo descomprimimos

tar xzfv php-java-bridge_5.xxx.tar.gz

lo preparamos para php:
phpize
y lo instalamos, a la vieja usanza:
En Ubuntus viejos: ./configure –with-java=/usr/lib/jvm/java-6-sun-1.6.0.03,/usr/lib/jvm/java-6-sun-1.6.0.03
En Hardy/Interpid o Debian: ./configure –with-java=/usr/lib/jvm/java-6-sun,/usr/lib/jvm/java-6-sun

En otras distros, tendran que ver donde tienen instalado java ( con el comando whereis java)

(en realidad, /usr/lib/jvm/java-6-sun es un enlace simbolico a /usr/lib/jvm/java-6-sun-1.6.0.07 o el que corresponda)

Luego,
make
chmod +x install.sh
./install.sh

Nos hace dos preguntas, a la primera le damos yes y a la segunda no. Una vez instalado, reiniciamos el apache.

Ahora, si tiramos un phpinfo(), veremos que tenes el PhpJavaBridge andando, pero no nos va a andar de todo. ¿por que no? Porque PHP intenta conectarse con el JavaBridge en el puerto 8080, y obviamente no hay nada escuchando alli). Lo que yo hice fue personalizar un script en bash que levanta el deamon en el puerto 8080 automaticamente en el inicio (y que me permite controlarlo mediante stop, start, status, etc…). Es bastante simple, solo tienen que copiar y pegar, y bueno, asegurarse que las variables de configuracion de las primeras lineas se ajustan a sus necesidades:

#! /bin/sh

#Este archivo inicia el JavaBridge. Hay que ponerlo en /etc/init.d en el servidor. Hecho esto,
# hay que hacerlo ejecutable:
# chmod +x /etc/init.d/JavaBridge-Loader.sh
# y finalmente, decile al sistema que lo levante al inicio
# update-rc.d JavaBridge-Loader.sh defaults 
#Original /etc/init.d/skeleton modified for http://mydebian.blogdns.org

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="JavaBridge para ejecutar Java dentro de PHP"
NAME="JavaBridge"
DAEMON=/usr/bin/java
DAEMON_ARGS="-jar /usr/share/java/JavaBridge.jar SERVLET:8080 3 /var/log/JavaBridge.log"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/javabridge
#Lo ejecuto con el mismo usuario de Apache
USER=www-data

# No tocar aqui abajo!!!!

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{

 start-stop-daemon -b --start --quiet --chuid $USER -m -p $PIDFILE --exec $DAEMON -- $DAEMON_ARGS \
 || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
 start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
 RETVAL="$?"
 rm -f $PIDFILE
 return "$RETVAL"
}

case "$1" in
 start)
 [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
 do_start
 case "$?" in
 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
 esac
 ;;
 stop)
 [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
 do_stop
 case "$?" in
 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
 esac
 ;;
 restart)
 #
 # If the "reload" option is implemented then remove the
 # 'force-reload' alias
 #
 log_daemon_msg "Restarting $DESC" "$NAME"
 do_stop
 case "$?" in
 0|1)
 do_start
 case "$?" in
 0) log_end_msg 0 ;;
 1) log_end_msg 1 ;; # Old process is still running
 *) log_end_msg 1 ;; # Failed to start
 esac
 ;;
 *)
 # Failed to stop
 log_end_msg 1
 ;;
 esac
 ;;
 *)
 echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
 exit 3
 ;;
esac

:

Un par de datos importantes:

Primero le decimos al script donde encontrar el binario java (DAEMON=/usr/bin/java), y luego le indicamos como levantar el deamon ( DAEMON_ARGS=”-jar /usr/share/java/JavaBridge.jar SERVLET:8080 3 /var/log/JavaBridge.log” ). Si prestan atencion, veran qe alli se indica el puerto (8080), el nivel de Log (3), donde encontrar el Jar de JavaBridge y donde poner los logs (muy utiles!!!) . Tambien se indica con que usuario debe correrse el script (USER=www-data).

Bueno, listo! Copiamos el script en /etc/init.d y le decimos al sistema que lo levante automaticamente:

sudo cp JavaBridge-loader.sh /etc/init.d

sudo update-rc.d JavaBridge-Loader.sh defaults

En mi corta experiencia, esta solucion hace al JavaBridge mucho mas estable y mas facil de controlar, y la verdad lo recomiendo. Saludos.

DAEMON=/usr/bin/java
DAEMON_ARGS="-jar /usr/share/java/JavaBridge.jar SERVLET:8080 3 /var/log/JavaBridge.log"

32 comentarios to “Ejecutar codigo Java en PHP y viceversa”

  1. charly palencia Says:

    hola disculpa necesito preguntarte algo he trabjado he tratado con esta herramienta en windows pero no me ha sido posible conectarme con ella hago lo que ellos dicen solo colocarla en el root ademas ingreso un include con java_php en php.info y otras cosas por favor si te puede comunicar conmigo te lo agradesco mi email es ingcharlypalencia@gmail.com

  2. gonetil Says:

    Hola Charly. No tengo experiencia sobre Windows, pero te puedo pasar algunos tips:
    – asegúrate que esté correctamente instalada. Cuando haces un phpinfo(), ves información sobre el PHP/Java Bridge? De no ser así, deberás instalarla; debes descargarte el binario desde aqui: http://sourceforge.net/project/showfiles.php?group_id=117793

    Ten cuidado, que bajo Windows, debes utilizar el .war sobre un Tomcat andando, y lo que haces es comunicar procesos en ejecucion php con procesos Java. Es algo distinto a lo que yo coloque aqui. Aqui tienes las instrucciones en ingles:

    http://php-java-bridge.sourceforge.net/doc/installation.php

    Aqui hay una guia muy completa e ilustrada, paso a paso, para realizar la instalacion sobre Windows XP y Apache:
    http://www.dsl.uow.edu.au/~sk33/php5java.htm

    Si en vez de Apache usas IIS, puedes pegarle un vistazo a este link: http://www.hiveminds.co.uk/node/3811

    Espero te sirvan estos datos.

  3. charly palencia Says:

    buenos dias

    amigo yo he revisado estas paginas el punto es que no se si sea la version de php/java bridge que esta en otra version o sea mi problema pero ya me paarece lo de java en mi phpinfo leproblema e sque no sale mucha informciaon que te sale a ti como el status y otras cosas. no se que pasa si sabes de lagun lugar o tutorial que me puedas suministrar con el nueva version de php/java bridge que esta por la 5 muchas gracias

  4. charly palencia Says:

    hola la “” parecer “” ya se ha conectado pero pasaron varias cosas :

    1. me decia que no encontraba el requiere() asi que mire bien y reajuste los library y path ne el php.ini

    2. y ahora cuando ya arregle ese problema no me sale un erro de java, me sale un erro de windows que dice que el CGI/fastCGI creo un erro y debe cerrarse

  5. gonetil Says:

    mmm, ahi no te puedo ayudar. Ya es un error de windows, y la verdad lo desconozco completamente. Sorry😦

  6. ESTEBAN GUENUL Says:

    Estimado

    Para ejecutar esas clases de java en PHP. ¿Se debe instalar Tomcat?.

    Saludos cordiales,
    Esteban

  7. gonetil Says:

    no. no es necesario. La ventaja de usar Tomcat es que se puede conectar un script PHP con un Servlet que ya esté funcionando y corriendo en ese momento, y que brinde algún servicio.
    Por ejemplo, tenés una aplicación Java que tiene sus propios usuarios y un módulo complejo de autenticación y auditoría mediante servlets, y desarrollas un módulo en PHP que brinda una función específica. Pero para evitar reimplementar toda la autenticación y auditoría nuevamente pero en PHP, simplemente invocas al servlet en el puerto 8080 (o donde esté corriendo tu tomcat) y brindas el servicio a tu script PHP como si fuera un cliente más.
    Por el contrario, sin tomcat, la aplicación Java es simplemente un programita que se invoca y ejecuta solo cuando el PHP lo solicita, y se cierra al finalizar. Es muy similar a invocar una llamada al sistema (en su funcionamiento solamente!!!!).
    Espero te sirvan estos comentarios.

  8. Ricardo Ruano Says:

    Estimado gonetil
    Me parece increible la funcionalidad de php java bridge
    pero si nos puedes ayudar explicandonos como llamamos a un servlet usando metodo post digamos para recuperar cierta cantidad de texto que es recuperada de una base de datos, este servlet esta alojado en servidor distinto de la aplicacion en php
    seria algo asi:
    ruta servlet:
    http://www.sitiojava.com/servletdatos

    y mi sitio de php:
    http://www.sitiophp.com/invocaservlet.php

    la idea completa es la siguiente:
    mi sitiopho hace uso de xajax para cambiar el contenido digamos de un combo , pero ese contenido es alimentado por los datos que deben ser recuperados desde mis servlets que estan ubicados en un servidor diferente.
    agradesco muchismo sus respuestas.

    No se si este sitio comunique automaticamente al mail pero de todas maneras aqui dejo rickymax01_a@yahoo.com.ar
    estare pendiente de sus respuestas
    Salu2 desde Ecuador

  9. Ricardo Ruano Says:

    Estimado gonetil
    Me parece increible la funcionalidad de php java bridge
    pero si nos puedes ayudar explicandonos como llamamos a un servlet usando metodo post digamos para recuperar cierta cantidad de texto que es recuperada de una base de datos, este servlet esta alojado en servidor distinto de la aplicacion en php
    seria algo asi:
    ruta servlet:
    http://www.sitiojava.com/servletdatos
    donde servletdatos es mi servlet
    y mi sitio de php:
    http://www.sitiophp.com/invocaservlet.php

    la idea completa es la siguiente:
    mi sitiopho hace uso de xajax para cambiar el contenido digamos de un combo , pero ese contenido es alimentado por los datos que deben ser recuperados desde mis servlets que estan ubicados en un servidor diferente.
    agradesco muchismo sus respuestas.

    No se si este sitio comunique automaticamente al mail pero de todas maneras aqui dejo rickymax01_a@yahoo.com.ar
    estare pendiente de sus respuestas
    Salu2 desde Ecuador

  10. ESTEBAN GUENUL Says:

    Necesito saber porque esta ocurriendo esto:

    Fatal error: Uncaught [o(Exception):”java.lang.Exception: CreateInstance failed: new ConexionSii. Cause: java.lang.ClassNotFoundException: Unresolved external reference: java.lang.NoClassDefFoundError: ConexionSii (wrong name: cl/sii/dte/ConexionSii). — Unable to call constructor, see the README section “Java platform issues” for details. Responsible VM: 1.5.0_16@http://java.sun.com/” at: #-6 php.java.bridge.JavaBridge.getUnresolvedExternalReferenceException(JavaBridge.java:487) #-5 php.java.bridge.JavaBridge.CreateObject(JavaBridge.java:555) #-4 php.java.bridge.Request.handleRequest(Request.java:353) #0 C:\trazabilidad\dtelib\lib1\bin\cl\sii\dte\TMPv7m6l7nesh.php(2): Java::__construct(‘ConexionSii’) #1 {main}] thrown in C:\trazabilidad\dtelib\lib1\bin\cl\sii\dte\TMPv7m6l7nesh.php on line 2

  11. gonetil Says:

    ese problema se debe casi seguro a que no tenés bien configurado el classpath. Tené en cuenta que el que necesita el classpath es el usuario que ejecuta tu apache, quien tendrá también que ejecutar el php que crea las clases Java. O sea, cuando configues el classpath, debes hacerlo para ese usuario. Por ejemplo, supongamos que en mi sistema el apache lo ejecuta el usuario gonetil, entonces tendré que asignar el classpath para gonetil en /home/gonetil/.bashrc

  12. ESTEBAN GUENUL Says:

    Tengo que definir un classpath de usuario o classpath a nivel de sistema operativo

  13. ESTEBAN GUENUL Says:

    Puedes indicarme mas o menos como debo configurar el classpath para la clase java.lang.* para tener una noción de eso. Ya logré compilar algunas clases. De hecho el archivo .jar lo tengo en el mismo directorio del archivo php que llama la clase

  14. ESTEBAN GUENUL Says:

    Perdona que sea insistente , Pero las variables de java debo definirlas como variables de usuario o de sistema

  15. gonetil Says:

    Esteban,
    yo las definiria primero a nivel del usuario que ejecuta apache. Si ese usuario no tiene un /home entonces deberias definirlas como variables del sistema (en /etc/env o /etc/environment ).
    Y el classpath debe incluir el directorio donde estan tus clases Java. Sino, cuando hagas las pruebas desde el entorno de desarrollo (por ej. Eclipse) todo va a funcionar, pero cuando lo pruebes desde afuera, no.

  16. ESTEBAN GUENUL Says:

    Estoy usando un entorno windows

  17. ESTEBAN GUENUL Says:

    Estimado

    Aun sigo problemas para ejecutar una clase de java en php

    me sigue saliendo el mismo aviso

    LA VARIABLE CLASSPATH LA CONFIGURE DE ESTA FORMA

    CLASSPATH=.;%JAVA_HOME%\lib;c:\trazabilidad\dtelib\lib1\bin;c:\jdom;C:\php\ext\JavaBridge.jar;%CLASSPATH%;C:\soap;C:\trazabilidad\utils;C:\xmlsec\
    LA VARIABLE JAVA_HOME

    JAVA_HOME=C:\jdk

    y aun sigo teniendo los errores

  18. ESTEBAN Says:

    Todavia sigo tratando de ejecutar el archivo y aun no me resulta. He probado con ejemplos sencillos y funciona bien pero otras clases no

  19. Pedro Victor Says:

    Hola he seguido tu tutorial y no logro que jale, me perdí en tu ejemplo final no sé si puedes explicarlo mas, yo tengo los mismo que tu quienes en tu configuración

    Gracias

  20. gonetil Says:

    Hola Pedro,
    supondre que te esta funcionando el JavaBridge, y que el problema esta en tu aplicacion. Lo mas importante es utilizar el comando JavaRequire con la lista de jars que necesitas levantar. Poniendo el path completo evitas cualquier tipo de problema. Y recuerda reiniciar el Apache antes de probar nada, pues a veces las clases java quedan en la cache y no se ven los cambios.
    Con esto, he logrado hacer andar aplicaciones con el javabridge en cuestion de segundos (simplemente actualizando los paths).
    Suerte

  21. arts Says:

    Hola.. necesito ayuda me da el error : Call to undefined function java_require(), stoy intentado hacer lo q dice d editar el java.ini pero alli no encuentro ninguna linea java_home, estoy usando php-java-bridge 5.4.4.2.. quien m pueda ayudar c lo agradeceria…!!

  22. arts Says:

    Solo muestra esto:
    java
    java support Enabled
    java bridge 5.4.4.2

  23. yyeshua Says:

    Hola, hola. He seguido estos pasos, he seguido algunos otros, y bueno… no funciona. El phpinfo() no me devuelve anda de Java. Lo único que aparece relacionado es en una sección llamada “Additional .ini files parsed” donde se incluyen las rutas de java-servlet.ini y java.ini, pero nada más.

    Estoy usando Mandriva, y bueno, no sé si es que han cambiado las cosas entre la versión que intento utilizar (5.2.2) y la que quiero utilizar (6.2.1 RC3).

    ¿Podrías hacer una actualización del contenido con esta versión?.

    Saludos, gracias.

  24. Aldo Says:

    Mira este error me marca el log de apache ya he puesto el classpath y todo pero no logro hacerlo jalar, me urge te agradeceria…:

    PHP Fatal error: Uncaught [[o:Exception]:”java.lang.Exception: CreateInstance failed: new HolaMundo. Cause: java.lang.ClassNotFoundException: HolaMundo VM: 1.6.0_16@http://java.sun.com/” at:\n#-29 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)\n#-28 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)\n#-27 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)\n#-26 java.lang.Class.forName0(Native Method)\n#-25 java.lang.Class.forName(Class.java:247)\n#-24 php.java.bridge.Util.classForName(Util.java:1481)\n#-23 php.java.bridge.JavaBridge.CreateObject(JavaBridge.java:429)\n#-22 php.java.bridge.Request.handleRequest(Request.java:458)\n#-21 php.java.bridge.Request.handleOneRequest(Request.java:510)\n#-20 php.java.servlet.PhpJavaServlet.handleLocalConnection(PhpJavaServlet.java:202)\n#-19 php.java.servlet.PhpJavaServlet.handlePut(PhpJavaServlet.java:250)\n#-18 php.java.servlet.PhpJavaServlet.doPut(PhpJavaServlet.java:261)\n#-17 javax.servlet.http.HttpServlet.service(H in /usr/local/tomcat/apache-tomcat-6.0.20/webapps/JavaBridge/java/Java.inc on line 195, referer: http://localhost/pagina/

  25. bmacias Says:

    Hola gonetil
    tengo instalado el javabridge pero al momento de querer generar un reporte desde una pagina en php me aparece el siguiente error:

    Warning: readdir(): supplied argument is not a valid Directory resource in /var/www/html/sgpplus/JavaBridge/php-jru.php on line 129

    Fatal error: Uncaught [[o:Exception]:”java.lang.Exception: CreateInstance failed: new org.altic.jasperReports.JdbcConnection. Cause: java.lang.ClassNotFoundException: Could not find org.altic.jasperReports.JdbcConnection in java_require() path. Please check the path and the SEL and File permissions. Responsible VM: 1.6.0_20@http://java.sun.com/” at: #-9 php.java.bridge.DynamicJavaBridgeClassLoader.loadClass(DynamicJavaBridgeClassLoader.java:288) #-8 java.lang.Class.forName0(Native Method) #-7 java.lang.Class.forName(Class.java:264) #0 Java.inc(161): java_ThrowExceptionProxyFactory->getProxy(2, false) #1 Java.inc(314): java_Arg->getResult(false) #2 Java.inc(317): java_Client->getWrappedResult(false) #3 Java.inc(481): java_Client->getInternalResult() #4 Java.inc(703): java_Client->createObject(‘org.altic.jaspe…’, Array, true) #5 Java.inc(834): java_create(Array, true) #6 /var/www/html/sgpplus/JavaBridge/JdbcConnection.php(68): Java->Java(‘org.altic.jaspe…’) #7 /var/www/html/sgpplus/JavaBridge/pdf_genera.php(40): JdbcCon in Java.inc on line 139

    mi phpinfo esta asi.

    java support Enabled
    java bridge 4.1.8
    java.java_home /usr/lib/jvm/java-1.6.0-openjdk/bin
    java.java /usr/lib/jvm/java-1.6.0-openjdk/bin/java
    java.log_file
    java.log_level 2
    java.security_policy Off
    java command JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk/bin LD_LIBRARY_PATH=/usr/lib/php/modules: /usr/lib/jvm/java-1.6.0-openjdk/bin/java -Djava.library.path=/usr/lib/php/modules -Djava.class.path=/usr/lib/php/modules/JavaBridge.jar -Djava.awt.headless=true -Dphp.java.bridge.base=/usr/lib/php/modules php.java.bridge.Standalone LOCAL:9267 2
    java status running
    java server 9267

    Y mi proyecto esta en la ruta:
    /var/www/html/sgpplus

    Gracias.

  26. Jorge Colmenarez Says:

    Buenas Tardes de antemano muchas gracias por el material, Aun no he podido trabajar con el php-java-bridge, no se que mas me haga falta configurar primero en el phpinfo() no me aparece lo de Java. aunque en Additional .ini files parsed tengo este “/etc/php5/apache2/conf.d/java.ini” y lo de incluir el JavaBridge en el include_path ya lo hice pero el log de errores de apache me arroja esto

    [Thu Jun 07 16:12:03 2012] [error] [client 127.0.0.1] PHP Warning: fsockopen(): unable to connect to 127.0.0.1:8080 (Connection refused) in /usr/share/php/JavaBridge/META-INF/java/Java.inc on line 1035
    [Thu Jun 07 16:12:03 2012] [error] [client 127.0.0.1] PHP Fatal error: Uncaught exception ‘java_ConnectException’ with message ‘Could not connect to the J2EE server 127.0.0.1:8080. Please start it, for example with the command: “java -jar JavaBridge.jar SERVLET:8080 3 JavaBridge.log” or, if the back end has been compiled to native code, with “modules/java SERVLET:8080 3 JavaBridge.log”. Error message: Connection refused (111)\n’ in /usr/share/php/JavaBridge/META-INF/java/Java.inc:1036\nStack trace:\n#0 /usr/share/php/JavaBridge/META-INF/java/Java.inc(1042): java_HttpHandler->open()\n#1 /usr/share/php/JavaBridge/META-INF/java/Java.inc(1157): java_HttpHandler->java_HttpHandler(Object(java_Protocol), ”, ‘127.0.0.1’, ‘8080’)\n#2 /usr/share/php/JavaBridge/META-INF/java/Java.inc(1197): java_Protocol->createHttpHandler()\n#3 /usr/share/php/JavaBridge/META-INF/java/Java.inc(1202): java_Protocol->createHandler()\n#4 /usr/share/php/JavaBridge/META-INF/java/Java.inc(348): java_Protocol->java_Protocol(Object(java_Client))\n#5 /usr/share/php/JavaBridge/META-INF/java/Java.inc(1542): java_Client->jav in /usr/share/php/JavaBridge/META-INF/java/Java.inc on line 1036
    [Thu Jun 07 16:14:31 2012] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico

    si me pudieras contactar te lo agradeceria este es mi correo jlct.master@gmail.com

  27. eduardo Says:

    Tengo duda, ya puedo ver paginas php en tomcat todo va bien, 192.168.1.50:8080/JavaBridge/index.php mi pregunta es como le puede hacer para que javabridge escche por el puerto 80 y no tener que estar escribiendo el puerto 8080. saludos

  28. juan Says:

    Primero que todo pensar en …. será adecuado payasiar una aplicación WEB JAVA básica(JSP-Servlet), teniendo un extenso mundo por conocer en Java (JSF2.0 – primeFaces 3.5).
    Mezclar a Java con php es como (la selección de Brasil con delanteros Bolivianos) … que porkeria!

  29. cristian Says:

    Tengo el siguiente error me podrian ayudar:

    Estado HTTP 500 – php.java.bridge.http.FCGIConnectException: Could not connect to server

    type Informe de Excepción

    mensaje php.java.bridge.http.FCGIConnectException: Could not connect to server

    descripción El servidor encontró un error interno que hizo que no pudiera rellenar este requerimiento.

    excepción

    javax.servlet.ServletException: php.java.bridge.http.FCGIConnectException: Could not connect to server

  30. Marianela Says:

    Tengo un proyecto académico para entregar, echo en java y debo pasarlo a php para otra materia reutilizar es genial, pero el tema es que no tengo ganas de sentarme mil horas esto ayuda un montón para poder pasarlo, de todas maneras me vendría re bien una mano


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: