Foros del Web » Programando para Internet » PHP »

llamar un arhivo JAVA desde PHP

Estas en el tema de llamar un arhivo JAVA desde PHP en el foro de PHP en Foros del Web. Hola chicos. Alquien ha llamado atraves de url a un arhivo JAVA desde una aplicacion PHP? Supongo que se debe utilizar shell_exec(ruta al servidor de ...
  #1 (permalink)  
Antiguo 05/02/2008, 07:21
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 5 meses
Puntos: 0
llamar un arhivo JAVA desde PHP

Hola chicos.
Alquien ha llamado atraves de url a un arhivo JAVA desde una aplicacion PHP?
Supongo que se debe utilizar shell_exec(ruta al servidor de aplicaciones JAVA con el nombre de arhivo).
Lo que no entiendo bien que tipo de arhivo debo pasar a shell_exec.
TEngo un arhivo JAVA con una clase que me imrime en consulta (con metodo sistem.out.printl(valor) valor que quiero que me devolve shell_exec.

Pero no puedo pasar arhivo con extencion JAVA porque es una clase que no se arranca.
Como lo hago?
Si alguien tiene algun conosimiento muchissimas gracias.
  #2 (permalink)  
Antiguo 05/02/2008, 08:20
venkman
Invitado
 
Mensajes: n/a
Puntos:
Re: llamar un arhivo JAVA desde PHP

¿Has pensado en esto: http://es2.php.net/java ?
No creo que sea buena idea hacerlo con un shell execute. Ten en cuenta que eso crea un nuevo proceso que seguramente tardará un bueeeen rato en arrancar.

Si de todos modos quieres intentarlo, no tendrías que llamar a la clase directamente. Llama a "java tuclase". Seguramente también necesites pasarle el classpath.
  #3 (permalink)  
Antiguo 05/02/2008, 08:31
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: llamar un arhivo JAVA desde PHP

Si , he visto la extension PECL.
EL PHP corre como modulo, no como CGI en primer lugar (que segun leido no es la mejor opcion) y segundo no se puede plantear instalacion de VJM en el servidor actual, ya que esxiste un servidor de aplicaciones JAVA que se debe utilizar.

Lo que quiero saber que tipo de comando debo pasar a shell_exec exactamente.
Yo le paso un jar pero no me devolve nada. (lo estoy proband oen local)
en ms-dos ejecutando el comando java -jar ruta\nombre aricho.jar imprime en la pantalla el valor correcto, pero si lo ejecuto en explorador el arhivo php que llama shell_exec, no me imprimer valor ninguno.
  #4 (permalink)  
Antiguo 05/02/2008, 10:11
venkman
Invitado
 
Mensajes: n/a
Puntos:
Re: llamar un arhivo JAVA desde PHP

Supongo que estás capturando la salida y luego sacándola...
Código PHP:
$salida shell_exec("java -jar blabla/talycual.jar");
echo 
$salida
¿no? Quizá también necesites especificar el classpath (con la opción -cp del comando java). Mira el valor del classpath cuando ejecutas el comando directamente y usa ese valor.

Pero aún así, como decía no es una buena solución. Cada vez tiene que arrancar la máquina de Java y si tienes unas cuantas peticiones simultáneas eso se va a notar mucho.


Una pregunta, cuando dices que ya hay un servidor de aplicaciones Java... ¿lo que pretendes ejecutar está funcionando sobre ese servidor? Quiero decir, ¿se podría llamar a través de una URL?

Última edición por venkman; 05/02/2008 a las 10:19
  #5 (permalink)  
Antiguo 05/02/2008, 12:02
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: llamar un arhivo JAVA desde PHP

Si exactamente voy a subir y luego llamar este jar (supongo sera esta extension final) que he creado a traves de una ulr externa a este servidor de aplicaciones JAVA. Eso acaso cambia algo? lo que pretendia es probar el codigo primero en local.
Por cierto classpath a que te refieres exactamente?

Gracias por auydar!
el Codigo
$salida = shell_exec("java -jar blabla/talycual.jar");
echo $salida;
es exactamente que he puesto y que no me devolve nada.

Última edición por viktoria; 05/02/2008 a las 12:07
  #6 (permalink)  
Antiguo 06/02/2008, 01:18
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: llamar un arhivo JAVA desde PHP

Pensaba llamar la URL con el jar desde shell_exec, pero ahora no se con seguridad si es lo mas correcto.
  #7 (permalink)  
Antiguo 06/02/2008, 01:44
venkman
Invitado
 
Mensajes: n/a
Puntos:
Re: llamar un arhivo JAVA desde PHP

Con lo del classpath me refería a que en la ventana de comandos donde ejecutas eso y funciona, hagas:
Código:
C:\>set
y mires qué valor tiene CLASSPATH y lo añadas al comando que ejecutas desde php con la opción java -cp aquí_el_classpath -jar tujar.jar

Explica un poco mejor qué quieres decir con que pensabas "llamar a la URL con el jar".
  #8 (permalink)  
Antiguo 06/02/2008, 02:40
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: llamar un arhivo JAVA desde PHP

Pues usare la libreria curl (supongo) para llamar al jar que estara localizado en el servidor de aplicaciones JAVA

por ejemplo
$fichero = "curl -m $tiemo_max http://mi servidor/miarhivo.jar";

luego supongo extraere el valor que devolve este fichero por el

shell_ecex($fichero);

El fichero jar al ejecutar en consola ms-dos devolve el valor que necesito. Espero que lo devolvera tambien de este modo si esta en el servidor remoto.
  #9 (permalink)  
Antiguo 06/02/2008, 09:10
venkman
Invitado
 
Mensajes: n/a
Puntos:
Re: llamar un arhivo JAVA desde PHP

Uhm, me temo que tu problema es un poco más complejo de lo que te crees.

No, si tu ejecutable jar saca el resultado en la salida estándar, no lo puedes poner así sin más en el servidor de aplicaciones y que te saque el resultado en el navegador. Las cosas en Java no funcionan así.

Busca algo de información sobre servlets y servidores de aplicaciones.
  #10 (permalink)  
Antiguo 06/02/2008, 11:27
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: llamar un arhivo JAVA desde PHP

Si, he conseguido crear un servlet, ahora me falta conseguir que funciona jeje
Es otro mundo , como suelo trabajar en php es algo confuso.
En fin, aprendiendo cada dia.
Gracias !
  #11 (permalink)  
Antiguo 15/12/2009, 18:37
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: llamar un arhivo JAVA desde PHP

estoy casi con el mismo problema, tengo una aplicacion PHP, pero quiero llamar a un java para q me imprima directo un reporte con que lo hice con IREPORT..
  #12 (permalink)  
Antiguo 17/12/2009, 07:20
Avatar de ARGFA  
Fecha de Ingreso: noviembre-2009
Ubicación: Ciudad Guayana, Venezuela
Mensajes: 55
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: llamar un arhivo JAVA desde PHP

aqui les dejo una ayuda de una aplicacion q hice muy similar..... este se trata de traer un archivo xml desde una url, guardo el archivo en una tabla y dspues lo almaceno en una carpeta de mi servidor local. y mi archivo xml almacenado en la carpeta de mi servidor local lo muestro en el navegador llamandolo con php.
espero les sirva de ayuda... saludos...

Código java:
Ver original
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.net.URL;
  8. import java.sql.Connection;
  9. import java.sql.DriverManager;
  10. import java.sql.PreparedStatement;
  11. import java.sql.ResultSet;
  12. import java.sql.Statement;
  13.  
  14. public class linea1
  15.     {
  16.     public static void main(String[] args) throws Exception
  17.     {
  18.        
  19.     //CREO UN FOR PARA EJECUTAR LA TAREA CADA 30 SEGUNDOS  
  20.     for (int i = 0; i < 2; i++)
  21.     {
  22.     //ME CONECTO A LA BASE DE DATOS
  23.     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  24.     Connection con = DriverManager.getConnection("jdbc:sqlserver://VEM-1127;databaseName=BDlineas","sa", "1234");
  25.    
  26.     //LLAMO EL URL EL CUAL CONTIENE EL ARCHIVO XML
  27.     URL yahoo = new URL("http://150.0.56.31/ssc/wbs/Ws_Tiempo_Real.php");
  28.     BufferedReader in = new BufferedReader(new InputStreamReader(yahoo.openStream()));
  29.     String inputLine;
  30.     StringBuffer xml = new StringBuffer();
  31.     while ((inputLine = in.readLine()) != null)
  32.     {
  33.        
  34.     //VOY GUARDANDO EN LA VARIABLE EL DOCUEMENTO XML
  35.     xml.append(inputLine);
  36.     }
  37.    
  38.     //CONVIERTO EL STRINGBUFFER A STRING
  39.     StringBuffer sbuf = new StringBuffer(xml);
  40.     String str = sbuf.toString();
  41.    
  42.     //BORRO EL REGISTRO ANTERIOR DE LA TABLA
  43.     int lin = 1;
  44.     Statement sta = con.createStatement();
  45.     sta.executeUpdate("DELETE FROM Dlinea WHERE Linea = '"+lin+"'");
  46.    
  47.     //INSERTO EN LA BD LA VARIABLE STRING "str"
  48.     PreparedStatement ps = con.prepareStatement(
  49.     "INSERT INTO Dlinea (Linea, Dcelda) VALUES (?,?)");
  50.     ps.setInt(1, lin);
  51.     ps.setString(2, str);
  52.     ps.executeUpdate();
  53.     ps.close();
  54.    
  55.     //selecciono de la tabla el string y lo guardo como un archivo .xml
  56.     ResultSet res = sta.executeQuery("SELECT * FROM Dlinea WHERE Linea = '"+lin+"'");
  57.     res.next();
  58.     try
  59.     {
  60.        
  61.     //elimino el archivo anterior
  62.     File file = new File("C:/AppServ/www/archivosxml/linea1.xml");
  63.     boolean success = file.delete();
  64.    
  65.     //almacenar en carpeta del server archivo actual
  66.     BufferedWriter outfile = new BufferedWriter(new FileWriter("C:/AppServ/www/archivosxml/linea1.xml"));
  67.     outfile.write(res.getString("Dcelda"));
  68.     outfile.close();
  69.     }
  70.     catch (IOException e)    {    }
  71.    
  72.     //PREGUNTO AL CONTADOR PARA CORRER O NO EL SLEEP DE 30 SEG
  73.     if (i==1){
  74.     res.close();
  75.     sta.close();
  76.     in.close();}
  77.     else
  78.     Thread.sleep(30000);
  79.     }
  80.     }
  81.     }
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 04:58.