tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <ch...@christopherschultz.net>
Subject Re: Getting application root path before servlet is initialized?
Date Fri, 24 Feb 2017 22:13:19 GMT
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Martin,

On 2/24/17 12:37 PM, Martin Knoblauch wrote:
> On Fri, Feb 24, 2017 at 6:00 PM, Christopher Schultz < 
> chris@christopherschultz.net> wrote:
> 
>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
>> 
>> Martin,
>> 
>> On 2/21/17 8:31 AM, Martin Knoblauch wrote:
>>> Hi,
>>> 
>>> is there a way to find the absolute path of the application
>>> root before the servlet is initialized?
>>> 
>>> Alternatively: is there a way to defer the initialization of a 
>>> datasource until the servlet is initialized?
>>> 
>>> Background: I have extended 
>>> "org.apache.tomcat.jdbc.pool.DataSourceFactory" to
>>> automatically set credentials so that they are not stored in
>>> the "Catalina/localhost/XXX.xml" file. Instead they are taken
>>> from encrypted values in a file below the application root.
>>> Works fine if I know that path at "createDataSource" time.
>> 
>> Where are you configuring your <Resource>? In conf/server.xml or
>> in your application's META-INF/context.xml file?
>> 
> 
> conf/Catalina/localhost/XXX.xml

Good. If your custom DataSource can accept custom properties, then you
can add one with a dynamic path, like this:

<Resource name="myDB"
myCustomPathName="/path/to/the/secrets"
... />

In your code, you read that path and use it.

>>> In order to avoid hard coding that path, I need a programmatic
>>> to find that value. Unfortunately the datasource is initialized
>>> before the servlet, so "getRealPath()" is not working yet.
>> 
>> getRealPath is a bad idea. Also, your DataSources will be 
>> fully-configured before any servlets are initialized, so it's too
>> late.
> 
> Correct :-( That is the problem I need(ed) to solve. Given enough 
> assumptions about the deployment rules for this app, I was able to
> find a reliable way to deduce the AppRoot. But the fact that the DS
> is initialized before the/any servlet is still ugly.

You can use system property replacement in your Tomcat deployment
descriptor (META-INF/context.xml, or in your case
conf/Catalina/localhost/XXX.xml) to locate the file relative to
CATALINA_BASE like this:

<Resource myCustomPathName="${catalina.base}/webapps/XXX/secrets.dat"
... />

- -chris
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCAAGBQJYsK//AAoJEBzwKT+lPKRYU0QP/30vNxE+FBStms0J8TA0aC6w
ZPyA53htgBnMFbKEPt6zmSx3pYtdRE866I3IXiq7c8j9Fcy3c6img9ohVW9cwx+q
Id8Gc1MqHNk1dMxSUpQN+YBVTg+N6hEQshocxcIAKJ7vzind1dUdJgnGLowZBb2G
OCLbr8BqdhBz97Cw+B2tv+P310ez0RS1ZInbi0cTr7RHkFsUYPFL8Z86668ZYJGA
HO5cOEv1+a2W6kIiVEcyDzAo65y6dlp8/Nn/7J00mufT241F/haON7KHWyGXSYKU
C19zYFWjhbZWENrTO2gOSPumib12RgUs45mVbOzYKnMDAZxzMQETgtX31hJE9Pxt
J++OLvF+OwdFwveBNNNpJOpAcmzmX40RSKp+wez+nLftvI6aKXTXKer8zIiYur9Y
nu4cyj4Hjb1tFOFsl2+2jdhFjHb3dFJ/76qylMNgfpsjw1VYHiUlU6QM6G7I2xZd
AROO6Nk4uPElPzl4u83pJ0knD7CKIV8oTE7H5/7pXgFU1SmUq+S/QLhN9Nvq2XKi
Sykr/lxJWkDIpT1w3mRUhcnREODt4Uzp/0dpuD1i+oSrz8hIcAvZMqgAh8F1nSOQ
d8N0TnrJ2w0j63R0mDfoNiRg+2Olxwy0J+xQgNimSC8rOPahu8msatUkXg/JtFDX
z4DR8aawD45uJ+tO18Tr
=bMSR
-----END PGP SIGNATURE-----

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


Mime
View raw message