Bug 794386 (JBEPP-1430)

Summary: Update documentation to describe how to replace HSQLDB in EPP
Product: [JBoss] JBoss Enterprise Portal Platform 5 Reporter: William Antônio <wsiqueir>
Component: DocumentationAssignee: mmurray
Status: VERIFIED --- QA Contact:
Severity: high Docs Contact:
Priority: high    
Version: 5.1.1.GACC: epp-bugs, nobody, theute, wsiqueir
Target Milestone: ---Keywords: Documentation
Target Release: 5.2.1.Docs.GA   
Hardware: Unspecified   
OS: Unspecified   
URL: http://jira.jboss.org/jira/browse/JBEPP-1430
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
It was discovered that there was insufficient information in the Installation Guide regarding how to replace the default Hypersonic Database (HSQLDB) with a certified database that Red Hat supports. Detailed steps have been added to the Database Configuration section of the guide, which explain how to replace HSQLDB, and the requirements JBoss Enterprise Portal Platform has regarding separate databases for JCR and IDM.
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Enhancement
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description William Antônio 2011-12-02 14:37:32 UTC
Affects: Release Notes
Help Desk Ticket Reference: https://c.na7.visual.force.com/apex/Case_View?id=500A0000008Ufh8
project_key: JBEPP

When setting the database with other database than HSQLDB, we need to set two datasources:

- One for IDM;
- Another for JCR;

In fact, these datasources can't use the same database, they must be in different databases or we will have table conflicts and the portal will not start. It is required to create separate databases.

Although this procedure seems simple, it is not described in EPP documentation. It would be good if a section in EPP documentation could explain in details how to configure it.

Comment 1 Thomas Heute 2011-12-02 14:43:42 UTC
Can you be more specific about what you would add to:
http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Portal_Platform/5.1/html-single/Installation_Guide/index.html#sect-Reference_Guide-Database_Configuration ?

Beside a warning note that the 2 DB must be different ?

Comment 2 William Antônio 2011-12-02 15:12:26 UTC
Yes, a warning note would be great.

Also would be great if we have more database samples. With postgres, for example, we can't simply use schemas for each datasource(specifying the schema using "new-connection-sql"), we have to use 2 databases. 

Thanks.

Comment 4 Jared MORGAN 2011-12-13 22:35:03 UTC
Release Notes Docs Status: Added: Not Required
Affects: Added: Release Notes


Comment 5 Jared MORGAN 2011-12-13 22:35:26 UTC
Release Notes Text: Added: CAUSE:

CONSEQUENCE:

FIX:

RESULT:


Comment 6 Jared MORGAN 2012-02-20 02:48:32 UTC
Package: JBoss_Enterprise_Portal_Platform-Installation_Guide-5.2-web-en-US-5.2.1-1.el6eng

Task Info: https://brewweb.devel.redhat.com//taskinfo?taskID=4057523

Changelog:
* Mon Feb 20 2012 Jared Morgan <> - 5.2.1-1
- Incorporated changes to https://bugzilla.redhat.com/show_bug.cgi?id=794386.

Link: 
http://documentation-stage.bne.redhat.com/docs/en-US/JBoss_Enterprise_Portal_Platform/5.2/html-single/Installation_Guide/index.html#sect-Reference_Guide-Database_Configuration

In "Task: Create Database Tables" I have added steps that ensure customers create two separate databases.

In "Task: Configure the JCR Database Datasource" and "Task: Configure the JCR Database Datasource", I have added an Important admonition that prompts users to ensure they specify the correct database relevant to the procedure.

Customers can get the required connection-url and driver-class info from the database and JDBC documentation. We should not duplicate this information, because it may change and then our guide would be incorrect by proxy.

I have clarified the EAP guide (Getting Started Guide) that contains some DB config examples. There is no use repeating information between platforms, particularly when the EAP is what everything runs on anyhow ;)

Remarks enabled to identify sections changes. Review required on all work.

Comment 7 Jared MORGAN 2012-02-20 02:48:32 UTC
    Technical note added. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    New Contents:
It was discovered that there was insufficient information in the Installation Guide regarding how to replace the default Hypersonic Database (HSQLDB) with a certified database that Red Hat supports. Detailed steps have been added to the Database Configuration section of the guide, which explain how to replace HSQLDB, and the requirements JBoss Enterprise Portal Platform has regarding separate databases for JCR and IDM.

