Merubah Database Solution Repository

posted Oct 3, 2010, 5:28 PM by Feris Thia   [ updated Oct 4, 2010, 6:56 PM ]
Di dalam proses membangun solusi berbasis BI Platform Pentaho maka kita akan memiliki beberapa kumpulan file :
  • konfigurasi 
  • workflow (.xaction)
  • resource file Pentaho seperti file report, job / transformation Kettle, dan lain-lain
Kumpulan file tersebut dinamakan solution dari Pentaho dan biasa ditempatkan pada folder "pentaho-solutions" di BI Server. 

Oleh BI Server sendiri, untuk mengorganisasikan dan menentukan hak akses user atas kumpulan solution ini maka platform harus memiliki database yang menyimpan deskripsi, lokasi dan hak akses file-file di atas. Database ini biasa disebut dengan Solution Repository.

Pada BI-Server 2.0 dan 3.0 PCI (Pre Configured Installation) di dalamnya sudah terdapat default database repository menggunakan embedded database HSQLDB. Artinya jika kita tidak perlu bersusah payah melakukan instalasi database terpisah.
Namun dalam prakteknya, penggunaan HSQLDB ini dirasakan banyak kekurangan jika dibandingkan produk database lain yang sudah mature seperti SQL Server, Oracle, MySQL, dll. 

Jadi, apakah memindahkan repository tersebut ke produk database lain memungkinkan ? Tentu saja !

Artikel berikut akan memberikan contoh bagaimana hal itu dilakukan untuk pergantian ke MySQL.

Mengubah Database Repository ke MySQL

Persiapan Database Pengganti di MySQL

  • Buat database baru dengan nama hibernate dan quartz. Nama keduanya bisa diganti sesuai keinginan kita, disini hanya mengikuti standar contoh Pentaho.
  • Copy library jdbc mysql ke folder [ROOT]/tomcat/webapps/pentaho/WEB-INF/lib


Konfigurasi Hibernate

Berikut adalah tahap-tahap untuk merubah database repository dari PCI :
  • Rubah konfigurasi file hibernate-settings.xml untuk menggunakan MySQL di folder [BI-SERVER]/pentaho-solutions/system/hibernate


    File : hibernate-settings.xml

    <?xml version='1.0' encoding='utf-8'?>
    <settings>

      <!--
      * This setting allows the deployment to specify where to find the
      * database-specific hibernate configuration. The samples supplied
      * include the following:
      *
      * system/hibernate/hsql.hibernate.cfg.xml
      * system/hibernate/mysql5.hibernate.cfg.xml
      * system/hibernate/postgresql.hibernate.cfg.xml
      * system/hibernate/oracle10g.hibernate.cfg.xml
      *
      -->
        <config-file>system/hibernate/mysql5.hibernate.cfg.xml</config-file>

      <!--
      *
      * managed should be set to true if running the BI Platform
      * in a managed environment (like JBoss, Orion, etc). In this configuration,
      * you should specify another location for the hibernate.cfg.xml (see below)
      * instead of simply using the default one provided. This setting essentially
      * tells the HibernateUtil class to use JNDI to locate the factory class for
      * getting sessions. This allows the platform to use Hibernate across boundaries
      * in message beans (for example).
      *
        <managed>false</managed>
      -->

        <managed>false</managed>
    </settings>


    mysql5.hibernate.cfg.xml

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration
      PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
      <session-factory>
     
          <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

        <property name="hibernate.generate_statistics">true</property>
        <property name="hibernate.cache.use_query_cache">true</property>
     
        <!--  MySQL Configuration -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <property name="connection.username">root</property>
        <property name="connection.password">password</property>

        <property name="connection.pool_size">10</property>
        <property name="show_sql">false</property>
        <property name="hibernate.jdbc.use_streams_for_binary">true</property>
        <!-- replaces DefinitionVersionManager -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- load resource from classpath -->
        <mapping resource="hibernate/mysql5innodb.hbm.xml" />
        <!--  This is only used by Pentaho Administration Console. Acegi will not use these mapping files -->   
        <mapping resource="PentahoUser.hbm.xml" />
        <mapping resource="PentahoRole.hbm.xml" />
       
      </session-factory>
    </hibernate-configuration>


