Author: markt
Date: Wed Aug  2 15:31:42 2017
New Revision: 1803828

URL: http://svn.apache.org/viewvc?rev=1803828&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=61366
Add a new attribute, localDataSource, to the JDBCStore that allows the Store to 
be configured to use a DataSource defined by the web application rather than 
the default of using a globally defined DataSource.
Patch provided by Jonathan Horowitz.
This closes #71

Modified:
    tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java
    tomcat/trunk/webapps/docs/changelog.xml
    tomcat/trunk/webapps/docs/config/manager.xml

Modified: tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java?rev=1803828&r1=1803827&r2=1803828&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java Wed Aug  2 
15:31:42 2017
@@ -108,6 +108,11 @@ public class JDBCStore extends StoreBase
     protected String dataSourceName = null;
 
     /**
+     * Context local datasource.
+     */
+    private boolean localDataSource = false;
+
+    /**
      * DataSource to use
      */
     protected DataSource dataSource = null;
@@ -455,6 +460,23 @@ public class JDBCStore extends StoreBase
         return this.dataSourceName;
     }
 
+    /**
+     * @return if the datasource will be looked up in the webapp JNDI Context.
+     */
+    public boolean getLocalDataSource() {
+        return localDataSource;
+    }
+
+    /**
+     * Set to {@code true} to cause the datasource to be looked up in the 
webapp
+     * JNDI Context.
+     *
+     * @param localDataSource the new flag value
+     */
+    public void setLocalDataSource(boolean localDataSource) {
+      this.localDataSource = localDataSource;
+    }
+
 
     // --------------------------------------------------------- Public Methods
 
@@ -868,16 +890,26 @@ public class JDBCStore extends StoreBase
             return dbConnection;
 
         if (dataSourceName != null && dataSource == null) {
+            org.apache.catalina.Context context = getManager().getContext();
+            ClassLoader oldThreadContextCL = null;
+            if (localDataSource) {
+                oldThreadContextCL = context.bind(Globals.IS_SECURITY_ENABLED, 
null);
+            }
+
             Context initCtx;
             try {
                 initCtx = new InitialContext();
                 Context envCtx = (Context) initCtx.lookup("java:comp/env");
                 this.dataSource = (DataSource) 
envCtx.lookup(this.dataSourceName);
             } catch (NamingException e) {
-                manager.getContext().getLogger().error(
+                context.getLogger().error(
                         sm.getString(getStoreName() + ".wrongDataSource",
                                 this.dataSourceName), e);
-           }
+            } finally {
+                if (localDataSource) {
+                    context.unbind(Globals.IS_SECURITY_ENABLED, 
oldThreadContextCL);
+                }
+            }
         }
 
         if (dataSource != null) {

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1803828&r1=1803827&r2=1803828&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Aug  2 15:31:42 2017
@@ -66,6 +66,13 @@
         web.xml and similar locations that may legitimately contain characters
         that are not permitted by RFC 3986. (markt)
       </fix>
+      <add>
+        <bug>61366</bug>: Add a new attribute, <code>localDataSource</code>, to
+        the <code>JDBCStore</code> that allows the Store to be configured to 
use
+        a DataSource defined by the web application rather than the default of
+        using a globally defined DataSource. Patch provided by Jonathan
+        Horowitz. (markt)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Coyote">

Modified: tomcat/trunk/webapps/docs/config/manager.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/manager.xml?rev=1803828&r1=1803827&r2=1803828&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/manager.xml (original)
+++ tomcat/trunk/webapps/docs/config/manager.xml Wed Aug  2 15:31:42 2017
@@ -422,6 +422,12 @@
       <p>Java class name of the JDBC driver to be used.</p>
     </attribute>
 
+    <attribute name="localDataSource" required="false">
+      <p>This allows the Store to use a DataSource defined for the Context
+      rather than a global DataSource. If not specified, the default is
+      <code>false</code>: use a global DataSource.</p>
+    </attribute>
+
     <attribute name="sessionAppCol" required="false">
       <p>Name of the database column, contained in the specified session table,
       that contains the Engine, Host, and Web Application Context name in the



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to