vifito.eu

Web Development & Open Source

  • Aumentar el tamaño de la letra
  • Tamaño de letra predeterminado
  • Reducir el tamaño de la letra

Joomla! 1.5 sobre Tomcat con Quercus


Quercus es una implementación de PHP5 en Java. Mi experimento parte de la idea de poder tener un portal Joomla! 1.5 alojado en un servidor de aplicaciones Java y poder acceder a otras bibliotecas, código, API, ... en Java.

La interoperabilidad entre Java y PHP5 puede ponerse más de moda cuando Google App Engine viene de anunciar que ya es posible desarrollar en Java en su plataforma. Este hecho, junto con el deseo de muchos de desarrollar en PHP, hace que Google también esté a trabajar en esa dirección, pero por el momento es posible programar con PHP en Google App Engine usando Quercus.

Otro proyecto a tener muy en cuenta es el puente 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 la instalación de J! 1.5 sobre Quercus:

  • Descargar Quercus (versión 3.1.6 en mi caso).
  • Instalación de Tomcat, en concreto una versión 5.5
  • En el directorio webapps del Tomcat copiamos el fichero .war de quercus e iniciamos Tomcat. Esto hará que se descomprima el fichero .war y se creará un directorio en webapps/quercus-3.1.6/
  • Descargamos dentro del directorio de Quercus una versión de Joomla!
  • IMPORTANTE: Incorporamos el fichero de configuración de una instalación existente y eliminamos el directorio de instalación. Este paso es necesario para no tener que hacer la instalación de Joomla!, ya que el instalador da un error.
  • 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> <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>
</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 );
 

 

joomla-quercus
Pantallazo de Joomla! 1.5 trabajando sobre Quercus

 

 

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.