{"id":274,"date":"2025-02-09T11:45:57","date_gmt":"2025-02-09T10:45:57","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=274"},"modified":"2025-02-09T11:46:48","modified_gmt":"2025-02-09T10:46:48","slug":"jakarta-ee-wildfly-securityexception-setcontextclassloader-vs-thenapplyasync","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=274","title":{"rendered":"Jakarta EE\/Wildfly: SecurityException: setContextClassLoader vs. thenApplyAsync"},"content":{"rendered":"\n<p>Heute mal nur eine Information ohne tiefe Erkl\u00e4rungen, da ich dem Ph\u00e4nomen nicht tiefer auf den Grund gegangen bin (insb. da zuk\u00fcnftig die virtual Threads sicher die bessere Alternative sind). Nach einem Update (vermutlich Java) warf eine unserer Jakarta EE Applikationen den Fehler<\/p>\n\n\n\n<p><code>CompletableFuture.supplyAsync java.lang.SecurityException: setContextClassLoader<\/code><\/p>\n\n\n\n<p>bei der REST-Abfrage verschiedener externer Quellen. Grund war ein <code>whenComplete <\/code>(ohne async und Angabe des Executors). Erste Untersuchungen haben ergeben, dass es bei  einigen Implementierungen vorkommen kann, dass  ein Default Executer verwendet wird. Beim Zugriff auf eine Managed Bean kam es nun zu dem angezeigten Sicherheitsfehler. Behoben wurde das Problem durch Nutzung der Async Methode mit dem gleichen Executer, der an alle Teile der Ausf\u00fchrung \u00fcbergeben wurde z.B.<\/p>\n\n\n\n<p><code>compFutureWait4End.whenCompleteAsync(stageOpenHabServerDataComplete, <strong>this<\/strong>.scheduledExecuterService);<\/code><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Heute mal nur eine Information ohne tiefe Erkl\u00e4rungen, da ich dem Ph\u00e4nomen nicht tiefer auf den Grund gegangen bin (insb. da zuk\u00fcnftig die virtual Threads sicher die bessere Alternative sind). Nach einem Update (vermutlich Java) warf eine unserer Jakarta EE Applikationen den Fehler CompletableFuture.supplyAsync java.lang.SecurityException: setContextClassLoader bei der REST-Abfrage verschiedener externer Quellen. Grund war ein [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,4],"tags":[],"class_list":["post-274","post","type-post","status-publish","format-standard","hentry","category-java","category-jee"],"_links":{"self":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=274"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/274\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/274\/revisions\/275"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}