Quercus é unha implementación de PHP5 en Java. O meu experimento parte da idea de poder ter un portal Joomla! 1.5 aloxado nun servidor de aplicacións Java e poder acceder a outras
libreríasbibliotecas, código, API, ... en Java.
A interoperabilidade entre Java e PHP5 pode poñerse máis de moda cando Google App Engine vén de anunciar que xa é posible desenvolver en Java na súa plataforma. Este feito, xunto co desexo de moitos de desenvolver en PHP, fai que Google tamén esté a traballar nesa dirección, pero polo momento é posible
programar con PHP en Google App Engine botando man de Quercus.
Outro proxecto a ter moi en conta é a ponte PHP/Java (
PHP/Java Bridge). Fai uns anos probei, con éxito, a conectar PHP coa base de datos HSQLDB; agora xa conta polo visto cunha maior estabilidade e xa leva máis traballo ás costas, podendo interoperar tamén con código .NET.
Pasos para a instalación de J! 1.5 sobre Quercus:
-
-
Instalación de Tomcat, eu xa o tiña instalado, en concreto unha versión 5.5 (xa sei que debería actualizarme, pero na miña casa funciona ;-)
-
No directorio webapps do Tomcat copiamos o ficheiro .war de quercus e arrincamos Tomcat. Esto fará que se descomprima o ficheiro .war e crearase un directorio en webapps/quercus-3.1.6/
-
Descargamos dentro do directorio de Quercus unha versión de
Joomla!
-
Incorporamos o ficheiro de configuración dunha instalación xa feita e eliminamos o directorio de instalación. Este paso é necesario para non ter que facer a instalación de Joomla!, xa que o instalador da un erro.
-
Inda que a documentación indica uns cambios a facer no ficheiro webapps/quercus-3.1.6/WEB-INF/web.xml eu non o toquei e creei un ficheiro novo no mesmo directorio chamado resin-web.xml co seguinte contido:
<web-app xmlns="http://caucho.com/ns/resin">
<database>
<jndi-name>jdbc/joomla</jndi-name>
<driver>
<type>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</type>
<url>jdbc:mysql://localhost:3306/joomla155</url>
<user>root</user>
<password>root</password>
</driver>
</database>
<servlet servlet-name="resin-php" servlet-class="com.caucho.quercus.servlet.QuercusServlet"/>
<servlet-mapping url-pattern="*.php" servlet-name="resin-php">
<init>
<script-encoding>UTF-8</script-encoding>
<database>java:comp/env/jdbc/joomla</database>
</init>
</servlet-mapping>
</web-app>
Neste ficheiro indícase a configuración coa base de datos. Cando no código PHP se faga unha chamada a mysql_connect ignoraranse os parámetros e a conexión farase a través de JDBC con esta configuración. Sobra decir que deberemos cambiar os valores nas tags url, user e password.
-
Para que a conectividade coa base de datos funcione é necesario ter incluido o driver JDBC de MySQL no directorio webapps/WEB-INF/lib/mysql-connector-java-5.0.5-bin.jar
-
-
Unha vez feito isto é cando van aparecendo algúns erros:
Que a función htmlspecialchars_decode non está definida, tanto no site coma na administración. O certo é que esta función non está dispoñible ata a versión 5.1.0 de PHP, lendo na documentación atopamos o seguinte: htmlspecialchars_decode (PHP 5 >= 5.1.0RC1)
Se temos un ficheiro coa chamada a phpinfo() podemos ver que Quercus devolve que está a traballar cun motor PHP 5.2.0 (no meu caso), pero sen embargo non dispón de dita función.

Pantallazo da saída da sentencia phpinfo() empregando Quercus
Para solventar este erro temos que editar os ficheiros seguintes:
/includes/application.php na liña 245 e engadimos unha nova liña antes da chamada a función co seguinte código:
require_once(dirname(__FILE__).'/../libraries/joomla/utilities/compat/php51x.php');
facemos o mesmo para a parte de administración e editamos o ficheiro /administrator/includes/application.php na liña 127 engadindo o require (OLLO non é igual ao código anterior, fixádevos no path):
require_once(dirname(__FILE__).'/../../libraries/joomla/utilities/compat/php51x.php');
- Agora xa é posible ver a páxina e navegar polo Joomla. Aparecerá un warning cando vaiamos a parte de administración. Ven a dicir que a función session_start precisa dun parámetro. A solución (workaround) que apliquei é poñer unha arroba para que non amose o erro, xa que polo resto a aplicación parece funcionar correctamente (NOTA MENTAL: revisar sesións con PHP sobre Quercus).
Ficheiro webapps/quercus-3.1.6/libraries/joomla/session/session.php na liña 413:
@session_start( TRUE );
Espero conseguir cousas interesantes a partires de agora traballando con PHP5 e Java conxuntamente para ter aplicacións das dúas plataformas traballando da man.