Comment 8 Thomas Heute 2012-02-27 08:58:06 UTC
"You must create a separate database for both the JCR and IDM services. If you do not create a separate database for each service, database table conflicts will occur and JBoss Enterprise Portal Platform will not start." It's not because of table conflicts, it's more about connection pool issues. Also AFAIK it will start but not perform well. I would stick with the fact that they have to be different.

Also there is a stupidity that comes from legacy support. 
The JNDI Names depend if you have 1 or n portal containers, if you just have one it would be like mentioned in the doc:

<jndi-name>gatein-idm</jndi-name>
        <connection-url>jdbc:mysql://mysql-hostname:3306/gateinidm</connection-url>

If you have 2 or more then you need to add the name of portal container in the JNDI Name with a suffix, gatein-idm becomes gatein-idm_portal (same for gatein-jcr) and the databases must then be different.

here are the datasources for 1 portal container (like when you just install EPP)
<datasources>
    <no-tx-datasource>
        <jndi-name>gatein-idm</jndi-name>
        <connection-url>jdbc:mysql://mysql-hostname:3306/gateinidm</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <user-name>gateinuser</user-name>
        <password>gateinpassword</password>

        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
    </no-tx-datasource>

    <local-tx-datasource>
        <jndi-name>gatein-jcr</jndi-name>
        <connection-url>jdbc:mysql://mysql-hostname:3306/gateinjcr</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <user-name>gateinuser</user-name>
        <password>gateinpassword</password>

        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
    </local-tx-datasource>
</datasources>

here is for 2, where portal container /portal and /customer are used:
<datasources>
    <no-tx-datasource>
        <jndi-name>gatein-idm_portal</jndi-name>
        <connection-url>jdbc:mysql://mysql-hostname:3306/gateinidm1</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <user-name>gateinuser</user-name>
        <password>gateinpassword</password>

        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
    </no-tx-datasource>

    <local-tx-datasource>
        <jndi-name>gatein-jcr_portal</jndi-name>
        <connection-url>jdbc:mysql://mysql-hostname:3306/gateinjcr1</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <user-name>gateinuser</user-name>
        <password>gateinpassword</password>

        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
    </local-tx-datasource>

    <no-tx-datasource>
        <jndi-name>gatein-idm_customer</jndi-name>
        <connection-url>jdbc:mysql://mysql-hostname:3306/gateinidm2</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <user-name>gateinuser</user-name>
        <password>gateinpassword</password>

        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
    </no-tx-datasource>

    <local-tx-datasource>
        <jndi-name>gatein-jcr_customer</jndi-name>
        <connection-url>jdbc:mysql://mysql-hostname:3306/gateinjcr2</connection-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <user-name>gateinuser</user-name>
        <password>gateinpassword</password>

        <min-pool-size>5</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <prepared-statement-cache-size>32</prepared-statement-cache-size>
    </local-tx-datasource>
</datasources>

Note that the database names don't matter, only the jndi-name do.

Comment 9 Jared MORGAN 2012-02-28 01:55:40 UTC
Thomas provided excellent info in a mailing list relating to this bug:

<snip>
you need (IDM + JCR databases) * (NB portal container).

