tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Eggers <its_toas...@yahoo.com>
Subject Re: Tomcat 6.0 CLASSPATH query
Date Sun, 09 Dec 2012 17:13:23 GMT
Reply is inline. Please do not top post. I had to read your response and 
then scroll to the bottom to remember what I wrote.
On 12/8/2012 12:57 PM, vicky007aggarwal@yahoo.co.in wrote:
> Thanks Mark
>
> Sorry for the confusion i created related to my requirements. 5 Out
> of 6  requirements you stated below are correct. The last point i.e
> $CATALINA_BASE is writable. I can manipulate/write files to this
> location. So now do you have anything more to add to your proposed
> solution as you suggested below
>
>
>
> Thanks, Vicky
>

Make a directory under $CATALINA_BASE. Call it Resources. Then add in 
$CATALINA_BASE/bin/setenv.sh something like the following:

CLASSPATH=$CATALINA_BASE/Resouces/your-resource.jar
export CLASSPATH

Again, I've not done this so who knows if it will work.

As Chris and I (and others) have said, these resources really belong in 
WEB-INF/classes. I have described how you can include those in your 
build environment.

I understand that you have 10 web applications and the configuration 
files change frequently. At that point, if you don't want to 
continuously bounce your web applications (or Tomcat), I would look at 
an alternative way for reading resources. I suggested a database and JNDI.

. . . . just my two cents
/mde/

