mirror of
https://github.com/php/doc-es.git
synced 2026-03-29 01:42:12 +01:00
- Corregidas algunas traducciones defectuosas. - Añadidos muchos acentos que faltaban. git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@189256 c90b9560-bf6c-de11-be94-00142212c4b1
240 lines
9.1 KiB
XML
240 lines
9.1 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision: 1.2 $ -->
|
|
<!-- EN-Revision: 1.12 Maintainer: javi Status: ready -->
|
|
<reference id="ref.java">
|
|
<title>Integración de Java y PHP</title>
|
|
<titleabbrev>Java</titleabbrev>
|
|
<partintro>
|
|
|
|
<section id="java.intro">
|
|
&reftitle.intro;
|
|
<para>
|
|
Existen dos formas diferentes de integrar PHP y Java: en primer lugar,
|
|
<link linkend="java.servlet">se puede integrar PHP dentro de un entorno
|
|
de ejecución de servlets de Java</link>, que en estos momentos es una solución más estable y más eficiente.
|
|
La segunda opción es la de integrar Java dentro de PHP. La primera forma de integración se realiza a traves de un módulo SAPI que actua como interfaz del servidor de servlets. La segunda forma se realiza mediante esta extensión de Java.
|
|
</para>
|
|
<para>
|
|
Esta extensión de Java proporciona de forma sencilla los medios necesarios para crear e invocar métodos sobre objetos de Java desde PHP. La JVM se crea utilizando JNI y todo se ejecuta en un unico proceso.
|
|
</para>
|
|
&warn.experimental;
|
|
</section>
|
|
|
|
<section id="java.requirements">
|
|
&reftitle.required;
|
|
<para>
|
|
Para utilizar esta extensión es necesario disponer de una
|
|
máquina virtual Java (JVM) instalada en el sistema.
|
|
</para>
|
|
</section>
|
|
|
|
&reference.java.configure;
|
|
|
|
&reference.java.ini;
|
|
|
|
<section id="java.resources">
|
|
&reftitle.resources;
|
|
&no.resource;
|
|
</section>
|
|
|
|
<section id="java.constants">
|
|
&reftitle.constants;
|
|
&no.constants;
|
|
</section>
|
|
|
|
<section id="java.examples">
|
|
&reftitle.examples;
|
|
<para>
|
|
<example>
|
|
<title>Ejemplo de Java</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// se obtiene la instancia de la clase de Java java.lang.System desde PHP
|
|
$system = new Java('java.lang.System');
|
|
|
|
// ejemplo de acceso a las propiedades de Java
|
|
print 'Version de Java='.$system->getProperty('java.version').' <br>';
|
|
print 'Desarrollador de la JVM=' .$system->getProperty('java.vendor').' <br>';
|
|
print 'Sistema Operativo='.$system->getProperty('os.name').' '.
|
|
$system->getProperty('os.version').' on '.
|
|
$system->getProperty('os.arch').' <br>';
|
|
|
|
// ejemplo de java.util.Date
|
|
$formatter = new Java('java.text.SimpleDateFormat',
|
|
"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
|
|
|
|
print $formatter->format(new Java('java.util.Date'));
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<example>
|
|
<title>Ejemplo de AWT</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Este ejemplo solo puede ser ejecutado como CGI.
|
|
|
|
$frame = new Java('java.awt.Frame', 'PHP');
|
|
$button = new Java('java.awt.Button', 'Hola Mundo de Java!');
|
|
|
|
$frame->add('North', $button);
|
|
$frame->validate();
|
|
$frame->pack();
|
|
$frame->visible = True;
|
|
|
|
$thread = new Java('java.lang.Thread');
|
|
$thread->sleep(10000);
|
|
|
|
$frame->dispose();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
|
|
Notas:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>new Java()</literal> crea una nueva instancia de una clase
|
|
solamente si existe un constructor adecuado. Si no se le pasan
|
|
parámetros, debe existir un constructor por defecto adecuado,
|
|
como por ejemplo en el caso de <literal>java.lang.System</literal> que
|
|
permite el acceso a la mayoría de sus funcionalidade a través de
|
|
metodos estáticos.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Al acceder a los miembros de una instancia, en primer lugar se
|
|
buscarán las propiedades del bean y en segundo lugar los
|
|
miembros publicos. En otras palabras, <literal>print $date.time</literal>
|
|
se intentará resolver en primer lugar como <literal>$date.getTime()</literal>
|
|
y posteriormente como <literal>$date.time</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Tanto los miembros estáticos como los miembros de una instancia de un
|
|
objeto pueden ser accedidos utilizando la misma sintaxis. Ademas, si el objeto
|
|
es de tipo <literal>java.lang.Class</literal>, entonces se puede acceder
|
|
a los miembros estaticos de la clase (tanto los atributos como los metodos).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Las excepciones que se lanzan durante la ejecución se
|
|
transforman en avisos de tipo "warning" de PHP y en resultados de tipo &null;.
|
|
Los avisos de tipo "warning" se pueden eliminar añadiendo el prefijo
|
|
"@" a la llamada del metodo. Las siguientes funciones de la API se pueden
|
|
utilizar para obtener y borrar el ultimo error surgido:
|
|
<itemizedlist>
|
|
<listitem><simpara><function>java_last_exception_get</function></simpara></listitem>
|
|
<listitem><simpara><function>java_last_exception_clear</function></simpara></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
La resolución de la sobrecarga es uno de los problemas mas
|
|
dificiles de resolver dadas las grandes diferencias entre PHP y Java
|
|
en el tema del "tipado" de las variables. Esta extensión utiliza un
|
|
metodo simple pero muy efectivo para determinar cual es la mejor decisión
|
|
a tomar cuando se produce la sobrecarga.
|
|
</simpara>
|
|
<simpara>
|
|
Ademas, los nombres de los métodos en PHP no distinguen entre
|
|
mayusculas y minusculas, por lo que se aumenta elnúmero de posibilidades
|
|
para elegir en las situaciones de sobrecarga.
|
|
</simpara>
|
|
<simpara>
|
|
Una vez seleccionado el método, los parámetros se transforman
|
|
si es necesario, incluso con la posibilidad de perder datos (por ejemplo,
|
|
los números de tipo "double" se transforman en tipo boolean) (Nota del traductor: esta conversion parece totalmente absurda, asi que puede tratarse de un fallo de la documentación de la version original).
|
|
<!-- FIXME Why aren't java-doubles converted to PHP-floats? Is this
|
|
correct? -->
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
En PHP, las variables de tipo "array" y "hashtable" pueden ser utilizadas de
|
|
forma indistinta. En PHP, las hashtables solo pueden incluir en las
|
|
claves variables de tipo integer o string. Ademas, en Java los arrays
|
|
cuyas variables son de algun tipo primitivo, no pueden contener huecos.
|
|
Por ultimo, se debe recordar que este tipo de variables se pasan por valor,
|
|
por lo que pueden llegar a consumir una cantidad apreciable de memoria y de tiempo.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</section>
|
|
|
|
<section id="java.servlet">
|
|
<title>SAPI de los servlets Java</title>
|
|
<para>
|
|
Basandose en el mismo mecanismo que la extension de Java de PHP, la SAPI de
|
|
los servlets Java permite ejecutar PHP como un servlet de Java. La ventaja
|
|
más significativa de esta forma de actuar es que se aprovechan las
|
|
características de "pooling" y de reutilización de recursos
|
|
implementadas por la mayoría de servidores que permiten ejecutar servlets.
|
|
El archivo <filename>php4/sapi/README</filename> contiene las instrucciones necesarias
|
|
para compilar el modulo SAPI para los servlets Java.
|
|
|
|
Notas:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Aunque, en principio, este código podría ser ejecutado en cualquier
|
|
servidor que permita la ejecución de servlets, solo se ha probado en
|
|
el servidor Jakarta/Tomcat desarrollado por la fundación Apache. Por
|
|
ese motivo, cualquier información sobre la forma de ejecutarlo en
|
|
otros servidores, los errores encontrados, las soluciones planteadas,
|
|
etc...sera una información muy apreciada y que animamos a que los
|
|
desarrolladores envien a los responsables del desarrollo del proyecto
|
|
PHP.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Se pueden producir conflictos entre PHP y SAPI con respecto al
|
|
directorio de trabajo. Mientras PHP se está ejecutando, el servidor de
|
|
servlets no podrá cargar ninguna clase que se encuentre en el
|
|
CLASSPATH si su ruta se especifica de forma relativa y tampoco podrá
|
|
encontrar el directorio de trabajo utilizado para las tareas de
|
|
administración y compilación de JSP.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</section>
|
|
</partintro>
|
|
|
|
&reference.java.functions;
|
|
|
|
</reference>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|
|
|