Skip to content
This repository has been archived by the owner on Feb 14, 2023. It is now read-only.

Commit

Permalink
Use pooled connection for jackrabbit and CDF
Browse files Browse the repository at this point in the history
  • Loading branch information
zhicwu committed Oct 31, 2017
1 parent e00d492 commit e720f29
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 37 deletions.
113 changes: 76 additions & 37 deletions docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -62,54 +62,93 @@ update_db() {
: ${DATABASE_PORT:="3306"}
: ${DATABASE_USER:="$BISERVER_USER"}
: ${DATABASE_PASSWD:="$BISERVER_USER"}
: ${DATABASE_HIBERNATE:="pbi_hibernate"}
: ${DATABASE_HIBERNATE_URL:="jdbc:mysql://$DATABASE_HOST:DATABASE_PORT/$DATABASE_HIBERNATE"}
: ${DATABASE_QUARTZ:="pbi_quartz"}
: ${DATABASE_QUARTZ_URL:="jdbc:mysql://$DATABASE_HOST:DATABASE_PORT/$DATABASE_QUARTZ"}
: ${DATABASE_REPOSITORY:="pbi_jackrabbit"}
: ${DATABASE_REPOSITORY_URL:="jdbc:mysql://$DATABASE_HOST:DATABASE_PORT/$DATABASE_REPOSITORY"}
: ${DATABASE_VALIDATION_QUERY:="SELECT 1"}
: ${DATABASE_TYPE:="mysql"}
: ${DATABASE_VALIDATION_QUERY:="SELECT 1"}
: ${DATABASE_MAX_ACTIVE:="20"}
: ${DATABASE_MAX_IDLE:="5"}
: ${DATABASE_MAX_WAIT:="10000"}

: ${DATABASE_HIBERNATE:="hibernate"}
: ${DATABASE_HIBERNATE_DIALECT:="$DATABASE_DIALECT"}
: ${DATABASE_HIBERNATE_DRIVER:="$DATABASE_DRIVER"}
: ${DATABASE_HIBERNATE_HOST:="$DATABASE_HOST"}
: ${DATABASE_HIBERNATE_PORT:="$DATABASE_PORT"}
: ${DATABASE_HIBERNATE_USER:="$DATABASE_USER"}
: ${DATABASE_HIBERNATE_PASSWD:="$DATABASE_PASSWD"}
: ${DATABASE_HIBERNATE_URL:="jdbc:mysql://$DATABASE_HIBERNATE_HOST:$DATABASE_HIBERNATE_PORT/$DATABASE_HIBERNATE"}
: ${DATABASE_HIBERNATE_VALIDATION_QUERY:="$DATABASE_VALIDATION_QUERY"}
: ${DATABASE_HIBERNATE_MAX_ACTIVE:="$DATABASE_MAX_ACTIVE"}
: ${DATABASE_HIBERNATE_MAX_IDLE:="$DATABASE_MAX_IDLE"}
: ${DATABASE_HIBERNATE_MAX_WAIT:="$DATABASE_MAX_WAIT"}

: ${DATABASE_QUARTZ:="quartz"}
: ${DATABASE_QUARTZ_DRIVER:="$DATABASE_DRIVER"}
: ${DATABASE_QUARTZ_HOST:="$DATABASE_HOST"}
: ${DATABASE_QUARTZ_PORT:="$DATABASE_PORT"}
: ${DATABASE_QUARTZ_USER:="$DATABASE_USER"}
: ${DATABASE_QUARTZ_PASSWD:="$DATABASE_PASSWD"}
: ${DATABASE_QUARTZ_TYPE:="$DATABASE_TYPE"}
: ${DATABASE_QUARTZ_URL:="jdbc:mysql://$DATABASE_QUARTZ_HOST:$DATABASE_QUARTZ_PORT/$DATABASE_QUARTZ"}
: ${DATABASE_QUARTZ_VALIDATION_QUERY:="$DATABASE_VALIDATION_QUERY"}
: ${DATABASE_QUARTZ_MAX_ACTIVE:="$DATABASE_MAX_ACTIVE"}
: ${DATABASE_QUARTZ_MAX_IDLE:="$DATABASE_MAX_IDLE"}
: ${DATABASE_QUARTZ_MAX_WAIT:="$DATABASE_MAX_WAIT"}

: ${DATABASE_REPOSITORY:="jackrabbit"}
: ${DATABASE_REPOSITORY_DRIVER:="$DATABASE_DRIVER"}
: ${DATABASE_REPOSITORY_HOST:="$DATABASE_HOST"}
: ${DATABASE_REPOSITORY_PORT:="$DATABASE_PORT"}
: ${DATABASE_REPOSITORY_USER:="$DATABASE_USER"}
: ${DATABASE_REPOSITORY_PASSWD:="$DATABASE_PASSWD"}
: ${DATABASE_REPOSITORY_TYPE:="$DATABASE_TYPE"}
: ${DATABASE_REPOSITORY_URL:="jdbc:mysql://$DATABASE_REPOSITORY_HOST:$DATABASE_REPOSITORY_PORT/$DATABASE_REPOSITORY"}
: ${DATABASE_REPOSITORY_VALIDATION_QUERY:="$DATABASE_VALIDATION_QUERY"}
: ${DATABASE_REPOSITORY_MAX_ACTIVE:="$DATABASE_MAX_ACTIVE"}
: ${DATABASE_REPOSITORY_MAX_IDLE:="$DATABASE_MAX_IDLE"}
: ${DATABASE_REPOSITORY_MAX_WAIT:="$DATABASE_MAX_WAIT"}

/bin/cp -f $BISERVER_HOME/pentaho-solutions/system/jackrabbit/repository.xml.template $BISERVER_HOME/pentaho-solutions/system/jackrabbit/repository.xml \
&& sed -i -e 's|\(jdbc.driver=\).*|\1'"$DATABASE_DRIVER"'|' pentaho-solutions/system/applicationContext-spring-security-hibernate.properties \
&& sed -i -e 's|\(jdbc.url=\).*|\1'"$DATABASE_HIBERNATE_URL"'|' pentaho-solutions/system/applicationContext-spring-security-hibernate.properties \
&& sed -i -e 's|\(jdbc.username=\).*|\1'"$DATABASE_USER"'|' pentaho-solutions/system/applicationContext-spring-security-hibernate.properties \
&& sed -i -e 's|\(jdbc.password=\).*|\1'"$DATABASE_PASSWD"'|' pentaho-solutions/system/applicationContext-spring-security-hibernate.properties \
&& sed -i -e 's|\(hibernate.dialect=\).*|\1'"$DATABASE_DIALECT"'|' pentaho-solutions/system/applicationContext-spring-security-hibernate.properties \
&& sed -i -e 's|\(datasource.driver.classname=\).*|\1'"$DATABASE_DRIVER"'|' pentaho-solutions/system/applicationContext-spring-security-jdbc.properties \
&& sed -i -e 's|\(datasource.url=\).*|\1'"$DATABASE_HIBERNATE_URL"'|' pentaho-solutions/system/applicationContext-spring-security-jdbc.properties \
&& sed -i -e 's|\(datasource.username=\).*|\1'"$DATABASE_USER"'|' pentaho-solutions/system/applicationContext-spring-security-jdbc.properties \
&& sed -i -e 's|\(datasource.password=\).*|\1'"$DATABASE_PASSWD"'|' pentaho-solutions/system/applicationContext-spring-security-jdbc.properties \
&& sed -i -e 's|\(datasource.validation.query=\).*|\1'"$DATABASE_VALIDATION_QUERY"'|' pentaho-solutions/system/applicationContext-spring-security-jdbc.properties \
&& sed -i -e 's|\(<config-file>\).*\(</config-file>\)|\1system/hibernate/'"$STORAGE_TYPE"'.hibernate.cfg.xml\2|' pentaho-solutions/system/hibernate/hibernate-settings.xml \
&& sed -i -e 's|\(<property name="connection.driver_class">\).*\(</property>\)|\1'"$DATABASE_DRIVER"'\2|' pentaho-solutions/system/hibernate/${STORAGE_TYPE}.hibernate.cfg.xml \
&& sed -i -e 's|\(<property name="connection.url">\).*\(</property>\)|\1'"$DATABASE_HIBERNATE_URL"'\2|' pentaho-solutions/system/hibernate/${STORAGE_TYPE}.hibernate.cfg.xml \
&& sed -i -e 's|\(<property name="dialect">\).*\(</property>\)|\1'"$DATABASE_DIALECT"'\2|' pentaho-solutions/system/hibernate/${STORAGE_TYPE}.hibernate.cfg.xml \
&& sed -i -e 's|\(<property name="connection.username">\).*\(</property>\)|\1'"$DATABASE_USER"'\2|' pentaho-solutions/system/hibernate/${STORAGE_TYPE}.hibernate.cfg.xml \
&& sed -i -e 's|\(<property name="connection.password">\).*\(</property>\)|\1'"$DATABASE_PASSWD"'\2|' pentaho-solutions/system/hibernate/${STORAGE_TYPE}.hibernate.cfg.xml \
&& sed -i -e 's|\(jdbc.driver=\).*|\1'"$DATABASE_HIBERNATE_DRIVER"'|' \
-e 's|\(jdbc.url=\).*|\1'"$DATABASE_HIBERNATE_URL"'|' \
-e 's|\(jdbc.username=\).*|\1'"$DATABASE_HIBERNATE_USER"'|' \
-e 's|\(jdbc.password=\).*|\1'"$DATABASE_HIBERNATE_PASSWD"'|' \
-e 's|\(hibernate.dialect=\).*|\1'"$DATABASE_HIBERNATE_DIALECT"'|' pentaho-solutions/system/applicationContext-spring-security-hibernate.properties \
&& sed -i -e 's|\(datasource.driver.classname=\).*|\1'"$DATABASE_HIBERNATE_DRIVER"'|' \
-e 's|\(datasource.url=\).*|\1'"$DATABASE_HIBERNATE_URL"'|' \
-e 's|\(datasource.username=\).*|\1'"$DATABASE_HIBERNATE_USER"'|' \
-e 's|\(datasource.password=\).*|\1'"$DATABASE_HIBERNATE_PASSWD"'|' \
-e 's|\(datasource.validation.query=\).*|\1'"$DATABASE_HIBERNATE_VALIDATION_QUERY"'|' pentaho-solutions/system/applicationContext-spring-security-jdbc.properties \
-e 's|\(<config-file>\).*\(</config-file>\)|\1system/hibernate/'"$STORAGE_TYPE"'.hibernate.cfg.xml\2|' pentaho-solutions/system/hibernate/hibernate-settings.xml \
&& sed -i -e 's|\(<session-factory>\)|\1\n <!-- using container-managed JNDI -->\n <property name="hibernate.connection.datasource">java:comp/env/jdbc/Hibernate</property>|' \
-e 's|\(<property name="dialect">\).*\(</property>\)|\1'"$DATABASE_HIBERNATE_DIALECT"'\2|' \
-e 's|\(<property name="connection.driver_class">\).*\(</property>\)|<!-- \1'"$DATABASE_HIBERNATE_DRIVER"'\2 -->|' \
-e 's|\(<property name="connection.url">\).*\(</property>\)|<!-- \1'"$DATABASE_HIBERNATE_URL"'\2 -->|' \
-e 's|\(<property name="connection.username">\).*\(</property>\)|<!-- \1'"$DATABASE_HIBERNATE_USER"'\2 -->|' \
-e 's|\(<property name="connection.password">\).*\(</property>\)|<!-- \1'"$DATABASE_HIBERNATE_PASSWD"'\2 -->|' pentaho-solutions/system/hibernate/${STORAGE_TYPE}.hibernate.cfg.xml \
&& sed -i -e 's|\(org.quartz.jobStore.driverDelegateClass\).*|\1 = org.quartz.impl.jdbcjobstore.StdJDBCDelegate|' pentaho-solutions/system/quartz/quartz.properties \
&& sed -i -e 's|@@DRIVER@@|'"$DATABASE_DRIVER"'|' pentaho-solutions/system/jackrabbit/repository.xml \
&& sed -i -e 's|@@URL@@|'"$DATABASE_REPOSITORY_URL"'|' pentaho-solutions/system/jackrabbit/repository.xml \
&& sed -i -e 's|@@USER@@|'"$DATABASE_USER"'|' pentaho-solutions/system/jackrabbit/repository.xml \
&& sed -i -e 's|@@PASSWD@@|'"$DATABASE_PASSWD"'|' pentaho-solutions/system/jackrabbit/repository.xml \
&& sed -i -e 's|@@DB_TYPE@@|'"$DATABASE_TYPE"'|' pentaho-solutions/system/jackrabbit/repository.xml \
&& sed -i -e 's|@@DRIVER@@|'"$DATABASE_REPOSITORY_DRIVER"'|' \
-e 's|@@URL@@|'"$DATABASE_REPOSITORY_URL"'|' \
-e 's|@@USER@@|'"$DATABASE_REPOSITORY_USER"'|' \
-e 's|@@PASSWD@@|'"$DATABASE_REPOSITORY_PASSWD"'|' \
-e 's|@@DB_TYPE@@|'"$DATABASE_REPOSITORY_TYPE"'|' \
-e 's|@@VALIDATION_QUERY@@|'"$DATABASE_REPOSITORY_VALIDATION_QUERY"'|' \
-e 's|@@POOL_SIZE@@|'"$DATABASE_REPOSITORY_MAX_ACTIVE"'|' pentaho-solutions/system/jackrabbit/repository.xml \
&& cat <<< "<?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='${DATABASE_USER}' password='${DATABASE_PASSWD}'
driverClassName='${DATABASE_DRIVER}' url='${DATABASE_HIBERNATE_URL}'
validationQuery='${DATABASE_VALIDATION_QUERY}' />
factory='org.apache.commons.dbcp.BasicDataSourceFactory' maxActive='${DATABASE_HIBERNATE_MAX_ACTIVE}' maxIdle='${DATABASE_HIBERNATE_MAX_IDLE}'
maxWait='${DATABASE_QUARTZ_MAX_WAIT}' username='${DATABASE_HIBERNATE_USER}' password='${DATABASE_HIBERNATE_PASSWD}'
driverClassName='${DATABASE_HIBERNATE_DRIVER}' url='${DATABASE_HIBERNATE_URL}'
validationQuery='${DATABASE_HIBERNATE_VALIDATION_QUERY}' />
<Resource name='jdbc/Quartz' auth='Container' type='javax.sql.DataSource'
factory='org.apache.commons.dbcp.BasicDataSourceFactory' maxActive='20' maxIdle='5'
maxWait='10000' username='${DATABASE_USER}' password='${DATABASE_PASSWD}'
driverClassName='${DATABASE_DRIVER}' url='${DATABASE_QUARTZ_URL}'
validationQuery='${DATABASE_VALIDATION_QUERY}' />
factory='org.apache.commons.dbcp.BasicDataSourceFactory' maxActive='${DATABASE_QUARTZ_MAX_ACTIVE}' maxIdle='${DATABASE_REPOSITORY_MAX_IDLE}'
maxWait='${DATABASE_QUARTZ_MAX_WAIT}' username='${DATABASE_QUARTZ_USER}' password='${DATABASE_QUARTZ_PASSWD}'
driverClassName='${DATABASE_QUARTZ_DRIVER}' url='${DATABASE_QUARTZ_URL}'
validationQuery='${DATABASE_QUARTZ_VALIDATION_QUERY}' />
</Context>" > tomcat/webapps/pentaho/META-INF/context.xml

/usr/local/bin/wait-for-it.sh -t 0 $DATABASE_HOST:$DATABASE_PORT -- echo Database is UP
for i in $(echo "$DATABASE_HIBERNATE_HOST:$DATABASE_HIBERNATE_PORT $DATABASE_QUARTZ_HOST:$DATABASE_QUARTZ_PORT $DATABASE_REPOSITORY_HOST:$DATABASE_REPOSITORY_PORT" | tr ' ' '\n' | uniq); do echo /usr/local/bin/wait-for-it.sh -t 0 $i -- echo Database $i is UP; done
}

