I use Java 8, glassfish 5 build 25, Eclipse. I'm trying to upgrade from Java EE 7 to Java EE 8. So I started with this simple example.
Web.xml
<?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>Play ID</display-name>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<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>
</web-app>
CDI Bean:
@Named
@ViewScoped
public class CommentFront implements Serializable {
private static final long serialVersionUID = 1L;
public void addComment() {
System.out.println("I don’t work: ");
}
}
Simple JSF page comment.xhtml
<!DOCTYPE html >
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
>
<h:head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<title>Derbyware</title>
<h:body>
<h:form id="form">
<h:commandButton id="OneBtn" value="1 Comment" action="#{commentFront.addComment()}" >
</h:commandButton>
</h:form>
</h:body>
</h:head>
</html>
The error:
javax.el.PropertyNotFoundException: /comment.xhtml @17,89 action="#{commentFront.addComment()}": Target Unreachable, identifier 'commentFront' resolved to null
When I first start glassfish it prints:
2018-10-31T14:26:57.985+0000|Info: WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType<T>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
2018-10-31T14:26:58.032+0000|WARN: WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.cdi.transaction.TransactionalInterceptorMandatory is deprecated from CDI 1.1!
...
2018-10-31T14:26:58.048+0000|WARN: WELD-000146: BeforeBeanDiscovery.addAnnotatedType(AnnotatedType<?>) used for class org.glassfish.jersey.ext.cdi1x.transaction.internal.TransactionalExceptionMapper is deprecated from CDI 1.1!
2018-10-31T14:26:58.282+0000|Info: Initializing Soteria 1.0 for context '/Play_ID'
2018-10-31T14:26:58.282+0000|Info: Initializing Mojarra 2.3.2 ( 20170627-2139 e63598abf2ed2bb1a24674f308a734e0dce18a72) for context '/Play_ID'
2018-10-31T14:26:58.829+0000|Info: Loading application [Play_ID] at [/Play_ID]
2018-10-31T14:26:58.938+0000|Info: Play_ID was successfully deployed in 1,932 milliseconds.
Why does something as simple as this does not work on glassfish 5 ????
Solution 1:
I used this from the answer at Changing faces-config.xml from 2.2 to 2.3 causes javax.el.PropertyNotFoundException: Target Unreachable, identifier 'bean' resolved to null
now everyting works as it should.
Solution 2:
switch to Payara 5.183, it works out of the box. No need for solution 1
Opinion: Why the hell is glassfish this broken. it's pathetic how the reference implementation application server for Java EE 8 fails at such a simple job. I hope this chane now that it chaned home from Oracle to Eclipse.
I think I will switch to Payara until glassfish is fixed.