Konfigurasi Security

  • Rubah konfigurasi acegi (access control list framework) di file [BI-SERVER]/pentaho_solutions/system/applicationContext-acegi-security-hibernate.properties dengan konfigurasi database MySQL kita. Konfigurasi berupa informasi driver dan connection string terhadap database yang bersangkutan. Untuk daftar konfigurasi database lainnya bisa coba dilihat di halaman Daftar Connection String JDBC

    Update !

    Untuk versi 3.x file yang diubah bukan applicationContext-acegi-security-hibernate.properties, tapi :     
    applicationContext-spring-security-hibernate.properties

    File: applicationContext-spring-security-hibernate.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost/hibernate?user=root
    jdbc.username=root
    jdbc.password=password
    hibernate.dialect=org.hibernate.dialect.MySQLDialect


    Catatan : Selain connection string, kita juga perlu memasukkan dialect Hibernate. Bisa dilihat referensinya di http://www.javabeat.net/qna/163-list-of-hibernate-sql-dialects/

  • Jika Anda menggunakan MySQL maka konfigurasi di file  [BI-SERVER]/pentaho_solutions/system/quartz/quartz.properties tidak perlu diubah. Kecuali jika Anda menggunakan database lain seperti daftar di bawah ini, maka  opsi dari org.quartz.jobStore.driverDelegateClass perlu diubah sesuai dengan nilai konfigurasi yang juga tertera pada tabel di bawah ini.

     Database System
     Nilai Opsi yang Benar
     Microsoft SQL Server  org.quartz.impl.jdbcjobstore.MSSQLDelegate
     PostgreSQL
     org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
     WebLogic  org.quartz.impl.jdbcjobstore.WebLogicDelegate
     Oracle  org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
     Lainnya (JDBC-compliant drivers)
     org.quartz.impl.jdbcjobstore.StdJDBCDelegate

  • Edit file  [BI-SERVER]/tomcat/webapps/pentaho/META-INF/context.xml sesuai dengan konfigurasi database kita. Sebagai contoh lihat konfigurasi di bawah ini.



    context.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/pentaho" docbase="webapps/pentaho/">
        <Resource name="jdbc/Hibernate" auth="Container" type="javax.sql.DataSource"
            factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxActive="20" maxIdle="5"
            maxWait="10000" username="root" password="password"
            driverClassName="
    com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/hibernate"
            validationQuery="select 1"
    />
           
        <Resource name="jdbc/Quartz" auth="Container" type="javax.sql.DataSource"
            factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxActive="20" maxIdle="5"
            maxWait="10000" username="root" password="password"
            driverClassName="
    com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/quartz"
            validationQuery="select 1"
    />
    </Context>


  • Start / Restart server Anda
  • Database hibernate dan quartz akan dibentuk dan dipopulasi ulang oleh BI Server. Screenshot berikut menunjukkan tampilan daftar table untuk database hibernate dan quartz dengan PHPMyAdmin






  • Cobalah login dengan user joe. Apabila sukses maka akses dengan repository DB baru telah berhasil dilakukan.

Refresh Repository Cache

  • Pada saat awal login ada kemungkinan semua menu selain "Steel Wheels" tidak muncul atau seperti hilang begitu saja. Untuk itu cobalah melakukan "Refresh Repository Cache" (Tools -> Refresh -> Repository Cache)



  • Selesai

