[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [equinox-dev] Use of Thread Context ClassLoader consideredharmful?

You may have noticed that the wiki is rather detailed in describing the buddy class loading design. This was because the Equinox team prepared the design as input for a future OSGi specification. The design works for about 80% of the cases, but it does have some disadvantages.

1) There is no good way to force the ContextFinder across all threads in the system. If some code unsets the context class loader for a thread then the context finder will no longer take effect.
2) ContextFinder has issues when used with Class.forName(String, boolean, ClassLoader). Class.forName will cause the specified class loader to be the initiating class loader. The VM will cache all Class objects for the initiating class loader, any time that class loader is asked for a particular class name again it must return the same Class object as previously returned. This causes issues if multiple versions of a package need to be supported.
3) There were other issues, but they are not fresh in my mind ;-)

At any rate, this proposal fell out of the specification for OSGi R4 V4.2 core specification. OSGi could decide to tackle this issue again in the next specification, but I am not confident the solution will end up being buddy class loading.

Tom



Inactive hide details for "Michael Furtak" ---10/06/2009 02:00:33 PM---Hi Tom,"Michael Furtak" ---10/06/2009 02:00:33 PM---Hi Tom,


From:

"Michael Furtak" <mfurtak@xxxxxxx>

To:

"Equinox development mailing list" <equinox-dev@xxxxxxxxxxx>

Date:

10/06/2009 02:00 PM

Subject:

RE: [equinox-dev] Use of Thread Context ClassLoader consideredharmful?




Hi Tom,

The Buddy manifest adjustments do indeed resolve the issue. Thank you for that excellent link.

Out of curiosity, are you aware of any effort to make this solution a part of the OSGi spec?

Thanks again,
-Mike





THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS ADDRESSED. IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL AND EXEMPT FROM DISCLOSURE UNDER APPLICABLE LAW. If you are not the intended recipient, your use of this message for any purpose is strictly prohibited. If you have received this communication in error, please delete the message and notify the sender so that we may correct our records.




From: equinox-dev-bounces@xxxxxxxxxxx [mailto:equinox-dev-bounces@xxxxxxxxxxx] On Behalf Of Thomas Watson
Sent:
Tuesday, October 06, 2009 2:14 PM
To:
Equinox development mailing list
Subject:
Re: [equinox-dev] Use of Thread Context ClassLoader consideredharmful?

In Equinox we have something called buddy class loading (not OSGi specified). It may be used to help your situation. See http://wiki.eclipse.org/index.php/Context_Class_Loader_Enhancements

HTH

Tom



Inactive hide details for "Michael Furtak" ---10/06/2009 12:53:27 PM---Hi all,"Michael Furtak" ---10/06/2009 12:53:27 PM---Hi all,


From:

"Michael Furtak" <mfurtak@xxxxxxx>

To:

"Equinox development mailing list" <equinox-dev@xxxxxxxxxxx>

Date:

10/06/2009 12:53 PM

Subject:

[equinox-dev] Use of Thread Context ClassLoader considered harmful?





Hi all,

I am using Apache XMLBeans 2.4 within Equinox 3.5, and am running into
problems. Specifically, I (and others [1,2] - references at bottom) have
noticed that a specific part of the type resolution process breaks when
run in an OSGi environment.

After some investigation, I have found that XMLBeans is creating its
SchemaTypeLoader objects with the current thread's context
classloader[3]. My experience has been that any time a library does this
and then needs to load classes that are in a different OSGi bundle, the
classes can not be resolved.

So I suppose my questions are: Could Equinox do more to prevent this
kind of use-case from breaking down? Alternatively, for compatibility
with an OSGi environment, is using a TCCL considered harmful? If so,
what should I suggest in my XMLBeans ticket as an OSGi-compatible
alternative?


Thanks,
-Mike Furtak


1)

http://markmail.org/message/vx2vdg7yhb4l3ej6#query:+page:1+mid:vx2vdg7yh
b4l3ej6+state:results

2)

http://mail-archives.apache.org/mod_mbox/ws-axis-user/200701.mbox/%3C8d2
a81130701171341p55f95b70o7f144ea7d941639a@xxxxxxxxxxxxxx%3E

3)

http://grepcode.com/file/repo1.maven.org$maven2@xxxxxxxxxxxxxxxxxxx$xmlb
eans@xxxxx@org$apache$xmlbeans$impl$schema$SchemaTypeLoaderImpl.java#Sch
emaTypeLoaderImpl.getContextTypeLoader%28%29 (Line 131)




THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS ADDRESSED. IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL AND EXEMPT FROM DISCLOSURE UNDER APPLICABLE LAW. If you are not the intended recipient, your use of this message for any purpose is strictly prohibited. If you have received this communication in error, please delete the message and notify the sender so that we may correct our records.
_______________________________________________
equinox-dev mailing list
equinox-dev@xxxxxxxxxxx

https://dev.eclipse.org/mailman/listinfo/equinox-dev
_______________________________________________
equinox-dev mailing list
equinox-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/equinox-dev


GIF image

GIF image

GIF image

GIF image