You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@roller.apache.org by Dave <sn...@gmail.com> on 2014/05/03 21:29:11 UTC

Roller, OpenJPA and a JNDI datasource (was Re: Tuning blogs.a.o's database)

I spent morning trying to figure out how to get Roller to use a JNDI
DataSource, something that had worked in the past (perhaps with Tomcat 6),
but now appears to be a problem. I'm doing this (in part) to allow ASF
Infra to better tune the database connection pool.


What I tried was this:

1) Edited roller's context config file (ROOT.xml) to add a DataSource like
so:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/roller"
docBase="/Users/dave/src/roller_5.0/weblogger-webapp/target/roller">
     <Resource name="jdbc/rollerdb" auth="Container"
        type="javax.sql.DataSource"
        driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/roller5test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;mysqlEncoding=utf8"
        username="scott" password="tiger"
        maxActive="25" maxIdle="5" removeAbandoned="true" maxWait="3000" />
    </Context>

2) Edited Roller's roller-custom.properties file to replace the existing
JDBD properties with this:

   database.configurationType=jndi
   database.jndi.name=jdbc/rollerdb

3) Checked Roller's persistence.xml file to ensure that the DataSource JNDI
is correctly referenced there.

    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="2.0">
        <persistence-unit name ="RollerPU"
transaction-type="RESOURCE_LOCAL">
            <jta-data-source>java:comp/env/jdbc/rollerdb</jta-data-source>
    ...

With that setup I get this error and Roller fails to start:

java.lang.RuntimeException: <openjpa-2.3.0-r422266:1540826 fatal user
error> org.apache.openjpa.persistence.ArgumentException: The persistence
provider is attempting to use properties in the persistence.xml file to
resolve the data source. A Java Database Connectivity (JDBC) driver or data
source class name must be specified in the openjpa.ConnectionDriverName or
javax.persistence.jdbc.driver property. The following properties are
available in the configuration:
"org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@7d775f33".


I also tried a bunch of other things to get things working:

a) Added these properties to Roller's config (Roller passes them through to
OpenJPA):


openjpa.ConnectionDriverName=com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
    openjpa.jdbc.DBDictionary=mysql

b) Tried using com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
as the driverClassName in ROOT.xml

c) Tried upgrading to OpenJPA 2.3.0


Apparently others have experienced this problem, but I have not seen any
good solutions in response:

http://stackoverflow.com/questions/13442978/openjpa-and-jndi

http://mail-archives.apache.org/mod_mbox/roller-user/201402.mbox/%3CCAO5arLOBCVPsGnN5+cWJPEdAL+hzn2BB8cWs5JWvCZ0GKJueSA@mail.gmail.com%3E

http://stackoverflow.com/questions/13442978/openjpa-and-jndi


Any ideas?

Thanks,
- Dave