Hapus Database Repository HSQLDB (hibernate & quartz)

  • Untuk menghindari kebingungan repository mana yang digunakan maka sebaiknya kita membuang database hibernate dan quartz yang sudah tidak diperlukan dari HSQLDB.
  • Hapus 4 file dari folder [BI-SERVER]/data atau [BI-SERVER]/data/hsqldb, yaitu :
    • hibernate.properties
    • hibernate.script
    • quartz.properties
    • quartz.script
  • Edit file [BI-SERVER]/data/start_hypersonic.bat seperti di bawah ini. Tujuannya agar Hypersonic/HSQLDB hanya menjalankan database sampledata.




    Text Box

    @Echo Off

    REM ---------------------------------------------
    REM - Create the classpath for this application -
    REM ---------------------------------------------
    SET tempclasspath=
    SET libdir=.\lib

    FOR /f "delims=" %%a IN ('dir %libdir%\hsqldb*.jar /b /a-d') DO call :addToClasspath %%a
    GOTO :startApp

    :addToClasspath
    IF "%tempclasspath%"=="" SET tempclasspath=%libdir%\%1& GOTO :end
    SET tempclasspath=%tempclasspath%;%libdir%\%1
    GOTO :end

    REM -----------------------
    REM - Run the application -
    REM -----------------------
    :startApp
    SET command=java -cp %tempclasspath% org.hsqldb.Server -database.0 hsqldb\sampledata -dbname.0 sampledata
    echo %command%
    %command%
    exit

    :end


  • Dan ubah juga file stop_hypersonic.bat disesuaikan dengan baris berwarna merah berikut :

    Text Box

    @Echo Off

    setlocal 

    REM ---------------------------------------------
    REM - Create the classpath for this application -
    REM ---------------------------------------------
    SET tempclasspath=
    SET libdir=.\lib

    FOR /f "delims=" %%a IN ('dir %libdir%\hsqldb*.jar /b /a-d') DO call :addToClasspath %%a
    GOTO :startApp

    :addToClasspath
    IF "%tempclasspath%"=="" SET tempclasspath=%libdir%\%1& GOTO :end
    SET tempclasspath=%tempclasspath%;%libdir%\%1
    GOTO :end

    REM -----------------------
    REM - Run the application -
    REM -----------------------
    :startApp
    FOR %%b IN (sampledata) DO call :runCommand %%b 
    GOTO end

    :runCommand

    if exist "%~dp0..\jre" call "%~dp0set-pentaho-java.bat" "%~dp0..\jre"
    if not exist "%~dp0..\jre" call "%~dp0set-pentaho-java.bat"

    "%_PENTAHO_JAVA%" -cp %tempclasspath% org.hsqldb.util.ShutdownServer -url "jdbc:hsqldb:hsql://localhost/%1" -user "SA" -password ""
    echo %command%
    %command%
    GOTO :end

    :end



  • Jalankan BI Server Anda dengan mengeksekusi script start-pentaho.bat
  • Apabila semua berjalan dengan baik maka database HSQL di folder [BI-SERVER]/data/hsqldb akan tampak seperti gambar berikut ini :



Troubleshooting


Masalah yang kadang terjadi dari setting di atas adalah kadang database quartz tidak berhasil terbentuk dan mengakibatkan error. Penggalan pesan error tersebut adalah seperti berikut ini :  

Quartz ERROR

ERROR [org.pentaho.platform.util.logging.Logger] misc-org.pentaho.platform.scheduler.QuartzSystemListener: QuartzSystemListener.ERROR_0001 - Scheduler was not properly initialized at startup
org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.JobPersistenceException: Couldn't clean volatile data: Table 'quartz.qrtz_triggers' doesn't exist [See nested exception: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'quartz.qrtz_triggers' doesn't exist]]


Pemecahan

  • Karena database quartz yang hilang maka Anda perlu mengeksekusi semua script yang ada di folder [BI-SERVER]/data/mysql5


  • Atau Anda bisa download dan eksekusi 2 script sql di akhir artikel wiki (mysql_quartz_database_creation.sql dan mysql_hibernate_database_datasource_table.sql)
  • Restart Server Anda
  • Selesai

Masih Memiliki Kendala ?

Silahkan bergabung dan deskripsikan masalah Anda ke user group Pentaho Indonesia di http://groups.google.com/group/pentaho-id.

Sumber Referensi

Catatan Tambahan

  • [BI-Server] disini merujuk ke folder instalasi Pentaho BI Server, misalkan pada screenshot-screenshot di atas [BI-Server] menunjuk ke folder C:\biserver-ce
ċ
mysql_hibernate_database_datasource_table.sql
(0k)
Feris Thia,
Oct 3, 2010, 5:30 PM
ċ
mysql_quartz_database_creation.sql
(5k)
Feris Thia,
Oct 3, 2010, 5:30 PM
Comments