# Dynamic Web-Project mit CDI



## Tintenfisch (23. Sep 2022)

Hallo Forum,
Ich bringe mir seit kurzem JSF näher und würde nun gerne die ursprünglichen ManagedBeans zu CDI migrieren. Dazu habe ich die Deklaration CDI entsprechend angepasst, sowie eine beans.xml Datei meinem WEB_INF Verzeichnis hinzugefügt. 
Alles was ich im Web so finde, spiegelt in der Regel nur diese Schritte wieder, jedoch gelingt es nicht, Daten aus einer CDI Klasse, über die View anzuzeigen. 

Anbei mal der meines Erachtens relevante Code. Vielleicht erkennt ja jemand von euch etwas, was ich übersehe oder aber nicht weiß. Vielen Dank schonmal fürs Lesen  
Nutzen tue ich Eclipse mit Glassfish 5 und Maven.


```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">

<h:head>
    <title>CDI</title>
</h:head>
    <h:body>
        <h3>CDI_Inject</h3>
        <h:outputText value = "#{cDIBean.sayHallo}"></h:outputText>
        <h:outputText value = "#{cDIBean.requestBean.sayHallo}"></h:outputText>
    </h:body>
</html>
```


```
package beans;

import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import javax.inject.Named;


@Named // (value = "cDIBean") --> wurde mit uns ohne Value-Angabe probiert
@Dependent
public class CDIBean implements Serializable {
    
    @Inject
    private RequestBean requestBean;
    
    public String sayHallo () {
        return "Hallo";
    }
    
    @PostConstruct
    public void init () {
    }
    
    public RequestBean getRequestBean() {
        return requestBean;
    }

    public void setRequestBean(RequestBean requestBean) {
        this.requestBean = requestBean;
    }
}
```


```
package beans;

import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class RequestBean implements Serializable {
        
    public String sayHallo () {
        return "Hallo";
    }
}
```


```
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
       version="2.0" bean-discovery-mode="all">
</beans>
```


```
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>DependencyInjectionCDI</display-name>
  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.xhtml</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
    
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
    
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
 
  <context-param>     
    <param-name>javax.faces.ENABLE_CDI_RESOLVER_CHAIN</param-name>
    <param-value>true</param-value>
  </context-param>
 
</web-app>
```


----------



## mihe7 (23. Sep 2022)

Was spricht das server.log?


----------



## Tintenfisch (24. Sep 2022)

mihe7 hat gesagt.:


> Was spricht das server.log?



Anbei der server.log. Dazu muss ich sagen, dass dieser vom Deployen stammt, beim aufrufen der Seite wird keiner erzeugt.


