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;
?>
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
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"
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
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.
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
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
mmm, ahi no te puedo ayudar. Ya es un error de windows, y la verdad lo desconozco completamente. Sorry 😦
Estimado
Para ejecutar esas clases de java en PHP. ¿Se debe instalar Tomcat?.
Saludos cordiales,
Esteban
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.
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
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
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
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
Tengo que definir un classpath de usuario o classpath a nivel de sistema operativo
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
Perdona que sea insistente , Pero las variables de java debo definirlas como variables de usuario o de sistema
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.
Estoy usando un entorno windows
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
Todavia sigo tratando de ejecutar el archivo y aun no me resulta. He probado con ejemplos sencillos y funciona bien pero otras clases no
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
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
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…!!
hola arts
si tirás un phpinfo(), que dice acerca del java bridge? esta bien instalado?
Solo muestra esto:
java
java support Enabled
java bridge 5.4.4.2
Solo muestra esto:
java
java support Enabled
java bridge 5.4.4.2
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.
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/
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.
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
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
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!
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
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