{"id":157,"date":"2019-05-15T09:19:02","date_gmt":"2019-05-15T07:19:02","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=157"},"modified":"2022-12-05T09:19:22","modified_gmt":"2022-12-05T08:19:22","slug":"jsf-converter-mit-ejb-injection-jsf-2-3","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=157","title":{"rendered":"JSF Converter mit EJB Injection \u2013 JSF 2.3"},"content":{"rendered":"\n<p>Gerade f\u00fcr Konverter war es schmerzlich, dass ein Injizieren von EJBs und anderen CDI Beans nicht m\u00f6glich war. Mit JSF 2.3 kam nun endlich das notwendige Feature (wie auch f\u00fcr Validator und Behavior).<\/p>\n\n\n\n<p><a href=\"https:\/\/javaserverfaces.github.io\/whats-new-in-jsf23.html\">https:\/\/javaserverfaces.github.io\/whats-new-in-jsf23.html<\/a><\/p>\n\n\n\n<p>beschreibt die neuen M\u00f6glichkeiten und auch dass das Attribut \u201emanaged = true\u201c gesetzt werden muss.<\/p>\n\n\n\n<p>Verwendet man nun ausschlie\u00dflich diese Informationen und versucht eine EJB in einen @FacesConverter zu injizieren, erh\u00e4lt man eine NPE, da das Injizieren nicht funktioniert. Folgende weiteren Bedingungen m\u00fcssen erf\u00fcllt sein:<\/p>\n\n\n\n<p>Es m\u00fcssen JSF Bibliotheken gr\u00f6\u00dfer gleich Version 2.3. verwendet werden. Pr\u00fcft diese beim Starten des Servers in den Logs. Gegebenenfalls wurde die Mojarra Implementierung explizit in der web.xml gesetzt und muss angepasst werden.<\/p>\n\n\n\n<p>Es muss ein beans.xml Datei existieren, in der<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \nbean-discovery-mode=\"all\" \n<\/pre>\n\n\n\n<p>gesetzt ist (Achtung annotated ist hier nicht ausreichend).<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;beans xmlns=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\"\n   xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n   xsi:schemaLocation=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee \n                http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\/beans_2_0.xsd\"\n   bean-discovery-mode=\"all\" version=\"2.0\"&gt;\n&lt;\/beans&gt;\n<\/pre>\n\n\n\n<p>Die faces-config.xml muss die Version 2.3 vorweisen<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n&lt;?xml version='1.0' encoding='UTF-8'?&gt;\n&lt;faces-config version=\"2.3\"\n          xmlns=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\"\n          xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n          xsi:schemaLocation=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee \n                    http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\/web-facesconfig_2_3.xsd\"&gt;\n    ....\n&lt;\/faces-config&gt;\n<\/pre>\n\n\n\n<p>Der letzte und eventuell unerwartetste Schritt ist eine Konfiguration \u00fcber eine Annotation, die einmal im Projekt existieren muss.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \npackage de.schoeso.jsf;\n\nimport javax.faces.annotation.FacesConfig;\nimport javax.faces.annotation.FacesConfig.Version;\n\n\/\/ Aktiviert CDI build-in Beans\n@FacesConfig(\n    version = Version.JSF_2_3\n)\npublic class ConfigBean {\n\n    \/** Konstruktor *\/\n    public ConfigBean() {\n    }\n\n}\n<\/pre>\n\n\n\n<p>Erst all diese Einstellungen f\u00fchren zum Erfolgt. Als verw\u00f6hnter JEE Nutzer h\u00e4tte man sich gew\u00fcnscht, dass dies wie andere Funktionen von JEE einfacher zu verwenden ist &#8230; aber man soll nicht klagen. Eventuell tut sich da ja noch etwas.<\/p>\n\n\n\n<p>Bis zum n\u00e4chsten Mal<\/p>\n\n\n\n<p>Arndt<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gerade f\u00fcr Konverter war es schmerzlich, dass ein Injizieren von EJBs und anderen CDI Beans nicht m\u00f6glich war. Mit JSF 2.3 kam nun endlich das notwendige Feature (wie auch f\u00fcr Validator und Behavior). https:\/\/javaserverfaces.github.io\/whats-new-in-jsf23.html beschreibt die neuen M\u00f6glichkeiten und auch dass das Attribut \u201emanaged = true\u201c gesetzt werden muss. Verwendet man nun ausschlie\u00dflich diese Informationen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-157","post","type-post","status-publish","format-standard","hentry","category-jee"],"_links":{"self":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/157","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=157"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/157\/revisions"}],"predecessor-version":[{"id":158,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/157\/revisions\/158"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}