Home    | Software    | Articoli    | Tips'n Tricks    | Contattaci    | Supportaci  
Home arrow Articoli arrow Utilizzare applicativi PHP in Resin

Utilizzare applicativi PHP in Resin

Mi entusiasma la potenza di Java e di vari prodotti quali OpenJMS, Hibernate, Spring, JMX etc. E lo stesso vale per l'approccio semplice, immediato e produttivo del PHP nello sviluppo dei front-end. Uso costantemente entrambi i linguaggi insieme, di solito esponendo servizi Java al PHP tramite SOAP o Xml-Rpc.
Ma quanto sarebbe meglio poter istanziare oggetti Java direttamente da uno script PHP?

Negli ultimi anni, a più riprese ho utilizzato l'estensione Java rilasciata con il motore PHP, ma per svariate ragioni non ne sono mai stato pienamente soddisfatto.
Recentemente ho scoperto Quercus, un'implementazione del PHP 100% Java integrata all'interno di Resin, il meritatamente noto motore open source di Caucho. E' stata subito un'esperienza molto proficua è ho già spostato alcuni miei applicativi PHP sotto Resin/Quercus senza intoppi.
Qui vorrei spiegare passo passo come allestire un ambiente il più simile possibile a quello "nativo" del PHP. Come fare
Dò per scontato che sia già installato un JDK. Ora si può scricare la versione open source di Resin da Caucho e decomprimerla. Da ora in poi mi riferirò alla directory principale di Resin con '%RESIN%' per comodità. Le directory bin,conf e webapps conterranno ciò che ci si aspetta.

Resin ha già un applicativo web di default in webapps/ROOT. Utilizzeremo questo per semplicità.
I files PHP in Resin sono gestiti da QuercusServlet, quindi dobbiamo istruire Resin. Creiamo un file web.xml in webapps/ROOT/WEB-INF con il seguente contenuto:

<web-app xmlns="http://caucho.com/ns/resin">
<servlet-mapping url-pattern="*.php"
servlet-class="com.caucho.quercus.servlet.QuercusServlet">
<init>
<compile>false</compile>
</init>
</servlet-mapping>
</web-app>


Questo è tutto ciò che serve per eseguire semplici script php. Facciamo partire/ripartire Resin e mettiamo in webapps/ROOT/ un file test.php contenente:

<?php
phpinfo();
?>

                       
 

e facciamo puntare il browser a http://127.0.0.1:8080/test.php per vedere il risultato di phpinfo(). Ok, abbastanza semplice, ma non un esempio "vero".
Quando lavoro in PHP, di solito ho almeno la seguente struttura di directory:

  • site che è quella pubblicamente accessibile(la document root)
  • php che contiene classi accessorie e librerie
(per il momento ignoriamo logs, templates etc.) e di solito ho un file prepend.php che viene eseguito prima di ogni script e che tengo nella directory php con le altre librerie.
La directory site in resin è la document root (in questo caso webapps/ROOT/), quindi posso non preoccuparmene; devo invece valorizzare include_path e auto_prepend, normalmente definite in php.ini(o .htaccess) sotto Apache. Qui non abbiamo php.ini, ma dobbiamo usare web.xml, che modificato risulterà così:

<web-app xmlns="http://caucho.com/ns/resin">
<servlet-mapping url-pattern="*.php"
servlet-class="com.caucho.quercus.servlet.QuercusServlet">
<init>
<compile>false</compile>
<php-ini
include_path=".:%RESIN/webapps/ROOT/WEB-INF/php"
auto_prepend_file="prepend.php"
/>
</init>
</servlet-mapping>
</web-app>


In questo caso l'ordine di ricerca per include() o require() sarà prima la directory corrente e poi webapps/ROOT/WEB-INF/php(da creare). Se utilizziamo PEAR o altre librerie, qui dovremo aggiungerne il percorso. Con auto_prepend definiamo prepend.php(da creare), da cercare in include_path.
Ora il nostro ambiente è molto più simile a quello abituale con il PHP nativo,ma manca ancora una caratteristica fondamentale: la connettività a database.
Nessun problema, ancora una volta è molto semplice.
Primo, apriamo %RESIN%/conf/resin.conf e cerchiamo la sezione di database. Troveremo un modello di configurazione per un 'pool' commentata. Decommentiamola e se il motore di db usato è per esempio mysql, modifichiamola ad ottenere qualcosa tipo:

 <database>
<jndi-name>jdbc/mysql</jndi-name>
<driver type="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<url>jdbc:mysql://localhost:3306/your_db_name</url>
<user>your_username</user>
<password>your_password</password>
</driver>
<prepared-statement-cache-size>8</prepared-statement-cache-size>
<max-connections>20</max-connections>
<max-idle-time>30s</max-idle-time>
</database>

                  
 

e salviamo. Non dimentichiamo di scaricare Connector/J e di mettere il jar in %RESIN%/lib.
L'ultima modifica va fatta nel nostro web.xml, aggiungendo la seguente riga dentro la sezione "<init>" (quella che contiene anche <php-ini>):

 <database>jdbc/mysql</database> 

                        
 

e salviamo. Tutto qui. Ora, posto che il path di PEAR sia indicato in include_path e che il modulo PEAR DB sia installato, possiamo lanciare uno script come questo:

<?php
require_once 'DB.php';
$dbh = DB::connect('mysql', false);
if (PEAR::isError($dbh)) {
die($dbh->getMessage());
}
$results=& $dbh->query("select * from your_table");
while($results->fetchInto($row, DB_FETCHMODE_ASSOC)){
echo "<pre>";
print_r($row);
echo "</pre>";
}

?>


Questa è solo metà dell'immagine, dato che la parte più interessante è l'integrazione fra Java e PHP, ma questa è un'altra storia.....

Hasta la proxima.
 
< Prec.   Pros. >

  Articles RSS feed

Articoli pił recenti
Software pił recenti
   
designed by allmambo.com