Joomla! 1.5 sobre Tomcat con Quercus

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:

  • Descargar Quercus (versión 3.1.6 no meu caso).
  • 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
  • Podes descargar o driver dende a seguinte ligazón: http://dev.mysql.com/downloads/connector/j/5.0.html
  • 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.

phpinfo-quercus
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.
Última actualización 2012-08-23
11:42 AM (Europe/Madrid)
Data de creación 2009-04-18
4:16 PM (Europe/Madrid)
Joomla! 1.5 sobre Tomcat con Quercus
joomla cms java

Relacionados