20 de febrero de 2011

Tutorial: Cómo acceder Sybase desde PHP en Java EE, usando GlassFish y Quercus

Image of Duke and PHP togetherEn mi tutorial anterior, ejecuté PHP en Java EE usando GlassFish y Quercus. Hoy, accedí una base de datos Sybase ASE desde PHP en un servidor Java EE.
  1. Instalé Sybase.
    1. Descargué e instalé la versión de desarrollo de Sybase Adaptive Server Enterprise 15.5 (enlace directo). La instalación me tomó bastante tiempo.
    2. Inicié la base de datos: inicié el servicio de Windows llamado Sybase SQLServer.
    3. Verifiqué la conexión a Sybase. En la línea de comandos de Windows, ejecuté:
      %SYBASE%\%SYBASE_OCS%\bin\isql -Usa -P
      Estando en el prompt de isql, ejecuté:
      select @@version
      go

      (A propósito, el usuario administrador es sa e inicialmente no tiene contraseña).
  2. Creé una base de prueba.
    1. En el prompt de isql, ejecuté:
      create database base_prueba
      go

    2. Creé su database owner:
      sp_addlogin dbo_base_prueba, password
      use base_prueba
      sp_changedbowner dbo_base_prueba
      sp_modifylogin dbo_base_prueba, defdb, base_prueba
      go
      exit
  3. Creé una tabla de prueba.
    1. Me conecté como dbo:
      %SYBASE%\%SYBASE_OCS%\bin\isql -Udbo_base_prueba -Ppassword
    2. Creé la tabla:
      create table Tabla1 (valor int)
      insert into Tabla1 values (12345)
      go
  4. Creé el DataSource en GlassFish.
    • Copié el driver JDBC de Sybase: copié el archivo Sybase\jConnect-6_0\classes\jconn3.jar al directorio glassfish\domains\domain1\lib\ext, y reinicié GlassFish.
    • Creé el connection pool, especificando la clase del driver como com.sybase.jdbc3.jdbc.SybDataSource.
    • Creé el DataSource y como nombre JNDI escribí jdbc/base.
  5. Creé una aplicación para ejecutar PHP en Java EE.
    • Usando mi tutorial anterior, creé una aplicación llamada HolaSybasePHP:
      • HolaSybasePHP.war
        • hola.php
        • WEB-INF
          • web.xml
          • lib
            • resin.jar
  6. Especifiqué el DataSource en la aplicación.
    • Agregué las siguientes líneas antes del tag final del archivo web.xml de mi aplicación:
      <resource-ref>
        <res-ref-name>jdbc/base</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>
  7. Modifiqué la página PHP.
    • Usé PDO (portable database object) de PHP 5:
      <p>Hola Sybase desde PHP.</p>
      <?php
      $pdo = new PDO("java:comp/env/jdbc/base");
      echo "<table border=1>"
      $sql = "SELECT valor FROM Tabla1";
      foreach ($pdo->query($sql) as $renglon) {
         echo "<tr><td>$renglon[valor]</td></tr>";
      }
      echo "</table>"
      ?>
  8. Finalmente, accedí http://localhost:8080/HolaSybasePHP/hola.php:
Una imagen del navegador de Internet mostrando en su interior Hola Sybase desde PHP 12345

Libros que espero te sean útiles (lista automática):

2 comentarios:

  1. Hola, con que driver de PDO te conectaste con sybase?? ODBC o PDO_DBLIB??

    ResponderBorrar
    Respuestas
    1. ¡Hola! Pues mira, no usé ninguno de los dos. Más bien, Querqus intercepta las llamadas al PDO y las implementa usando JDBC. Es decir, implementa la clase PDO usando el datasource especificado en GlassFish. Espero esto te aclare tu duda. Si no, avísame :)

      Borrar