Database Repository - SQL Server 2008

Pendahuluan

Di dalam proses membangun solusi berbasis BI Platform Pentaho maka kita akan membuat sekumpulan files yang berisi data konfigurasi dan isi / content baik berupa file-file gambar maupun file / resources lainnya.

Kumpulan file tersebut dinamakan solution. Dan untuk mengorganisasikan dan administrasi kumpulan solution ini, platform Pentaho harus memiliki database yang dapat menjelaskan deskripsi dan siapa saja yang berhak untuk mengaksesnya. Database ini biasa disebut dengan database Solution Repository.

BI-Server 2.0 / 3.x Pre-Configured Installation (PCI)


Pada BI-Server 2.0 PCI - yang dapat Anda download dari situs Sourceforge - di dalamnya sudah terdapat default database repository menggunakan embedded database HSQLDB

Jika kita ingin mengganti dari HSQLDB ke database engine yang lain sangat memungkinkan. Untuk contoh berikut, kita akan mengganti database HSQLDB ke MS SQL Server 2008.

Mengubah Database Repository ke MySQL

Persiapan Database Pengganti di MS SQL Server

Konfigurasi Hibernate

Berikut adalah tahap-tahap untuk merubah database repository dari PCI :
  • Rubah konfigurasi file hibernate-settings.xml untuk menggunakan MS SQL Server 2008 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/

  • Rubah konfigurasi di file  [BI-SERVER]/pentaho_solutions/system/quartz/quartz.properties sebagai berikut : 


  • 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 dibentu dan dipopulasi ulang oleh BI Server. Screenshot berikut adalah 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 Error ?

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

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
Comments