Uploaded image for project: 'TomEE'
  1. TomEE
  2. TOMEE-1266

Unable to configure a datasource with TomEE in context of Oracle Wallet

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.6.0, 1.6.0.2
    • Fix Version/s: 7.0.0-M1, 7.0.0
    • Component/s: None
    • Environment:
      TomEE 1.5.1 to 1.6.0.2
      Oracle Wallet

      Description

      When configuring datasource with TomEE (here TomEE 1.5.1 but same with TomEE 1.6.0) for use with Oracle Wallet like below, without UserName and Password properties ...

      <Resource id="jdbc/myDB" type="DataSource">
        JdbcDriver oracle.jdbc.driver.OracleDriver
        JdbcUrl    jdbc:oracle:thin:/@ACSCAC
        IgnoreDefaultValues true
        JtaManaged true 
        InitialSize	10
        MaxActive 32 
        TestOnBorrow true 
        PoolPreparedStatements true 
        MaxOpenPreparedStatements 250
      </Resource>
      

      ... the application failed with exception ...

      Jul 2, 2014 11:42:17 AM org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource <init>
      SEVERE: Can't create DataSource
      java.sql.SQLException: ORA-01005: null password given; logon denied
      
      	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
      	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:389)
      	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:382)
      	at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:573)
      	at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431)
      	at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
      	at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
      	at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
      	at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)
      	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:366)
      	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
      	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
      	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
      	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
      	at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:278)
      	at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
      	at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:702)
      	at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:634)
      	at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:488)
      	at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144)
      	at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEConnectionPool.<init>(TomEEDataSourceCreator.java:282)
      	at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource.createPool(TomEEDataSourceCreator.java:215)
      	at org.apache.tomee.jdbc.TomEEDataSourceCreator$TomEEDataSource.<init>(TomEEDataSourceCreator.java:203)
      	at org.apache.tomee.jdbc.TomEEDataSourceCreator.pool(TomEEDataSourceCreator.java:81)
      	at org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator.poolManaged(PoolDataSourceCreator.java:64)
      	at org.apache.openejb.resource.jdbc.DataSourceFactory.create(DataSourceFactory.java:118)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at org.apache.xbean.recipe.ReflectionUtil$StaticFactory.create(ReflectionUtil.java:996)
      	at org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:276)
      	at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
      	at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
      	at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:49)
      	at org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:1733)
      	at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:425)
      	at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:344)
      	at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:144)
      	at org.apache.openejb.OpenEJB.init(OpenEJB.java:290)
      	at org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:233)
      	at org.apache.tomee.catalina.TomcatLoader.init(TomcatLoader.java:130)
      	at org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:121)
      	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
      	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      	at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
      	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110)
      	at org.apache.catalina.startup.Catalina.load(Catalina.java:633)
      	at org.apache.catalina.startup.Catalina.load(Catalina.java:658)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
      	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
      

      Digging in TomEE internals I found something strange in TomEEDataSourceCreator class which is suspected to be the cause ...

              if (!converted.containsKey("password")) {
                  converted.setProperty("password", "");
              }
      

      ... which means the property password is set to an empty value even if it has been willingly removed from the datasource configuration, conforming to Oracle Wallet usage.
      Thus, it means this property is present while Oracle Wallet doesn't expect it.

      This may give a strong track to explain the "ORA-01005: null password given; logon denied" SQLException if Oracle interprets a "blank" password as a "null" password.

      Questions :
      Is it really usefull to set the password property to blank instead of let it missing ?
      Is there a workaround to permit usage with Oracle Wallet ?

      FYI Otherwise, the Oracle Wallet configuration must be assumed as correct because the application works with a direct Tomcat (7.0.54) resource configuration like below :

      <Resource auth="Container" 
          driverClassName="oracle.jdbc.driver.OracleDriver" 
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
          name="jdbc/myDB" 
          url="jdbc:oracle:thin:/@ACSGW" 
          type="javax.sql.DataSource" 
          initialSize="10"
          maxActive="100" 
          maxIdle = "5" 
          minIdle="5"
          testOnBorrow="true"
          validationQuery="SELECT 1 FROM DUAL" 
          validationInterval="30000" />
      

        Attachments

          Activity

            People

            • Assignee:
              romain.manni-bucau Romain Manni-Bucau
              Reporter:
              thierry.beucher Thierry Beucher
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: