diff --git a/.idea/artifacts/jsfdemo_ejb_exploded.xml b/.idea/artifacts/jsfdemo_ejb_exploded.xml
new file mode 100644
index 0000000..90e7411
--- /dev/null
+++ b/.idea/artifacts/jsfdemo_ejb_exploded.xml
@@ -0,0 +1,9 @@
+
+
+ $PROJECT_DIR$/out/artifacts/jsfdemo_ejb_exploded
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/jsfdemo_war_exploded.xml b/.idea/artifacts/jsfdemo_war_exploded.xml
new file mode 100644
index 0000000..e03b8e1
--- /dev/null
+++ b/.idea/artifacts/jsfdemo_war_exploded.xml
@@ -0,0 +1,23 @@
+
+
+ $PROJECT_DIR$/jsfdemo/target/jsfdemo-1.0-SNAPSHOT
+
+
+ true
+ jsfdemo
+ war
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index f32ccde..5264490 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -9,6 +9,7 @@
+
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 134b3b9..cff944a 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -9,6 +9,7 @@
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index ab45356..a60049d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,6 +4,7 @@
+
diff --git a/jaxrsdemo/jaxrsdemo.iml b/jaxrsdemo/jaxrsdemo.iml
index dc9c244..6a56488 100644
--- a/jaxrsdemo/jaxrsdemo.iml
+++ b/jaxrsdemo/jaxrsdemo.iml
@@ -4,7 +4,9 @@
-
+
+
+
diff --git a/jsfdemo/jsfdemo.iml b/jsfdemo/jsfdemo.iml
new file mode 100644
index 0000000..0ae94f4
--- /dev/null
+++ b/jsfdemo/jsfdemo.iml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jsfdemo/pom.xml b/jsfdemo/pom.xml
new file mode 100644
index 0000000..830f992
--- /dev/null
+++ b/jsfdemo/pom.xml
@@ -0,0 +1,61 @@
+
+
+ 4.0.0
+ jsfdemo
+ war
+ jsfdemo
+
+
+ jeedemo
+ it.plague.jeedemo
+ 1.0-SNAPSHOT
+
+
+
+ UTF-8
+ 1.7
+ 1.7
+
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ org.glassfish.main.extras
+ glassfish-embedded-all
+ provided
+
+
+ junit
+ junit
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+ 1.7
+ 1.7
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.2.2
+
+ false
+
+
+
+
+
diff --git a/jsfdemo/src/main/java/it/plague/jeedemo/Book.java b/jsfdemo/src/main/java/it/plague/jeedemo/Book.java
new file mode 100644
index 0000000..b877ec1
--- /dev/null
+++ b/jsfdemo/src/main/java/it/plague/jeedemo/Book.java
@@ -0,0 +1,47 @@
+package it.plague.jeedemo;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQuery;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@XmlRootElement
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@NamedQuery(name = Book.FIND_ALL, query = "select b from Book b")
+public class Book {
+
+ public static final String FIND_ALL = "FIND_ALL";
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ @NotNull
+ @Size(min = 4, max = 50)
+ @Column(nullable = false)
+ private String title;
+
+ private Float price;
+
+ @Column(length = 2000)
+ private String description;
+
+ private String isbn;
+
+ private Integer nbOfPage;
+
+ private Boolean illustrations;
+
+}
diff --git a/jsfdemo/src/main/java/it/plague/jeedemo/BookEJB.java b/jsfdemo/src/main/java/it/plague/jeedemo/BookEJB.java
new file mode 100644
index 0000000..9931590
--- /dev/null
+++ b/jsfdemo/src/main/java/it/plague/jeedemo/BookEJB.java
@@ -0,0 +1,35 @@
+package it.plague.jeedemo;
+
+import java.util.List;
+import javax.annotation.sql.DataSourceDefinition;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.persistence.EntityManager;
+
+@Named
+@Stateless
+@DataSourceDefinition(
+ name = "java:global/jdbc/lab11DS",
+ className = "org.apache.derby.jdbc.EmbeddedDriver",
+ url = "jdbc:derby:memory:lab11DB;create=true;user=app;password=app"
+)
+public class BookEJB {
+
+ @Inject
+ private EntityManager em;
+
+ public Book createBook(Book book) {
+ em.persist(book);
+ return book;
+ }
+
+ public List findAllBooks() {
+ return em.createNamedQuery(Book.FIND_ALL, Book.class).getResultList();
+ }
+
+ public Book findBookById(Long id) {
+ return em.find(Book.class, id);
+ }
+
+}
diff --git a/jsfdemo/src/main/java/it/plague/jeedemo/BookView.java b/jsfdemo/src/main/java/it/plague/jeedemo/BookView.java
new file mode 100644
index 0000000..77db08d
--- /dev/null
+++ b/jsfdemo/src/main/java/it/plague/jeedemo/BookView.java
@@ -0,0 +1,36 @@
+package it.plague.jeedemo;
+
+import javax.enterprise.context.RequestScoped;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.inject.Inject;
+import javax.inject.Named;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Named
+@RequestScoped
+@NoArgsConstructor
+public class BookView {
+
+ @Inject
+ private BookEJB bookEJB;
+
+ @Getter
+ @Setter
+ private Book book = new Book();
+
+ public void doFindBookById() {
+ book = bookEJB.findBookById(book.getId());
+ }
+
+ public String doCreateBook() {
+ bookEJB.createBook(book);
+ FacesContext.getCurrentInstance().addMessage(null,
+ new FacesMessage(FacesMessage.SEVERITY_INFO, "Book created",
+ "The book " + book.getTitle() + " has been created with id = " + book.getId()));
+ return "newBook.xhtml";
+ }
+
+}
diff --git a/jsfdemo/src/main/java/it/plague/jeedemo/DatabaseProducer.java b/jsfdemo/src/main/java/it/plague/jeedemo/DatabaseProducer.java
new file mode 100644
index 0000000..d1c9dfb
--- /dev/null
+++ b/jsfdemo/src/main/java/it/plague/jeedemo/DatabaseProducer.java
@@ -0,0 +1,12 @@
+package it.plague.jeedemo;
+
+import javax.enterprise.inject.Produces;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+public class DatabaseProducer {
+
+ @Produces
+ @PersistenceContext(unitName = "jsfdemoPU")
+ private EntityManager em;
+}
diff --git a/jsfdemo/src/main/resources/META-INF/persistence.xml b/jsfdemo/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..84a6131
--- /dev/null
+++ b/jsfdemo/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ java:global/jdbc/lab11DS
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jsfdemo/src/main/webapp/WEB-INF/beans.xml b/jsfdemo/src/main/webapp/WEB-INF/beans.xml
new file mode 100644
index 0000000..ae0f4bf
--- /dev/null
+++ b/jsfdemo/src/main/webapp/WEB-INF/beans.xml
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/jsfdemo/src/main/webapp/WEB-INF/faces-config.xml b/jsfdemo/src/main/webapp/WEB-INF/faces-config.xml
new file mode 100644
index 0000000..c2df863
--- /dev/null
+++ b/jsfdemo/src/main/webapp/WEB-INF/faces-config.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/jsfdemo/src/main/webapp/WEB-INF/web.xml b/jsfdemo/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..aebe7b9
--- /dev/null
+++ b/jsfdemo/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,15 @@
+
+
+
+ Faces Servlet
+ javax.faces.webapp.FacesServlet
+ 1
+
+
+ Faces Servlet
+ *.xhtml
+
+
\ No newline at end of file
diff --git a/jsfdemo/src/main/webapp/layout.xhtml b/jsfdemo/src/main/webapp/layout.xhtml
new file mode 100644
index 0000000..109df1d
--- /dev/null
+++ b/jsfdemo/src/main/webapp/layout.xhtml
@@ -0,0 +1,22 @@
+
+
+
+
+
+ Defautl title
+
+
+
+
+ Default title
+
+
+ Default content
+
+
+
+
diff --git a/jsfdemo/src/main/webapp/newBook.xhtml b/jsfdemo/src/main/webapp/newBook.xhtml
new file mode 100644
index 0000000..77c2a87
--- /dev/null
+++ b/jsfdemo/src/main/webapp/newBook.xhtml
@@ -0,0 +1,47 @@
+
+
+
+
+
+ Create new book
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ List of books
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jsfdemo/src/main/webapp/viewBook.xhtml b/jsfdemo/src/main/webapp/viewBook.xhtml
new file mode 100644
index 0000000..938f0ce
--- /dev/null
+++ b/jsfdemo/src/main/webapp/viewBook.xhtml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+ View a book
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jsfdemo/src/test/java/it/plague/jeedemo/AppTest.java b/jsfdemo/src/test/java/it/plague/jeedemo/AppTest.java
new file mode 100644
index 0000000..5bd98cc
--- /dev/null
+++ b/jsfdemo/src/test/java/it/plague/jeedemo/AppTest.java
@@ -0,0 +1,20 @@
+package it.plague.jeedemo;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+{
+ /**
+ * Rigorous Test :-)
+ */
+ @Test
+ public void shouldAnswerWithTrue()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/pom.xml b/pom.xml
index 8d69e26..e3f84a3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,6 +17,7 @@
jmsdemo
jaxwsdemo-service
jaxrsdemo
+ jsfdemo