Re: Roller, OpenJPA and a JNDI datasource (was Re: Tuning blogs.a.o's database)

Posted by Dave <sn...@gmail.com>.
Thanks for the pointers, Glen.

No matter whether I put my context config in
conf/<engine>/<hostname>/<context-name>.xml
or in the WAR's META-INF/context.xml or in the host section of server.xml I
get the same result.

I assume this is a Tomcat7 change that has impacted OpenJPA -- but I am not
certain. On the bright side, I was able to get JNDI datasource working with
the latest TomEE.

For blogs.apache.org, I think we need to get some solution in place that
uses a database connection pool. Using a JNDI datasource was one avenue. I
wonder if there are other options.

- Dave



On Sun, May 4, 2014 at 2:55 PM, Glen Mazza <gl...@gmail.com> wrote:

> Hi Dave,  section 6.2 of the trunk Install Guide shows how you can use
> JNDI with Tomcat on Roller *trunk*.  That's my writeup I did after getting
> it to work, so I know it works at least for trunk, which uses EclipseLink
> or Hibernate as you know.
>
> It's approach is somewhat different from yours below, it has you add the
> context.xml file to META-INF within the WAR, *or* within the Tomcat
> server.xml file:
> http://svn.apache.org/viewvc/roller/trunk/app/src/main/
> webapp/META-INF/context.xml-example?revision=1502743&view=markup
> (incidentally, that's a revision based on a 3/4 year old file done by you
> earlier in SVN, which must have been for Roller 5.0.x, so you may have
> working code if you look earlier in the SVN repo.)
>
> HTH,
> Glen
>
>
> On 5/3/2014 3:29 PM, Dave wrote:
>
>> I spent morning trying to figure out how to get Roller to use a JNDI
>> DataSource, something that had worked in the past (perhaps with Tomcat 6),
>> but now appears to be a problem. I'm doing this (in part) to allow ASF
>> Infra to better tune the database connection pool.
>>
>>
>> What I tried was this:
>>
>> 1) Edited roller's context config file (ROOT.xml) to add a DataSource like
>> so:
>>
>>      <?xml version="1.0" encoding="UTF-8"?>
>>      <Context path="/roller"
>> docBase="/Users/dave/src/roller_5.0/weblogger-webapp/target/roller">
>>       <Resource name="jdbc/rollerdb" auth="Container"
>>          type="javax.sql.DataSource"
>>          driverClassName="com.mysql.jdbc.Driver"
>>
>> url="jdbc:mysql://localhost:3306/roller5test?autoReconnect=true&amp;
>> useUnicode=true&amp;characterEncoding=utf-8&amp;mysqlEncoding=utf8"
>>          username="scott" password="tiger"
>>          maxActive="25" maxIdle="5" removeAbandoned="true" maxWait="3000"
>> />
>>      </Context>
>>
>> 2) Edited Roller's roller-custom.properties file to replace the existing
>> JDBD properties with this:
>>
>>     database.configurationType=jndi
>>     database.jndi.name=jdbc/rollerdb
>>
>> 3) Checked Roller's persistence.xml file to ensure that the DataSource
>> JNDI
>> is correctly referenced there.
>>
>>      <persistence xmlns="http://java.sun.com/xml/ns/persistence"
>> version="2.0">
>>          <persistence-unit name ="RollerPU"
>> transaction-type="RESOURCE_LOCAL">
>>              <jta-data-source>java:comp/env/jdbc/rollerdb</jta-data-
>> source>
>>      ...
>>
>> With that setup I get this error and Roller fails to start:
>>
>> java.lang.RuntimeException: <openjpa-2.3.0-r422266:1540826 fatal user
>> error> org.apache.openjpa.persistence.ArgumentException: The persistence
>> provider is attempting to use properties in the persistence.xml file to
>> resolve the data source. A Java Database Connectivity (JDBC) driver or
>> data
>> source class name must be specified in the openjpa.ConnectionDriverName or
>> javax.persistence.jdbc.driver property. The following properties are
>> available in the configuration:
>> "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@7d775f33".
>>
>>
>> I also tried a bunch of other things to get things working:
>>
>> a) Added these properties to Roller's config (Roller passes them through
>> to
>> OpenJPA):
>>
>>
>> openjpa.ConnectionDriverName=com.mysql.jdbc.jdbc2.optional.
>> MysqlConnectionPoolDataSource
>>      openjpa.jdbc.DBDictionary=mysql
>>
>> b) Tried using com.mysql.jdbc.jdbc2.optional.
>> MysqlConnectionPoolDataSource
>> as the driverClassName in ROOT.xml
>>
>> c) Tried upgrading to OpenJPA 2.3.0
>>
>>
>> Apparently others have experienced this problem, but I have not seen any
>> good solutions in response:
>>
>> http://stackoverflow.com/questions/13442978/openjpa-and-jndi
>>
>> http://mail-archives.apache.org/mod_mbox/roller-user/201402.mbox/%
>> 3CCAO5arLOBCVPsGnN5+cWJPEdAL+hzn2BB8cWs5JWvCZ0GKJueSA@mail.gmail.com%3E
>>
>> http://stackoverflow.com/questions/13442978/openjpa-and-jndi
>>
>>
>> Any ideas?
>>
>> Thanks,
>> - Dave
>>
>>
>