init_biserver() {
Expand Down
34 changes: 34 additions & 0 deletions repository.xml.template
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,22 @@
"http://jackrabbit.apache.org/dtd/repository-2.0.dtd">

<Repository>
<!--
The following configuration is based on https://wiki.apache.org/jackrabbit/ConnectionPooling.
Might be better than JNDI approach documented at https://wiki.apache.org/jackrabbit/UsingJNDIDataSource
-->
<DataSources>
<DataSource name="pbiJcr">
<param name="driver" value="@@DRIVER@@" />
<param name="url" value="@@URL@@" />
<param name="user" value="@@USER@@" />
<param name="password" value="@@PASSWD@@" />
<param name="databaseType" value="@@DB_TYPE@@"/>
<param name="validationQuery" value="@@VALIDATION_QUERY@@"/>
<param name="maxPoolSize" value="@@POOL_SIZE@@"/>
</DataSource>
</DataSources>

<!--
virtual file system where the repository stores global state
(e.g. registered namespaces, custom node types, etc.).
Expand All @@ -41,11 +57,14 @@
-->

<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<!--
<param name="driver" value="@@DRIVER@@"/>
<param name="url" value="@@URL@@"/>
<param name="user" value="@@USER@@"/>
<param name="password" value="@@PASSWD@@"/>
<param name="schema" value="@@DB_TYPE@@"/>
-->
<param name="dataSourceName" value="pbiJcr"/>
<param name="schemaObjectPrefix" value="fs_repos_"/>
</FileSystem>

Expand All @@ -62,6 +81,7 @@
-->

<DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore">
<!--
<param name="url" value="@@URL@@"/>
<param name="user" value="@@USER@@"/>
<param name="password" value="@@PASSWD@@"/>
Expand All @@ -71,6 +91,8 @@
<param name="maxConnections" value="5"/>
<param name="copyWhenReading" value="true"/>
<param name="tablePrefix" value=""/>
-->
<param name="dataSourceName" value="pbiJcr"/>
<param name="schemaObjectPrefix" value="ds_repos_"/>
</DataStore>

Expand Down Expand Up @@ -141,11 +163,14 @@
-->

<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<!--
<param name="driver" value="@@DRIVER@@"/>
<param name="url" value="@@URL@@"/>
<param name="user" value="@@USER@@"/>
<param name="password" value="@@PASSWD@@"/>
<param name="schema" value="@@DB_TYPE@@"/>
-->
<param name="dataSourceName" value="pbiJcr"/>
<param name="schemaObjectPrefix" value="fs_ws_"/>
</FileSystem>

Expand All @@ -163,11 +188,14 @@
-->

<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.MySqlPersistenceManager">
<!--
<param name="driver" value="@@DRIVER@@"/>
<param name="url" value="@@URL@@"/>
<param name="user" value="@@USER@@" />
<param name="password" value="@@PASSWD@@" />
<param name="schema" value="@@DB_TYPE@@"/>
-->
<param name="dataSourceName" value="pbiJcr"/>
<param name="schemaObjectPrefix" value="${wsp.name}_pm_ws_"/>
</PersistenceManager>

Expand Down Expand Up @@ -223,11 +251,14 @@ value="{0}/etc;org.pentaho.security.publish;jcr:read,jcr:readAccessControl,jcr:w
documentation for further explanation.
-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<!--
<param name="driver" value="@@DRIVER@@"/>
<param name="url" value="@@URL@@"/>
<param name="user" value="@@USER@@"/>
<param name="password" value="@@PASSWD@@"/>
<param name="schema" value="@@DB_TYPE@@"/>
-->
<param name="dataSourceName" value="pbiJcr"/>
<param name="schemaObjectPrefix" value="fs_ver_"/>
</FileSystem>

Expand All @@ -246,11 +277,14 @@ value="{0}/etc;org.pentaho.security.publish;jcr:read,jcr:readAccessControl,jcr:w
documentation for further explanation.
-->
<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.MySqlPersistenceManager">
<!--
<param name="driver" value="@@DRIVER@@"/>
<param name="url" value="@@URL@@"/>
<param name="user" value="@@USER@@" />
<param name="password" value="@@PASSWD@@" />
<param name="schema" value="@@DB_TYPE@@"/>
-->
<param name="dataSourceName" value="pbiJcr"/>
<param name="schemaObjectPrefix" value="pm_ver_"/>
</PersistenceManager>

Expand Down

1 comment on commit e720f29

@zhicwu
Copy link
Owner Author

@zhicwu zhicwu commented on e720f29 Oct 31, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix issue #44

Please sign in to comment.