SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
PHP e Java
ovvero
come poter sfruttare
entrambi i linguaggi e
vivere felici ... forse
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
● Relatore: Matteo Baccan matteo@baccan.it
● Data: Rimini 23/5/2008
● Area: Canale developers
● Target: Programmatori PHP, Java e semplici curiosi
● Difficoltà: Media-Bassa
PHP e Java sono due linguaggi che possono tranquillamente convivere
all’interno di applicazioni web.
Vedremo come è possibile utilizzare librerie Java all’interno di pagine PHP e
come è possibile utilizzare PHP all’interno di application server Java,
utilizzando un interprete scritto anch’esso in Java.
In questo modo è possibile sfruttare il meglio dei due mondi, e sfruttare i
propri skill php anche in ambienti nati per altri linguaggi
Tutto questo in 50 minuti :)
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Cosa vedremo
● PHP/Java bridge
● Quercus
● Qualche integrazione
● PHPMyAdmin
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
PHP Java Bridge: cosa ci serve
● PHP 5.2.2 (http://www.php.net/)
● Java 1.6.0 (http://java.sun.com/)
● PHP Java bridge 5.2.2 (http://php-java-bridge.sourceforge.net/)
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
PHP Java Bridge: come funziona?
Tramite la classe php Java, che sfrutta un protocollo di comunicazione socket based, vengono effettuate delle
chiamate chiamate verso un server Java.
$o = new java("java.lang.Long", 6);
-> <CreateInstance value="java.lang.Long" predicate="I">
<Long value="6"/>
</CreateInstance>
<- <Object value="1" predicate="O"/>
$o->toString(); // Converte in stringa
-> <Invoke value="1" method="toString" predicate="I">
</Invoke>
<- <Object value="2" predicate="O"/>
// fine codice
-> <Unref value="2" />
-> <Unref value="1" />
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Esecuzione Standalone
Esecuzione del server JavaBridge
java -jar JavaBridge.jar
May 22 16:59:06 VMBridge INFO : VM : 1.6.0_04@http://java.sun.com/
May 22 16:59:06 VMBridge INFO : VMBridge version : 5.2.2
May 22 16:59:06 VMBridge INFO : logFile : VMBridge.log
May 22 16:59:06 VMBridge INFO : default logLevel : 3
May 22 16:59:06 VMBridge INFO : socket : SERVLET_LOCAL:8080
May 22 16:59:06 VMBridge INFO : java.ext.dirs : c:ProgrammiJavajdk1.6.0_04jrelibext
May 22 16:59:06 VMBridge INFO : php.java.bridge.base: C:Documents and Settingsz-mbacc
May 22 16:59:06 VMBridge INFO : thread pool size : 20
May 22 16:59:06 VMBridge INFO : JavaBridgeRunner started on port INET_LOCAL:8080
Interrogabile da : http://localhost:8080/
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Esempio
Proviamo a creare un semplice oggetto StringBuffer e a valorizzaro
<?php
require_once("java/Java.inc");
// Creazione di un oggetto StringBuffer
$String = new java("java.lang.StringBuffer");
// Aggiuni elementi a StringBuffer
$String->append(new java("java.lang.String", "aggiungo 1 - "));
$String->append(new java("java.lang.String", "aggiungo 2 - "));
$String->append(new java("java.lang.String", "aggiungo 3"));
// Output
echo( $String );
?>
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Richiamiamo l'esempio da PHP (veloce – usa socket)
set path=%path%;....php-5.2.6-Win32
php <testStringBuffer.php
Richiamo l'esempio da Java (lento – esegue php.exe)
Imposto php.ini
include_path="c:downloadphpdayphp-java-bridge_5.2.2_j2eetest"
Chiama jrunscript (esecutore di JSR223: Scripting Pages in Java)
set path=%path%;....php-5.2.6-Win32
jrunscript -l php testStringBuffer.php
Stop JavaBridge
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Esecuzione all'interno di Tomcat 6.0.10
Esiste una Web Archive Repository già configurato per poter eseguire in
parallelo JSP e PHP sullo stesso server Java
webappsJavaBridge.war
http://localhost/JavaBridge/
DEMO: test.php (esecuzione)
sessionSharing.php/sessionSharing.jsp (sessioni)
numberguess.php/numberguess.jsp (bean)
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Esecuzione all'interno di JBoss
Proviamo lo stesso war anche su JBoss
serverdefaultdeployJavaBridge.war
http://localhost:8080/JavaBridge/
DEMO: sessionSharing.php/sessionSharing.jsp (sessioni)
numberguess.php/numberguess.jsp (bean)
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Quercus: cosa ci serve
● Java 1.6.0 (http://java.sun.com/)
● Quercus 3.1.6 (http://quercus.caucho.com)
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Quercus: come funziona
Quercus è una tecnologia Pure Java di Caucho, in grado di eseguire codice
PHP 5, rilasciata sotto una licenza Open Source GPL.
Quercus implementa molti moduli PHP ed estensioni, come PDF, PDO,
MySQL e JSON.
Quercus permette un'integrazione fra servizi Java e PHP script, in modo da
rendere semplice l'uso di PHP con le maggiori tecnologie Java.
In questo modo PHP eredita le maggiori feature degli application server Java,
come i connection pool e le sessioni clusterizzate
http://quercus.caucho.com
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Esecuzione all'interno di Tomcat
Esiste una Web Archive Repository già configurato per poter eseguire in
parallelo JSP e PHP sullo stesso server Java
webappsquercus-3.1.6.war
http://localhost/quercus-3.1.6/
DEMO: quercus
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Configurazione di quecus
Librerie da aggiungere alla WEB-INF
WEB-INFlib
quercus.jar
resin-util.jar
script-10.jar
Driver di connessione MySQL
mysql-connector-java-3.1.14-bin.jar
Personalizzazione di web.xml
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Configurazione di quecus
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<description>Caucho Technology's PHP Implementation</description>
<servlet>
<servlet-name>Quercus Servlet</servlet-name>
<servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Quercus Servlet</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.php</welcome-file>
</welcome-file-list>
</web-app>
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Esecuzione di PHPMyAdmin 2.11.6
Mentre col bridge utilizziamo direttamente PHP, con quercus il codice viene
reinterpretato. Proviamo a vedere come si comporta con alcuni famosi software
PHP
http://localhost/phpMyAdmin-2.11.6-english/
DEMO: phpMyAdmin
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Una prova sulla mia pelle: gestione eventi
http://localhost
DEMO: iscrizione alla palestra
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Conclusioni
Ha senso utilizzare Java in PHP?
Quanto sono stabili queste configurazioni?
Ha senso usare un prodotto come quercus?
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Alcuni link
● PHP 5.2.2 http://www.php.net/
● Java 1.6.0 http://java.sun.com/
● PHP Java bridge 5.2.2 http://php-java-bridge.sourceforge.net/
● JSR223 http://www.jcp.org/aboutJava/communityprocess/edr/jsr223/
● Quercus Quercus 3.1.6 http://quercus.caucho.com
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Matteo Baccan - matteo@baccan.it - JugNovara
PHPday Rimini - 23/5/2008
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License
PHP e Java
Matteo Baccan
Enterprise Architect
Email: matteo@baccan.it

Más contenido relacionado

Destacado

Gráfico junho 2010 colorido
Gráfico junho 2010 coloridoGráfico junho 2010 colorido
Gráfico junho 2010 colorido
Nelson Silva
 
Dr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Dr Andrew Larner - Maintaining & Improving Services in a time of AusterityDr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Dr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Paul McElvaney
 

Destacado (20)

Talking In Class
Talking In ClassTalking In Class
Talking In Class
 
Social media and job search
Social media and job searchSocial media and job search
Social media and job search
 
Gráfico junho 2010 colorido
Gráfico junho 2010 coloridoGráfico junho 2010 colorido
Gráfico junho 2010 colorido
 
Webtech 2010: facebook framework
Webtech 2010: facebook frameworkWebtech 2010: facebook framework
Webtech 2010: facebook framework
 
Learning Pool CELEB event
Learning Pool CELEB eventLearning Pool CELEB event
Learning Pool CELEB event
 
The shifting art of animal breeding
The shifting art of animal breedingThe shifting art of animal breeding
The shifting art of animal breeding
 
E-komunikacija: E-saopstenja (uvod u vebinar)
E-komunikacija: E-saopstenja (uvod u vebinar)E-komunikacija: E-saopstenja (uvod u vebinar)
E-komunikacija: E-saopstenja (uvod u vebinar)
 
090613 Ideo
090613 Ideo090613 Ideo
090613 Ideo
 
Presentatie avans1
Presentatie avans1Presentatie avans1
Presentatie avans1
 
110117 markets
110117 markets110117 markets
110117 markets
 
IT User Apprenticeship at Happy Computers
IT User Apprenticeship at Happy ComputersIT User Apprenticeship at Happy Computers
IT User Apprenticeship at Happy Computers
 
制服設計
制服設計制服設計
制服設計
 
Lezing VakdagDM
Lezing VakdagDMLezing VakdagDM
Lezing VakdagDM
 
Dr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Dr Andrew Larner - Maintaining & Improving Services in a time of AusterityDr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Dr Andrew Larner - Maintaining & Improving Services in a time of Austerity
 
The Big Bang of the Internet of Things
The Big Bang of the Internet of ThingsThe Big Bang of the Internet of Things
The Big Bang of the Internet of Things
 
¿Qué Es Liderazgo 2008 Mayo
¿Qué Es Liderazgo 2008 Mayo¿Qué Es Liderazgo 2008 Mayo
¿Qué Es Liderazgo 2008 Mayo
 
Ethics And Values
Ethics And ValuesEthics And Values
Ethics And Values
 
Presentatie ANWB
Presentatie  ANWBPresentatie  ANWB
Presentatie ANWB
 
Social media school 2011 webversie
Social media school 2011 webversieSocial media school 2011 webversie
Social media school 2011 webversie
 
Kvkvkvk
KvkvkvkKvkvkvk
Kvkvkvk
 

Similar a Phpday 2009 php e java

Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
Tommaso Torti
 

Similar a Phpday 2009 php e java (20)

Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Link. java server faces [santi caltabiano]
  Link. java server faces [santi caltabiano]  Link. java server faces [santi caltabiano]
Link. java server faces [santi caltabiano]
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al java
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)Working between the clouds (versione completa)
Working between the clouds (versione completa)
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - Gatein
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
 
J2EE 5 - Esempio Carrello Elettronico
J2EE 5 - Esempio Carrello ElettronicoJ2EE 5 - Esempio Carrello Elettronico
J2EE 5 - Esempio Carrello Elettronico
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
SCBCD 1. generic ejb
SCBCD 1. generic ejbSCBCD 1. generic ejb
SCBCD 1. generic ejb
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - Tiger
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the clouds
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Stanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al PrgressiveStanco delle solite Web App? Passa al Prgressive
Stanco delle solite Web App? Passa al Prgressive
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
8. Architetture web
8. Architetture web8. Architetture web
8. Architetture web
 

Más de Matteo Baccan

Confsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkConfsl 2010 Facebook Framework
Confsl 2010 Facebook Framework
Matteo Baccan
 

Más de Matteo Baccan (20)

Gmail e google app
Gmail e google appGmail e google app
Gmail e google app
 
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
 
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo baccan   raspberry pi - linox 2015 - corso parte 3Matteo baccan   raspberry pi - linox 2015 - corso parte 3
Matteo baccan raspberry pi - linox 2015 - corso parte 3
 
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo baccan   raspberry pi - linox 2015 - corso parte 2Matteo baccan   raspberry pi - linox 2015 - corso parte 2
Matteo baccan raspberry pi - linox 2015 - corso parte 2
 
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo baccan   raspberry pi - linox 2015 - corso parte 1Matteo baccan   raspberry pi - linox 2015 - corso parte 1
Matteo baccan raspberry pi - linox 2015 - corso parte 1
 
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
 
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
 
Confsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkConfsl 2010 Facebook Framework
Confsl 2010 Facebook Framework
 
Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3
 
Codemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerCodemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search Server
 
Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programming
 
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programming
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: Aspectj
 
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java Programming
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4java
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php framework
 
Javaday 2010: Facebook Java Framework
Javaday 2010: Facebook Java FrameworkJavaday 2010: Facebook Java Framework
Javaday 2010: Facebook Java Framework
 

Phpday 2009 php e java

  • 1. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java PHP e Java ovvero come poter sfruttare entrambi i linguaggi e vivere felici ... forse
  • 2. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java ● Relatore: Matteo Baccan matteo@baccan.it ● Data: Rimini 23/5/2008 ● Area: Canale developers ● Target: Programmatori PHP, Java e semplici curiosi ● Difficoltà: Media-Bassa PHP e Java sono due linguaggi che possono tranquillamente convivere all’interno di applicazioni web. Vedremo come è possibile utilizzare librerie Java all’interno di pagine PHP e come è possibile utilizzare PHP all’interno di application server Java, utilizzando un interprete scritto anch’esso in Java. In questo modo è possibile sfruttare il meglio dei due mondi, e sfruttare i propri skill php anche in ambienti nati per altri linguaggi Tutto questo in 50 minuti :)
  • 3. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Cosa vedremo ● PHP/Java bridge ● Quercus ● Qualche integrazione ● PHPMyAdmin
  • 4. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java PHP Java Bridge: cosa ci serve ● PHP 5.2.2 (http://www.php.net/) ● Java 1.6.0 (http://java.sun.com/) ● PHP Java bridge 5.2.2 (http://php-java-bridge.sourceforge.net/)
  • 5. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java PHP Java Bridge: come funziona? Tramite la classe php Java, che sfrutta un protocollo di comunicazione socket based, vengono effettuate delle chiamate chiamate verso un server Java. $o = new java("java.lang.Long", 6); -> <CreateInstance value="java.lang.Long" predicate="I"> <Long value="6"/> </CreateInstance> <- <Object value="1" predicate="O"/> $o->toString(); // Converte in stringa -> <Invoke value="1" method="toString" predicate="I"> </Invoke> <- <Object value="2" predicate="O"/> // fine codice -> <Unref value="2" /> -> <Unref value="1" />
  • 6. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Esecuzione Standalone Esecuzione del server JavaBridge java -jar JavaBridge.jar May 22 16:59:06 VMBridge INFO : VM : 1.6.0_04@http://java.sun.com/ May 22 16:59:06 VMBridge INFO : VMBridge version : 5.2.2 May 22 16:59:06 VMBridge INFO : logFile : VMBridge.log May 22 16:59:06 VMBridge INFO : default logLevel : 3 May 22 16:59:06 VMBridge INFO : socket : SERVLET_LOCAL:8080 May 22 16:59:06 VMBridge INFO : java.ext.dirs : c:ProgrammiJavajdk1.6.0_04jrelibext May 22 16:59:06 VMBridge INFO : php.java.bridge.base: C:Documents and Settingsz-mbacc May 22 16:59:06 VMBridge INFO : thread pool size : 20 May 22 16:59:06 VMBridge INFO : JavaBridgeRunner started on port INET_LOCAL:8080 Interrogabile da : http://localhost:8080/
  • 7. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Esempio Proviamo a creare un semplice oggetto StringBuffer e a valorizzaro <?php require_once("java/Java.inc"); // Creazione di un oggetto StringBuffer $String = new java("java.lang.StringBuffer"); // Aggiuni elementi a StringBuffer $String->append(new java("java.lang.String", "aggiungo 1 - ")); $String->append(new java("java.lang.String", "aggiungo 2 - ")); $String->append(new java("java.lang.String", "aggiungo 3")); // Output echo( $String ); ?>
  • 8. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Richiamiamo l'esempio da PHP (veloce – usa socket) set path=%path%;....php-5.2.6-Win32 php <testStringBuffer.php Richiamo l'esempio da Java (lento – esegue php.exe) Imposto php.ini include_path="c:downloadphpdayphp-java-bridge_5.2.2_j2eetest" Chiama jrunscript (esecutore di JSR223: Scripting Pages in Java) set path=%path%;....php-5.2.6-Win32 jrunscript -l php testStringBuffer.php Stop JavaBridge
  • 9. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Esecuzione all'interno di Tomcat 6.0.10 Esiste una Web Archive Repository già configurato per poter eseguire in parallelo JSP e PHP sullo stesso server Java webappsJavaBridge.war http://localhost/JavaBridge/ DEMO: test.php (esecuzione) sessionSharing.php/sessionSharing.jsp (sessioni) numberguess.php/numberguess.jsp (bean)
  • 10. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Esecuzione all'interno di JBoss Proviamo lo stesso war anche su JBoss serverdefaultdeployJavaBridge.war http://localhost:8080/JavaBridge/ DEMO: sessionSharing.php/sessionSharing.jsp (sessioni) numberguess.php/numberguess.jsp (bean)
  • 11. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Quercus: cosa ci serve ● Java 1.6.0 (http://java.sun.com/) ● Quercus 3.1.6 (http://quercus.caucho.com)
  • 12. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Quercus: come funziona Quercus è una tecnologia Pure Java di Caucho, in grado di eseguire codice PHP 5, rilasciata sotto una licenza Open Source GPL. Quercus implementa molti moduli PHP ed estensioni, come PDF, PDO, MySQL e JSON. Quercus permette un'integrazione fra servizi Java e PHP script, in modo da rendere semplice l'uso di PHP con le maggiori tecnologie Java. In questo modo PHP eredita le maggiori feature degli application server Java, come i connection pool e le sessioni clusterizzate http://quercus.caucho.com
  • 13. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Esecuzione all'interno di Tomcat Esiste una Web Archive Repository già configurato per poter eseguire in parallelo JSP e PHP sullo stesso server Java webappsquercus-3.1.6.war http://localhost/quercus-3.1.6/ DEMO: quercus
  • 14. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Configurazione di quecus Librerie da aggiungere alla WEB-INF WEB-INFlib quercus.jar resin-util.jar script-10.jar Driver di connessione MySQL mysql-connector-java-3.1.14-bin.jar Personalizzazione di web.xml
  • 15. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Configurazione di quecus <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> <web-app> <description>Caucho Technology's PHP Implementation</description> <servlet> <servlet-name>Quercus Servlet</servlet-name> <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Quercus Servlet</servlet-name> <url-pattern>*.php</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.php</welcome-file> </welcome-file-list> </web-app>
  • 16. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Esecuzione di PHPMyAdmin 2.11.6 Mentre col bridge utilizziamo direttamente PHP, con quercus il codice viene reinterpretato. Proviamo a vedere come si comporta con alcuni famosi software PHP http://localhost/phpMyAdmin-2.11.6-english/ DEMO: phpMyAdmin
  • 17. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Una prova sulla mia pelle: gestione eventi http://localhost DEMO: iscrizione alla palestra
  • 18. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Conclusioni Ha senso utilizzare Java in PHP? Quanto sono stabili queste configurazioni? Ha senso usare un prodotto come quercus?
  • 19. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Alcuni link ● PHP 5.2.2 http://www.php.net/ ● Java 1.6.0 http://java.sun.com/ ● PHP Java bridge 5.2.2 http://php-java-bridge.sourceforge.net/ ● JSR223 http://www.jcp.org/aboutJava/communityprocess/edr/jsr223/ ● Quercus Quercus 3.1.6 http://quercus.caucho.com
  • 20. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java
  • 21. Matteo Baccan - matteo@baccan.it - JugNovara PHPday Rimini - 23/5/2008 Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License PHP e Java Matteo Baccan Enterprise Architect Email: matteo@baccan.it