7

why tomcat has its own classloader. what is the advantage of having user defined classloader

Dead Programmer
  • 12,427
  • 23
  • 80
  • 112
  • As another answer I might mention that I'm pretty sure that if you overwrite the classloader you can do some pretty impressive meta stuff with your code. It can let you implement your own encryption schemes and should be able to do some aspect-j style tricks (For instance, having every call to "Log" tagged with the name of the class/line number it's logging from. I didn't make this an "Answer" because I haven't done this stuff but I think it's possible. – Bill K Aug 23 '10 at 19:01

3 Answers3

12

It isolates the various webapplications deployed into the container; that is, the behaviour of a webapplication will not be affected by (un)deploying another webapplication.

Each webapp only sees its own classes, not those provided by the other applications. This allows different webapps to use different versions of the same class. Deploying several webapplications would be a nightmare without that isolation.

Similarly, OSGI bundles get their own class loaders so different bundles can use different versions of the same plugin. Again, this isolation makes it less likely that adding a plugin (with its depedent libraries) will affect the other plugins in the system.

meriton
  • 68,356
  • 14
  • 108
  • 175
8

Tomcat (and other application containers) need to be able to handle loading classes from WAR files etc. How would you be able to do that without using user-defined classloaders?

EDIT: Basically you need user-defined classloaders if you need to load classes or resources in "unusual" ways... such as from an EAR or WAR file. As another example, you might load classes from a database, or from some secure storage.

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194
3

I worked on a system once that had a classloader that loaded classes from a distributed DB. That way you could modify your code, compile it and have the compiler dump it to the DB, then anyone who restarted their system would have it load immediately (this was for clients on a distributed client/server system where admins could create their own screen modules on the fly and push them out to the clients).

This had issues by the way, great theory but I can't recommend it.

Bill K
  • 62,186
  • 18
  • 105
  • 157