Re: Roller, OpenJPA and a JNDI datasource (was Re: Tuning blogs.a.o's database)

Posted by Glen Mazza <gl...@gmail.com>.
Hi Dave,  section 6.2 of the trunk Install Guide shows how you can use 
JNDI with Tomcat on Roller *trunk*.  That's my writeup I did after 
getting it to work, so I know it works at least for trunk, which uses 
EclipseLink or Hibernate as you know.

It's approach is somewhat different from yours below, it has you add the 
context.xml file to META-INF within the WAR, *or* within the Tomcat 
server.xml file:
http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/META-INF/context.xml-example?revision=1502743&view=markup
(incidentally, that's a revision based on a 3/4 year old file done by 
you earlier in SVN, which must have been for Roller 5.0.x, so you may 
have working code if you look earlier in the SVN repo.)

HTH,
Glen

On 5/3/2014 3:29 PM, Dave wrote:
> I spent morning trying to figure out how to get Roller to use a JNDI
> DataSource, something that had worked in the past (perhaps with Tomcat 6),
> but now appears to be a problem. I'm doing this (in part) to allow ASF
> Infra to better tune the database connection pool.
>
>
> What I tried was this:
>
> 1) Edited roller's context config file (ROOT.xml) to add a DataSource like
> so:
>
>      <?xml version="1.0" encoding="UTF-8"?>
>      <Context path="/roller"
> docBase="/Users/dave/src/roller_5.0/weblogger-webapp/target/roller">
>       <Resource name="jdbc/rollerdb" auth="Container"
>          type="javax.sql.DataSource"
>          driverClassName="com.mysql.jdbc.Driver"
>
> url="jdbc:mysql://localhost:3306/roller5test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;mysqlEncoding=utf8"
>          username="scott" password="tiger"
>          maxActive="25" maxIdle="5" removeAbandoned="true" maxWait="3000" />
>      </Context>
>
> 2) Edited Roller's roller-custom.properties file to replace the existing
> JDBD properties with this:
>
>     database.configurationType=jndi
>     database.jndi.name=jdbc/rollerdb
>
> 3) Checked Roller's persistence.xml file to ensure that the DataSource JNDI
> is correctly referenced there.
>
>      <persistence xmlns="http://java.sun.com/xml/ns/persistence"
> version="2.0">
>          <persistence-unit name ="RollerPU"
> transaction-type="RESOURCE_LOCAL">
>              <jta-data-source>java:comp/env/jdbc/rollerdb</jta-data-source>
>      ...
>
> With that setup I get this error and Roller fails to start:
>
> java.lang.RuntimeException: <openjpa-2.3.0-r422266:1540826 fatal user
> error> org.apache.openjpa.persistence.ArgumentException: The persistence
> provider is attempting to use properties in the persistence.xml file to
> resolve the data source. A Java Database Connectivity (JDBC) driver or data
> source class name must be specified in the openjpa.ConnectionDriverName or
> javax.persistence.jdbc.driver property. The following properties are
> available in the configuration:
> "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@7d775f33".
>
>
> I also tried a bunch of other things to get things working:
>
> a) Added these properties to Roller's config (Roller passes them through to
> OpenJPA):
>
>
> openjpa.ConnectionDriverName=com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
>      openjpa.jdbc.DBDictionary=mysql
>
> b) Tried using com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
> as the driverClassName in ROOT.xml
>
> c) Tried upgrading to OpenJPA 2.3.0
>
>
> Apparently others have experienced this problem, but I have not seen any
> good solutions in response:
>
> http://stackoverflow.com/questions/13442978/openjpa-and-jndi
>
> http://mail-archives.apache.org/mod_mbox/roller-user/201402.mbox/%3CCAO5arLOBCVPsGnN5+cWJPEdAL+hzn2BB8cWs5JWvCZ0GKJueSA@mail.gmail.com%3E
>
> http://stackoverflow.com/questions/13442978/openjpa-and-jndi
>
>
> Any ideas?
>
> Thanks,
> - Dave
>