When you install SP on top of EPP you add 1 portal container (you have
http://localhost:8080/portal and http://localhost:8080/ecmdemo)

The datasource descriptors for SP are included in the SP package

</snip>

I have incorporated this info into the Datasource Configuration section.

Comment 10 Jared MORGAN 2012-02-28 03:30:01 UTC
(In reply to comment #8)
> "You must create a separate database for both the JCR and IDM services. If you
> do not create a separate database for each service, database table conflicts
> will occur and JBoss Enterprise Portal Platform will not start." It's not
> because of table conflicts, it's more about connection pool issues. Also AFAIK
> it will start but not perform well. I would stick with the fact that they have
> to be different.

No problem. I have cut down that sentence to imply "Just have separate databases, OK"

> 
> Also there is a stupidity that comes from legacy support. 
> The JNDI Names depend if you have 1 or n portal containers, if you just have
> one it would be like mentioned in the doc:
> 
> <jndi-name>gatein-idm</jndi-name>
>        
> <connection-url>jdbc:mysql://mysql-hostname:3306/gateinidm</connection-url>
> 
> If you have 2 or more then you need to add the name of portal container in the
> JNDI Name with a suffix, gatein-idm becomes gatein-idm_portal (same for
> gatein-jcr) and the databases must then be different.
> 
> here are the datasources for 1 portal container (like when you just install
> EPP)
> <datasources>
>     <no-tx-datasource>
>         <jndi-name>gatein-idm</jndi-name>
>        
> <connection-url>jdbc:mysql://mysql-hostname:3306/gateinidm</connection-url>
>         <driver-class>com.mysql.jdbc.Driver</driver-class>
>         <user-name>gateinuser</user-name>
>         <password>gateinpassword</password>
> 
>         <min-pool-size>5</min-pool-size>
>         <max-pool-size>20</max-pool-size>
>         <idle-timeout-minutes>0</idle-timeout-minutes>
>         <prepared-statement-cache-size>32</prepared-statement-cache-size>
>     </no-tx-datasource>
> 
>     <local-tx-datasource>
>         <jndi-name>gatein-jcr</jndi-name>
>        
> <connection-url>jdbc:mysql://mysql-hostname:3306/gateinjcr</connection-url>
>         <driver-class>com.mysql.jdbc.Driver</driver-class>
>         <user-name>gateinuser</user-name>
>         <password>gateinpassword</password>
> 
>         <min-pool-size>5</min-pool-size>
>         <max-pool-size>20</max-pool-size>
>         <idle-timeout-minutes>0</idle-timeout-minutes>
>         <prepared-statement-cache-size>32</prepared-statement-cache-size>
>     </local-tx-datasource>
> </datasources>
> 
> here is for 2, where portal container /portal and /customer are used:
> <datasources>
>     <no-tx-datasource>
>         <jndi-name>gatein-idm_portal</jndi-name>
>        
> <connection-url>jdbc:mysql://mysql-hostname:3306/gateinidm1</connection-url>
>         <driver-class>com.mysql.jdbc.Driver</driver-class>
>         <user-name>gateinuser</user-name>
>         <password>gateinpassword</password>
> 
>         <min-pool-size>5</min-pool-size>
>         <max-pool-size>20</max-pool-size>
>         <idle-timeout-minutes>0</idle-timeout-minutes>
>         <prepared-statement-cache-size>32</prepared-statement-cache-size>
>     </no-tx-datasource>
> 
>     <local-tx-datasource>
>         <jndi-name>gatein-jcr_portal</jndi-name>
>        
> <connection-url>jdbc:mysql://mysql-hostname:3306/gateinjcr1</connection-url>
>         <driver-class>com.mysql.jdbc.Driver</driver-class>
>         <user-name>gateinuser</user-name>
>         <password>gateinpassword</password>
> 
>         <min-pool-size>5</min-pool-size>
>         <max-pool-size>20</max-pool-size>
>         <idle-timeout-minutes>0</idle-timeout-minutes>
>         <prepared-statement-cache-size>32</prepared-statement-cache-size>
>     </local-tx-datasource>
> 
>     <no-tx-datasource>
>         <jndi-name>gatein-idm_customer</jndi-name>
>        
> <connection-url>jdbc:mysql://mysql-hostname:3306/gateinidm2</connection-url>
>         <driver-class>com.mysql.jdbc.Driver</driver-class>
>         <user-name>gateinuser</user-name>
>         <password>gateinpassword</password>
> 
>         <min-pool-size>5</min-pool-size>
>         <max-pool-size>20</max-pool-size>
>         <idle-timeout-minutes>0</idle-timeout-minutes>
>         <prepared-statement-cache-size>32</prepared-statement-cache-size>
>     </no-tx-datasource>
> 
>     <local-tx-datasource>
>         <jndi-name>gatein-jcr_customer</jndi-name>
>        
> <connection-url>jdbc:mysql://mysql-hostname:3306/gateinjcr2</connection-url>
>         <driver-class>com.mysql.jdbc.Driver</driver-class>
>         <user-name>gateinuser</user-name>
>         <password>gateinpassword</password>
> 
>         <min-pool-size>5</min-pool-size>
>         <max-pool-size>20</max-pool-size>
>         <idle-timeout-minutes>0</idle-timeout-minutes>
>         <prepared-statement-cache-size>32</prepared-statement-cache-size>
>     </local-tx-datasource>
> </datasources>
> 
> Note that the database names don't matter, only the jndi-name do.

No problem. I've taken this information and broken up the Database Configuration section into Single and Multiple portal container instruction sets.

Build info to follow.

Comment 12 Jared MORGAN 2012-02-28 03:43:54 UTC
*** Bug 794741 has been marked as a duplicate of this bug. ***