>
> On Dec 9, 2012, at 2:09 AM, Mark Eggers <its_toasted@yahoo.com>
> wrote:
>
>> See at the end for a truly spectacularly bad potential solution.
>> Note that I have not tried this, so your mileage may vary.
>>
>> On 12/8/2012 11:51 AM, vicky wrote:
>>> Thanks Mark for your valuable suggestions.
>>>
>>> But in my project i have a requirement to share one
>>> "resource/properties file " across 10 applications deployed on
>>> single tomcat instance
>>>
>>> We cannot afford to add the same properties file to all archives
>>> as its contents keep changing.
>>>
>>> Another restriction which i have is that i cannot place any file
>>> under "$CATALINA_HOME" directories , these are read only for us.
>>>
>>> Based on afore said concerns, do you have any better way out
>>> ..please suggest.
>>>
>>> Appreciated all of your help
>>>
>>> Thanks for ur time Vicky
>>>
>>>
>>> ________________________________ From: Mark Eggers
>>> <its_toasted@yahoo.com> To: Tomcat Users List
>>> <users@tomcat.apache.org> Sent: Sunday, 9 December 2012 12:23 AM
>>> Subject: Re: Tomcat 6.0 CLASSPATH query
>>>
>>> Comments inline below (a bit fuzzy from the move yet).
>>>
>>> On 12/8/2012 9:58 AM, vicky wrote:
>>>>
>>>> I have read the Tomcat 6.0 classloader documentation(below
>>>> link), from this what i understood is that the
>>>> "classes/jar/resource/properties file" get loaded  from the
>>>> following locations
>>>>
>>>> 1.Bootstrap classes of your JVM  ($JAVA_HOME/jre/lib/ext).
>>>> 2.System class loader classes  ( Add bootstrap.jar &
>>>> tomcat-juli.jar to CLASSPATH variable) 3.Common class loader
>>>> classes ( refers $CATALINA_BASE/lib  & $CATALINA_HOME/lib ) &
>>>> uses $CATALINA_BASE/conf/catalina.properties 4.
>>>> /WEB-INF/classes of your web application 5. /WEB-INF/lib/*.jar
>>>> of your web application
>>>>
>>>> The thing which is still puzzling me is that how my
>>>> "resource/properties files" get loaded to Tomcat CLASSPATH when
>>>> i add them to "$CATALINA_BASE/bin" directory & When i move the
>>>> same files to $CATALINA_BASE/conf directory then it doesn't get
>>>> added to Tomcat CLASSPATH.
>>>>
>>>> My deployed applications need"properties/resource files ", Can
>>>> someone please help me in understand the optimal way of adding
>>>> these files to Tomcat CLASSPATH. Does placing the files under
>>>> <CATALINA_BASE>/bin is the right approach.Please suggest
>>>
>>> Why in the world are you adding these resource files to Tomcat's
>>> CLASSPATH? If the resources are application - specific, you
>>> don't need to do this at all.
>>>
>>> Just add the files to your local application. In Maven, there's
>>> a special directory for that:
>>>
>>> src/main/resources
>>>
>>> In NetBeans, I normally create a separate package for all of my
>>> configuration files.
>>>
>>> I think in Eclipse you'll have to make a subdirectory under
>>> WEB-INF/classes and copy the files there. That's unpleasant.
>>> Eclipse will include that in the build of the WAR file when you
>>> do an "export".
>>>
>>> Then, just do the following in your code to reference the
>>> resource.
>>>
>>> InputStream in =
>>> this.getClass().getClassLoader().getResourceAsStream(configfile);
>>>
>>>
>>>
Where configfile is the complete classpath to your resource.
>>>
>>> This is nice. It works in exploded WARs, it works in WAR files,
>>> it works in JARs.
>>>
>>> No mucking about with CLASSPATH. No polluting other applications
>>> or Tomcat with spurious application - specific resources. This
>>> enables you to run several copies of the same web application in
>>> the same container, all with different configurations.
>>>
>>> Just search for getResourceAsStream() for more explanation.
>>>
>>>> In my organisation i cannot add anything to "$CATALINA_HOME/lib
>>>> or bin" location ,these are read only directories
>>>>
>>>> http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html
>>>>
>>>>
Thanks for your help Vicky
>>>
>>> Not needed.
>>>
>>>>
>>>>
>>>> ________________________________ From: Pid * <pid@pidster.com>
>>>> To: Tomcat Users List <users@tomcat.apache.org> Sent: Saturday,
>>>> 8 December 2012 10:34 PM Subject: Re: Tomcat 6.0 CLASSPATH
>>>> query
>>>>
>>>> On 8 Dec 2012, at 03:29, "vicky007aggarwal@yahoo.co.in"
>>>> <vicky007aggarwal@yahoo.co.in> wrote:
>>>>
>>>>> Application is deployed under tomcat webapps directory . It
>>>>> tries to refer to application specific properties file from
>>>>> tomcat classpath, for that we copied it under tomcat bin
>>>>> directory.
>>>>>
>>>>> My query is that does this is the right way to add
>>>>> properties file to tomcat classpath?
>>>>
>>>> Did you try putting it in tomcat/lib?
>>>>
>>>>
>>>> p
>>>
>>>>
>>>>
>>>>
>>>>>
>>>>> Thanks for ur help, Vicky
>>>>>
>>>>>
>>>>>
>>>>> On Dec 8, 2012, at 2:11 AM, Christopher Schultz
>>>>> <chris@christopherschultz.net> wrote:
>>>>>
>>>>>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
>>>>>>
>>>>>> Vicky,
>>>>>>
>>>>>> On 12/7/12 11:48 AM, vicky wrote:
>>>>>>> I have a requirement in which i need to add couple of
>>>>>>> properties files to tomcat CLASSPATH as these are needed
>>>>>>> for my application deployed in Tomcat 6.0.
>>>>>>>
>>>>>>> One strange thing is that, i need to add the all my
>>>>>>> properties files to "<CATALINA_BASE>/bin" directory else
>>>>>>> these all wont get added to Tomcat classpath.
>>>>>>
>>>>>> Where does the code live that attempts to load those
>>>>>> properties files?
>>>>>>
>>>>>> - -chris
>>>
>>> . . . just my (I hate moving) 2 cents /mde/
>>
>> Vicky,
>>
>> So let me now understand your requirements.
>>
>> 1. Properties files to be read by web applications 2. 10 web
>> applications on one Tomcat instance 3. All 10 web applications read
>> identical files 4. Property files change frequently 5.
>> $CATALINA_HOME and $CATALINA_BASE are read-only 6.
>> $CATALINA_BASE/lib and $CATALINA_BASE/bin are read-only
>>
>> In the future it would be a good idea to list all of your
>> requirements and restrictions at once, rather than having the list
>> extract it by recommending solutions which fail one or more
>> requirements.
>>
>> The approach (placing resource files on the CLASSPATH) is probably
>> not a good one given the requirements as you've stated them.
>>
>> If you're wedded to reading resources from a CLASSPATH, the only
>> reasonable way to live with the above requirements is to use files
>> in WEB-INF/classes. Then the application will have to be changed
>> each time you update the resource files. This all can be scripted
>> so that operations won't have too big of a burden.
>>
>> Placing the resources in a JAR somewhere on Tomcat's CLASSPATH
>> poses several problems.
>>
>> 1. You cannot modify the directories where Tomcat reads JARs 2. A
>> change to the resource will require a Tomcat restart
>>
>> One of the only ways I can see around this is as follows.
>>
>> 1. create a setenv.sh in $CATALINA_BASE/bin (or setenv.bat)
>>
>> I realize you do not have write access to this, but maybe
>> operations can create that file.
>>
>> 2. In that setenv.sh, add the following:
>>
>> CLASSPATH=/place/where/your/jar/is.jar EXPORT CLASSPATH
>>
>> 3. Make the /place/where/your/jar/is.jar readable
>>
>> This JAR file must be readable by the user running Tomcat
>>
>> 4. In is.jar add all your configuration files
>>
>> This is a pretty spectacularly bad solution for several reasons.
>>
>> 1. You're reading a file outside of Tomcat's directory structure 2.
>> Eunning under the security manager would be challenging 3. Tomcat
>> restart for changing the JAR with the properties files
>>
>> At this point, I would seriously look at scripting the 10 web
>> application updates, or loading the properties files in a database
>> and access them via JNDI.
>>
>> . . . . just my two cents. /mde/


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


Mime
View raw message