On 27/06/2016 22:35, Jerry Malcolm wrote: > Mark, > > On 6/27/2016 1:07 PM, Mark Thomas wrote: >> On 27/06/2016 17:44, Jerry Malcolm wrote: >> >>> I'm assuming that context.lookup(...) simply locates the "jdbc/myDB" >>> <Resource> tag in the context.xml file, pulls all of the parms out of >>> that tag, creates a DataSource object utilizing the parms, and returns >>> it. If that's the case, couldn't I create a variation/subclass of the >>> Context object that modifies the url parm that it found in the resource >>> tag and puts the desired db name into the url before constructing the >>> DataSource? >> Sure. >> >> You need to implement the appropriate factory and then specify your >> factory class explicitly in the Resource element using the factory >> attribute. >> >> You probably want to start here for ideas on how to code up your factory: >> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/naming/factory/ >> >> or for a more specific example: >> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceFactory.java?view=annotate >> >> >> >> Mark >> > Thanks so much. This looks doable. Just to make sure I have the big > picture correct.... > > 1) I will define a new custom resource that returns a custom context > object that I write. > 2) On the <Resource> tag for my custom context resource I can put all of > the standard DataSource parms > 3) I then call lookup() on this custom context passing the dbName in > 4) This custom context will build an appropriate Reference object with > all the parms, instantiate a BasicDataSourceFactory, and call > getInstance(.....) on the factory. > > When I need an instance of the datasource: > Context initContext = new InitialContext(); > Context envContext = > (Context)initContext.lookup("java:/comp/env"); > MyDataSourceContext dsContext = (MyDataSourceContext) > envContext.lookup( "dsContext/myDSContext" ); > DataSource myDS = (DataSource) dsContext.getInstance( "dbName" ); > > Am I getting close?
Yes, but I don't think you want to use custom NamingContexts. I think there is a simpler way. 1. Write a custom DataSource factory that provides a getDataSource(...) method that allows you to pass in whatever per instance config you need. This DataSource factory will need to use bean style setters (like the example I linked to) to pick up the other config from the <Resource .../> 2. Write a custom resource factory that returns an instance of your DataSource factory. 3. Add a context Resource element for your DataSource factory, remembering to use the factory element and specify the custom resource factory from 2. HTH, Mark --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org