```
[2022-09-24T00:28:53.170+0200] [glassfish 5.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133170] [levelValue: 800] [[
  visiting unvisited references]]

[2022-09-24T00:28:53.372+0200] [glassfish 5.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133372] [levelValue: 800] [[
  visiting unvisited references]]

[2022-09-24T00:28:53.381+0200] [glassfish 5.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133381] [levelValue: 800] [[
  visiting unvisited references]]

[2022-09-24T00:28:53.387+0200] [glassfish 5.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133387] [levelValue: 800] [[
  visiting unvisited references]]

[2022-09-24T00:28:53.391+0200] [glassfish 5.0] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133391] [levelValue: 800] [[
  visiting unvisited references]]

[2022-09-24T00:28:53.574+0200] [glassfish 5.0] [INFO] [] [org.jboss.weld.Event] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133574] [levelValue: 800] [[
  WELD-000411: Observer method [BackedAnnotatedMethod] public org.hibernate.validator.cdi.ValidationExtension.processAnnotatedType(@Observes ProcessAnnotatedType<T>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]

[2022-09-24T00:28:53.586+0200] [glassfish 5.0] [INFO] [] [org.jboss.weld.Event] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133586] [levelValue: 800] [[
  WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType<T>, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]

[2022-09-24T00:28:53.590+0200] [glassfish 5.0] [INFO] [] [org.jboss.weld.Event] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133590] [levelValue: 800] [[
  WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]

[2022-09-24T00:28:53.591+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133591] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.jersey.ext.cdi1x.transaction.internal.WebAppExceptionHolder is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.592+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133592] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.jersey.ext.cdi1x.transaction.internal.WebAppExceptionInterceptor is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.596+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133596] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionMapper is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.601+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133601] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class com.sun.faces.flow.FlowDiscoveryCDIHelper is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.612+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133612] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.jersey.ext.cdi1x.servlet.internal.CdiExternalRequestScope is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.616+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133616] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider$JaxRsParamProducer is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.622+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133622] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.cdi.transaction.TransactionalInterceptorMandatory is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.624+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133624] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.cdi.transaction.TransactionalInterceptorNever is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.626+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133626] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.cdi.transaction.TransactionalInterceptorNotSupported is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.627+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133627] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.cdi.transaction.TransactionalInterceptorRequired is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.628+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133628] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.cdi.transaction.TransactionalInterceptorRequiresNew is deprecated from CDI 1.1!]]

[2022-09-24T00:28:53.629+0200] [glassfish 5.0] [WARN] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972133629] [levelValue: 900] [[
  WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.cdi.transaction.TransactionalInterceptorSupports is deprecated from CDI 1.1!]]

[2022-09-24T00:28:54.046+0200] [glassfish 5.0] [INFO] [] [org.glassfish.soteria.servlet.SamRegistrationInstaller] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972134046] [levelValue: 800] [[
  Initializing Soteria 1.0 for context '/DependencyInjectionCDI']]

[2022-09-24T00:28:54.055+0200] [glassfish 5.0] [INFO] [jsf.config.listener.version] [javax.enterprise.resource.webcontainer.jsf.config] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972134055] [levelValue: 800] [[
  Mojarra 2.3.2 ( 20170627-2139 e63598abf2ed2bb1a24674f308a734e0dce18a72) für Kontext '/DependencyInjectionCDI' wird initialisiert.]]

[2022-09-24T00:28:54.501+0200] [glassfish 5.0] [INFO] [AS-WEB-GLUE-00172] [javax.enterprise.web] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972134501] [levelValue: 800] [[
  Loading application [DependencyInjectionCDI] at [/DependencyInjectionCDI]]]

[2022-09-24T00:28:54.557+0200] [glassfish 5.0] [INFO] [] [javax.enterprise.system.core] [tid: _ThreadID=50 _ThreadName=admin-listener(4)] [timeMillis: 1663972134557] [levelValue: 800] [[
  DependencyInjectionCDI was successfully deployed in 1.740 milliseconds.]]
```


----------



## mihe7 (24. Sep 2022)

Ersetz mal `@Dependent` durch `@RequestScoped`.


----------



## Tintenfisch (24. Sep 2022)

mihe7 hat gesagt.:


> Ersetz mal `@Dependent` durch `@RequestScoped`.


Habe ich eben mal ausprobiert, leider zeigt es auch keine Veränderung.

Ich hatte auch noch gelesen, dass wenn der Klassenname mit mehreren Großbuchstaben beginnt, in JSF dann nicht der erste Buchstabe kein geschrieben wird, sondern wie im eigentlichen Klassennamen groß (Bei mir wäre das dann wohl `"#{CDIBean.sayHallo}` und nicht wie gewohnt mir keinem Anfangsbuchstaben `"#{cDIBean.sayHallo}"`.
Dies hatte ich jedoch schon in beiden Varianten, ohne Erfolg ausprobieret.


----------



## mihe7 (24. Sep 2022)

Ich würde das mal systematisch debuggen. Entweder direkt über den Debugger oder mit entsprechenden Ausgaben. Gib der Bean in Named einen Namen, damit Du da schon einmal auf der sicheren Seite bist. Lass Dir in init was ausgeben, damit Du siehst, dass die Bean überhaupt erzeugt wird, analog für die anderen Methoden. Ruf die JSF-Seite mit Namen auf (also nix http://localhost:8080/context-path und das wars sondern http://localhost:8080/context-path/index.jsf bzw. index.xhtml) usw. Schau Dir den Quellcode im Browser und das Payara Log an. Irgendwo scheint ja ein kleiner Fehler zu sein.


----------



## Tintenfisch (25. Sep 2022)

> Gib der Bean in Named einen Namen


Ich habe die Bean nun benannt und dazu vom Project als auch den Server einen Clean durchgeführt. Nun funktioniert alles wie es soll. 

Danke für die Mithilfe


----------

