1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
|
<?xml version="1.0" encoding="iso-8859-1"?>
<reference id="ref.java">
<title>Java</title>
<titleabbrev>PHP / Java Integration</titleabbrev>
<partintro>
<para>
Es gibt zwei Wege, um die Welten von Java und PHP zu verbinden. Einerseits
besteht die Mglichkeit PHP in eine Java Servlet Umgebung zu integrieren,
andererseits kann man mit der Java Extension aus PHP heraus auf Java Klassen
zugreifen. Die erste der beiden genannten Mglichkeit ist wesentlich
stabiler und performanter als die zweitgenannte Lsung.
</para>
<para>
Die Java Erweiterung fr PHP nutzt das Object Overloading von PHP 4 um auf
Java Klassen zuzugreifen. Die Java Virtual Machine (JVM) wird hierbei ber
das Java Native Interface (JNI) erzeugt. Eine detaillierte
Installationsbeschreibung entnehmen Sie bitte der Datei
<filename>php4/ext/java/README</filename>.
<example>
<title>Zugriff auf Java Klassen aus PHP heraus</title>
<programlisting role="php">
<?php
// In PHP Instanz der Java Klasse java.lang.System erzeugen
$system = new Java('java.lang.System');
// Zugriff auf die Objekteigenschaften
print 'Java version='.$system->getProperty('java.version').' <br>';
print 'Java vendor=' .$system->getProperty('java.vendor').' <br>';
print 'OS='.$system->getProperty('os.name').' '.
$system->getProperty('os.version').' on '.
$system->getProperty('os.arch').' <br>';
// java.util.Date Beispiel
$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>Zugriff auf Java AWT aus PHP heraus</title>
<programlisting role="php">
<?php
// Dieses Beispiel kann nur als CGI ausgefhrt werden.
$frame = new Java('java.awt.Frame', 'PHP');
$button = new Java('java.awt.Button', 'Hallo Java Welt!');
$frame->add('North', $button);
$frame->validate();
$frame->pack();
$frame->visible = True;
$thread = new Java('java.lang.Thread');
$thread->sleep(10000);
$frame->dispose();
?>
</programlisting>
</example>
Notes:
<itemizedlist>
<listitem>
<simpara>
<literal>new Java()</literal> erzeugt eine Instanz der angegebenen Java
Klasse, falls ein geeigneter Konstruktur gefunden wird. Fr den Zugriff
auf Klassen mit statischen Methoden bentigt man keinen Parameter.
</simpara>
</listitem>
<listitem>
<simpara>
Beim Zugriff auf Mitglieder (Members) einer Instanz wird zunchst nach
Bean Eigenschaften gesucht, danach erst nach ffentlichen (public)
Eigenschaften. Mit anderen Worten: Es wird zuerst versucht werden, zum
Beispiel <literal>print $date.time</literal> als
<literal>$date.getTime()</literal> zu interpretieren, danach erst wird
<literal>$date.time</literal> versucht werden.
</simpara>
</listitem>
<listitem>
<simpara>
Der Zugriff auf statische und Instanzeigenschaften erfolgt mit der selben
Syntax.
</simpara>
</listitem>
<listitem>
<para>
Das Auslsen einer Java Exception resultiert in einer PHP Warnung und
einem NULL Ergebnis. Folgende Funktionen ermglichen den Zugriff auf die
eigentlichen Exceptions:
<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>
Traditionell knnen Arrays und Hashes in PHP weitestgehend als
gleichwertig angesehen werden. Beim Austausch dieser Datentypen zwischen
PHP und Java ist zu beachten, dass Hashes in PHP nur mit Integer- und
Stringwerten indiziert werden knnen und Arrays von primitiven Datentypen
in Java nicht dnn besetzt sein drfen. Ferner ist zu beachten, dass
diese Datenstrukturen by-Value bergeben werden, was ungnstig in Bezug
auf Speicher- und Zeitbedarf sein kann.
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
Das PHP 4 Servlet SAPI Modul baut auf dem von der Java Extension zur
Verfgung gestellten Mechanismus auf, allerdings wird der PHP Prozessor
hierbei von einer Servlet Engine, wie zum Beispiel Apache Jakarta / Tomcat,
ausgefhrt. Dies fhrt zu einer wesentlich hheren Stabilitt und besserer
Performance als der umgekehrte Weg, wie in die Java Extension an sich
anbietet. Dies kommt daher, dass die Servlet Engine sich um das Pooling und
die Wiederverwendung von Java Virtual Machines (JVMs) kmmert. Eine
detaillierte Anleitung zur Integration von PHP in eine Servlet Engine
entnehmen Sie bitte der Datei <filename>php4/sapi/README</filename>.
Bemerkungen:
<itemizedlist>
<listitem>
<simpara>
Das Servlet SAPI Modul sollte zwar auf jeder Java Servlet Engine
funktionieren, wurde aber bislang nur in Verbindung mit Apache
Jakarta/Tomcat getestet. Meldungen von Problem - aber auch von
Erfolgserlebnissen - bei der Verendung mit anderen Servlet Engines werden
dankbar aufgenommen.
</simpara>
</listitem>
<listitem>
<simpara>
PHP hat die Angewohnheit das aktuelle Arbeitsverzeichnis (CWD) zu ndern.
sapi/servlet wird versuchen, den alten Zustand wieder herzustellen.
Whrend PHP luft kann es sein, dass die Servlet Engine kann Klassen aus
dem CLASSPATH finden kann, die ber relative Pfade angesprochen werden.
</simpara>
</listitem>
</itemizedlist>
</para>
</partintro>
<refentry id="function.java-last-exception-clear">
<refnamediv>
<refname>java_last_exception_clear</refname>
<refpurpose>Letzte Java Exception freigeben</refpurpose>
</refnamediv>
<refsect1>
<title>Beschreibung</title>
<methodsynopsis>
<type>void</type><methodname>java_last_exception_clear</methodname>
<void/>
</methodsynopsis>
</refsect1>
</refentry>
<refentry id="function.java-last-exception-get">
<refnamediv>
<refname>java_last_exception_get</refname>
<refpurpose>Letzte Java Exception holen</refpurpose>
</refnamediv>
<refsect1>
<title>Beschreibung</title>
<methodsynopsis>
<type>exception</type><methodname>java_last_exception_get</methodname>
<void/>
</methodsynopsis>
<para>
Das nachstehende Beispiel demonstriert die Verarbeitung von Java Exceptions
aus PHP heraus:
<example>
<title>Verarbeitung von Java Exceptions</title>
<programlisting role="php">
<?php
$stack = new Java('java.util.Stack');
$stack->push(1);
// Sollte funktionieren
$result = $stack->pop();
$ex = java_last_exception_get();
if (!$ex) print "$result\n";
// Sollte nicht funktionieren (Fehler mit @ unterdrckt)
$result = @$stack->pop();
$ex = java_last_exception_get();
if ($ex) print $ex->toString();
// Exception freigeben
java_last_exception_clear();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
</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:
-->
|