{"id":217,"date":"2008-12-04T18:40:00","date_gmt":"2008-12-04T18:40:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=217"},"modified":"2008-12-04T18:40:00","modified_gmt":"2008-12-04T18:40:00","slug":"inselraus-getcontextclassloader-vom-thread","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2008\/12\/inselraus-getcontextclassloader-vom-thread\/","title":{"rendered":"Inselraus: getContextClassLoader() vom Thread"},"content":{"rendered":"<p>Entwickler von Java-Enterprise-Applikationen haben oft damit zu k&#228;mpfen, dass immer der falsche Klassenlader eine Klasse bezieht und die Typen dann nicht zusammenpassen. In unserem Beispiel mit dem statischen Initialisierungsblock ist gut zu erkennen, dass durch das zweimalige Laden die Laufzeitumgebung auch zweimal die Anweisungen ausf&#252;hrt. H&#228;tten wir Singletons definiert, w&#252;rden ihre statische Anfragemethoden unterschiedliche, nicht kompatible Objekte liefern, obwohl es laut Defini-tion eines Singletons der Fall sein m&#252;sste. Allgemein gesprochen: Besonders Fabrikfunktionen liefern bei mehreren Versionen der Klasse unterschiedliche Objekte, die nicht zusammenpassen. Zwei L&#246;sungen gibt es hier: Zum einen bekommen die Fabrikfunktionen einen Klassenlader, in dessen Kontext sie die Klassen erzeugen k&#246;nnen, oder sie nutzen den Klassenlader, der mit einem Thread ver-bunden ist.<\/p>\n<p>Jeder Thread ist mit einem Klassenlader assoziiert, der standardm&#228;&#223;ig mit dem Standardklassenlader identisch ist. getContextClassLoader() auf dem Thread-Objekt bezieht diesen Klassenlader:<\/p>\n<p>Listing 8.13&#160;&#160;&#160; com\/tutego\/insel\/lang\/ThreadClassLoader.java, main()   <br \/>ClassLoader loader = Thread.currentThread().getContextClassLoader();    <br \/>System.out.println( loader );&#160; \/\/ sun.misc.Launcher$AppClassLoader@a12a00    <br \/>loader = ThreadClassloader.class.getClassLoader();    <br \/>System.out.println( loader );&#160; \/\/ sun.misc.Launcher$AppClassLoader@a12a00<\/p>\n<p>Soll der assoziierte Klassenlader ge&#228;ndert werden, bewerkstelligt dies setContextClassLoader().<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Entwickler von Java-Enterprise-Applikationen haben oft damit zu k&#228;mpfen, dass immer der falsche Klassenlader eine Klasse bezieht und die Typen dann nicht zusammenpassen. In unserem Beispiel mit dem statischen Initialisierungsblock ist gut zu erkennen, dass durch das zweimalige Laden die Laufzeitumgebung auch zweimal die Anweisungen ausf&#252;hrt. H&#228;tten wir Singletons definiert, w&#252;rden ihre statische Anfragemethoden unterschiedliche, nicht [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-217","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=217"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/217\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}