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+hzn2bb8cws5jwvcz0gkju...@mail.gmail.com%3E

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


Any ideas?

Thanks,
- Dave

Reply via email to