ABT,

On 4/29/25 11:25 AM, A Name wrote:
On Tue, Apr 29, 2025 at 10:54 AM Christopher Schultz <
ch...@christopherschultz.net> wrote:
Are you able to view the sources of the application? Are you (or your
team) knowledgeable enough about the code to make such changes? IMHO, I
would take the time to make these changes because it will simplify your
application (Tomcat would now be responsible for building and managing
the data source) and also allow you to configure your application in a
more flexible way -- essentially it makes it possible to achieve your
goal of decoupling the configuration from the application bundle itself.

I have a team of developers - but, at this moment, the customer does not
want a path that includes code changes.  We may change in the future, but I
was investigating a no-code change option.


In the new world, I'd need 2 sets of those parameters (basically with
the
same names for the app to find them).  one pointing to dbserver-site1
and
one pointing to dbserver-site2.

Basically I'm looking for ideas that would not involve App code
changes if
possible.  I can change the XML configs in the conf directory without
issue... but for program reasons, at this time, the app code (or the
META-INF/xml files) are not supposed to be touched on considering this
adventure.

An app code change would be best, but you can also use some well-work
hacks to get around that.

We can keep that in mind for the future - but due to other priorities from
the customer, code changes for this are not on the table.


I think your host/site context.xml file ideas are interesting.  Would I
be
able to take the context info that I put here out of web.xml and put it
in
the conf/Catalina/localhost/site1app.xml and put another copy in
conf/Catalina/localhost/site2app.xml with the different
url/username/password?

That would be an ideal and simple answer.

I can think of two other ways to do this. The first way requires no code
changes and should continue to work. It essentially uses the same
servlet context parameters you are already using, but re-locates them to
context.xml -- which I didn't actually know you could do until I just
re-re-re-re-read the documentation.


https://tomcat.apache.org/tomcat-9.0-doc/config/context.html#Context_Parameters
<https://tomcat.apache.org/tomcat-9.0-doc/config/context.html#Context_Parameters>

You can remove these from WEB-INF/web.xml:
<context-param>
  <param-name>foo</param-name>
    <param-value>bar</param-value>
</context-param>


And put them into META-INF/context.xml under <Context> (which is the
document-element for that file):

    <Parameter name="foo" value="bar" override="true|false"/>

If you move those definitions and they work, then you can take the next
step and move the application's META-INF/context.xml file out of the
application and into Tomcat's conf/[engine]/[host]/[appname].xml

If that works, then enjoy your day. :)

I might put them straight in the appname.xml in my sandbox - changing
META-INF/context.xml changes what deploys with the app and that's still in
the "not right now" currently.

Tomcat does not read both META-INF/context.xml and also conf/[engine]/[host]/[appname].xml and merge them together: the latter takes precedence. So you'll have to merge them yourself. Just copy the existing META-INF/context.xml file -> conf/[engine]/[host]/[appname].xml and modify from there.

-chris


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

Reply via email to