OpenJPA
  1. OpenJPA
  2. OPENJPA-552

Do not recognize Connection* properties in persistence.xml in appl server container

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.0.2, 1.0.3, 1.1.0
    • Fix Version/s: 1.0.3, 1.1.0
    • Component/s: jdbc
    • Labels:
      None

      Description

      If Connection* properties are specified in a persistence unit and there is no <jta-data-source>, <non-jta-data-source> or default data source defined,

      PU name : dweb24
      Root URL : file:/D:/dev/jdk/runtimes/base_v7_i7/profiles/AppSrv01/installedApps/kingoftownNode03Cell/dweb24Ear.ear/dweb24.war/WEB-INF/classes/
      Tx Type : JTA
      desc :
      Provider : com.ibm.websphere.persistence.PersistenceProviderImpl [WSJPA-1.1.0-SNAPSHOT-r1118:1345, openjpa-1.1.0-SNAPSHOT-r420667:636531]
      JTA DS : <<null>> | null
      nonJTA DS : <<null>> | null
      exclude Cls : false
      file URLs : []
      mappigFNm : []
      managedClasses : [entities.Department,entities.Employee]
      Properties :

      {openjpa.ConnectionDriverName=com.ibm.db2.jcc.DB2Driver, openjpa.ConnectionPassword=db2admin, openjpa.ConnectionUserName=db2admin, openjpa.ConnectionURL=jdbc:db2://supermatrix:50000/SAMPLE:retrieveMessagesFromServerOnGetMessage=true;, openjpa.jdbc.Schema=ADMINISTRATOR}

      then the following exception will be thrown from DataSourceFactory.newDataSource method:

      <openjpa-1.1.0-SNAPSHOT-r420667:636531 fatal user error> org.apache.openjpa.util.UserException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property.
      at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:72)
      at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:776)
      at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:553)
      at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1251)
      at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:505)
      at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:430)

      This called path is initiated from PersistenceProviderImpl.createContainerEntityManagerFactory. Consequentially, transformer is not being registered in the appl server container and no load time entity enhancement is performed.

      openjpa.Runtime: Warn: An error occurred while registering a ClassTransformer with dweb24. The error is logged along with this warning. Load-time class transformation will not be available.

      Albert Lee.

      1. OPENJPA-552.10x.patch
        1 kB
        Albert Lee
      2. OPENJPA-552.11x.patch
        1 kB
        Albert Lee

        Activity

        Hide
        Albert Lee added a comment -

        The cause of the problem sourced from:

        PersistenceProviderImpl.java

        private ClassTransformerImpl(ConfigurationProvider cp, String props,
        final ClassLoader tmpLoader, OpenJPAConfiguration conf) {
        cp.setInto(conf);
        // don't allow connections
        conf.setConnectionUserName(null); <<<<< Connection Properties are removed
        conf.setConnectionPassword(null); <<<<< Connection Properties are removed
        conf.setConnectionURL(null); <<<<< Connection Properties are removed
        conf.setConnectionDriverName(null); <<<<< Connection Properties are removed
        conf.setConnectionFactoryName(null); <<<<< Connection Properties are removed
        // use the tmp loader for everything
        conf.setClassResolver(new ClassResolver() {
        public ClassLoader getClassLoader(Class context,
        ClassLoader env)

        { return tmpLoader; }

        });
        conf.setReadOnly(Configuration.INIT_STATE_FREEZING);
        MetaDataRepository repos = conf.getMetaDataRepositoryInstance();

        So even the properties are defined in the configuration, they are removed before the MetaDataRepository instance is created. Hence no data source can be found and the described exception is thrown.

        This change is introduced in r452141. We assert that these setConnection*(null) statements are not needed because:
        1) If the Connection* properties need to be nulled, why are the Connection2* properties are not affected.'
        2) The pu can override the intention of these setter(null) calls by specifying the <jta-data-source> and make these operations irrevalent.

        Albert Lee.

        Show
        Albert Lee added a comment - The cause of the problem sourced from: PersistenceProviderImpl.java private ClassTransformerImpl(ConfigurationProvider cp, String props, final ClassLoader tmpLoader, OpenJPAConfiguration conf) { cp.setInto(conf); // don't allow connections conf.setConnectionUserName(null); <<<<< Connection Properties are removed conf.setConnectionPassword(null); <<<<< Connection Properties are removed conf.setConnectionURL(null); <<<<< Connection Properties are removed conf.setConnectionDriverName(null); <<<<< Connection Properties are removed conf.setConnectionFactoryName(null); <<<<< Connection Properties are removed // use the tmp loader for everything conf.setClassResolver(new ClassResolver() { public ClassLoader getClassLoader(Class context, ClassLoader env) { return tmpLoader; } }); conf.setReadOnly(Configuration.INIT_STATE_FREEZING); MetaDataRepository repos = conf.getMetaDataRepositoryInstance(); So even the properties are defined in the configuration, they are removed before the MetaDataRepository instance is created. Hence no data source can be found and the described exception is thrown. This change is introduced in r452141. We assert that these setConnection*(null) statements are not needed because: 1) If the Connection* properties need to be nulled, why are the Connection2* properties are not affected.' 2) The pu can override the intention of these setter(null) calls by specifying the <jta-data-source> and make these operations irrevalent. Albert Lee.
        Hide
        Albert Lee added a comment -

        Patch attached. Running maven test and TCK.

        Show
        Albert Lee added a comment - Patch attached. Running maven test and TCK.

          People

          • Assignee:
            Albert Lee
            Reporter:
            Albert Lee
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development