From f3682c9a5fbdb4cd14f93b5337c23c3e89110b50 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Thu, 4 Apr 2019 19:42:05 +0200 Subject: [PATCH] Aggiunto l'esempio del capitolo su JAX-RS --- .idea/compiler.xml | 4 +- .idea/encodings.xml | 1 + .idea/misc.xml | 1 + jaxrsdemo/jaxrsdemo.iml | 16 ++++ jaxrsdemo/pom.xml | 85 +++++++++++++++++++ .../it/plague/jeedemo/ApplicationConfig.java | 23 +++++ .../src/main/java/it/plague/jeedemo/Book.java | 43 ++++++++++ .../it/plague/jeedemo/BookRestService.java | 75 ++++++++++++++++ .../main/java/it/plague/jeedemo/Books.java | 29 +++++++ .../it/plague/jeedemo/DatabasePopulator.java | 59 +++++++++++++ .../src/main/resources/META-INF/beans.xml | 8 ++ .../main/resources/META-INF/persistence.xml | 16 ++++ jaxwsdemo-client/jaxwsdemo-client.iml | 27 ++++++ pom.xml | 1 + 14 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 jaxrsdemo/jaxrsdemo.iml create mode 100644 jaxrsdemo/pom.xml create mode 100644 jaxrsdemo/src/main/java/it/plague/jeedemo/ApplicationConfig.java create mode 100644 jaxrsdemo/src/main/java/it/plague/jeedemo/Book.java create mode 100644 jaxrsdemo/src/main/java/it/plague/jeedemo/BookRestService.java create mode 100644 jaxrsdemo/src/main/java/it/plague/jeedemo/Books.java create mode 100644 jaxrsdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java create mode 100644 jaxrsdemo/src/main/resources/META-INF/beans.xml create mode 100644 jaxrsdemo/src/main/resources/META-INF/persistence.xml create mode 100644 jaxwsdemo-client/jaxwsdemo-client.iml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 2d9eb95..f32ccde 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -9,16 +9,18 @@ - + + + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 7c40543..134b3b9 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -4,6 +4,7 @@ + diff --git a/.idea/misc.xml b/.idea/misc.xml index 39545a1..ab45356 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -2,6 +2,7 @@ + diff --git a/jaxrsdemo/jaxrsdemo.iml b/jaxrsdemo/jaxrsdemo.iml new file mode 100644 index 0000000..d344a87 --- /dev/null +++ b/jaxrsdemo/jaxrsdemo.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jaxrsdemo/pom.xml b/jaxrsdemo/pom.xml new file mode 100644 index 0000000..3380df3 --- /dev/null +++ b/jaxrsdemo/pom.xml @@ -0,0 +1,85 @@ + + + 4.0.0 + jaxrsdemo + war + jaxrsdemo + + + jeedemo + it.plague.jeedemo + 1.0-SNAPSHOT + + + + UTF-8 + 1.7 + 1.7 + + + + + org.eclipse.persistence + org.eclipse.persistence.jpa + + + org.eclipse.persistence + org.eclipse.persistence.jpa.modelgen.processor + 2.5.0 + provided + + + 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 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.12.4 + + + integration-test + + integration-test + verify + + + + + + + diff --git a/jaxrsdemo/src/main/java/it/plague/jeedemo/ApplicationConfig.java b/jaxrsdemo/src/main/java/it/plague/jeedemo/ApplicationConfig.java new file mode 100644 index 0000000..fa87e3c --- /dev/null +++ b/jaxrsdemo/src/main/java/it/plague/jeedemo/ApplicationConfig.java @@ -0,0 +1,23 @@ +package it.plague.jeedemo; + +import java.util.HashSet; +import java.util.Set; +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + +@ApplicationPath("rs") +public class ApplicationConfig extends Application { + + @Override + public Set> getClasses() { + Set> resources = new HashSet<>(); + addRestResources(resources); + return resources; + } + + private void addRestResources(Set> resources) { + resources.add(it.plague.jeedemo.BookRestService.class); + resources.add(org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.class); + } + +} diff --git a/jaxrsdemo/src/main/java/it/plague/jeedemo/Book.java b/jaxrsdemo/src/main/java/it/plague/jeedemo/Book.java new file mode 100644 index 0000000..1551ee2 --- /dev/null +++ b/jaxrsdemo/src/main/java/it/plague/jeedemo/Book.java @@ -0,0 +1,43 @@ +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.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 String id; + + @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/jaxrsdemo/src/main/java/it/plague/jeedemo/BookRestService.java b/jaxrsdemo/src/main/java/it/plague/jeedemo/BookRestService.java new file mode 100644 index 0000000..b90387f --- /dev/null +++ b/jaxrsdemo/src/main/java/it/plague/jeedemo/BookRestService.java @@ -0,0 +1,75 @@ +package it.plague.jeedemo; + +import java.net.URI; +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.ws.rs.BadRequestException; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.NotFoundException; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; + +@Path("/book") +@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) +@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) +@Stateless +public class BookRestService { + + @PersistenceContext(name = "jaxrsPU") + private EntityManager em; + + @Context + private UriInfo uriInfo; + + @GET + public Response getBooks() { + TypedQuery query = em.createNamedQuery(Book.FIND_ALL, Book.class); + Books books = new Books(query.getResultList()); + return Response.ok(books).build(); + } + + @GET + @Path("{id}") + public Response getBook(@PathParam("id") String id) { + Book book = em.find(Book.class, id); + if (book == null) { + throw new NotFoundException(); + } + return Response.ok(book) + .build(); + } + + @POST + public Response createBook(Book book) { + if (book == null) { + throw new BadRequestException(); + } + em.persist(book); + URI location = uriInfo.getAbsolutePathBuilder() + .path(book.getId()) + .build(); + return Response.created(location).build(); + } + + @DELETE + @Path("{id}") + public Response deleteBook(@PathParam("id") String id) { + Book book = em.find(Book.class, id); + if (book == null) { + throw new NotFoundException(); + } + em.remove(book); + return Response.noContent().build(); + } + +} diff --git a/jaxrsdemo/src/main/java/it/plague/jeedemo/Books.java b/jaxrsdemo/src/main/java/it/plague/jeedemo/Books.java new file mode 100644 index 0000000..e66add2 --- /dev/null +++ b/jaxrsdemo/src/main/java/it/plague/jeedemo/Books.java @@ -0,0 +1,29 @@ +package it.plague.jeedemo; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlSeeAlso; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@XmlRootElement +@XmlSeeAlso(Book.class) +public class Books extends ArrayList { + + public Books(Collection c) { + super(c); + } + + @XmlElement(name = "book") + public List getBooks() { + return this; + } + + public void setBooks(List books) { + this.addAll(books); + } + +} diff --git a/jaxrsdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java b/jaxrsdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java new file mode 100644 index 0000000..d19e387 --- /dev/null +++ b/jaxrsdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java @@ -0,0 +1,59 @@ +package it.plague.jeedemo; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.annotation.sql.DataSourceDefinition; +import javax.ejb.Singleton; +import javax.ejb.Startup; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + + +@Startup +@Singleton +@DataSourceDefinition( + className = "org.apache.derby.jdbc.EmbeddedDataSource", + name = "java:global/jdbc/jaxrsoPU", + user = "APP", + password = "APP", + databaseName = "testdb", + properties = {"connectionAttributes=;create=true"}) +public class DatabasePopulator { + + @PersistenceContext(name = "jaxrsPU") + private EntityManager em; + + private Book h2g2; + private Book lord; + + @PostConstruct + private void populateDB() { + h2g2 = Book.builder() + .title("Beginning Java EE 7") + .price(35f) + .description("Great book") + .isbn("1-8763-9125-7") + .nbOfPage(605) + .illustrations(true) + .build(); + lord = Book.builder() + .title("The Lord of the Rings") + .price(50.4f) + .description("SciFi") + .isbn("1-84023-742-2") + .nbOfPage(1216) + .illustrations(true) + .build(); + + em.persist(h2g2); + em.persist(lord); + } + + @PreDestroy + private void clearDB() { + em.remove(h2g2); + em.remove(lord); + } + +} diff --git a/jaxrsdemo/src/main/resources/META-INF/beans.xml b/jaxrsdemo/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..5c49eb7 --- /dev/null +++ b/jaxrsdemo/src/main/resources/META-INF/beans.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/jaxrsdemo/src/main/resources/META-INF/persistence.xml b/jaxrsdemo/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..6ef6907 --- /dev/null +++ b/jaxrsdemo/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,16 @@ + + + + + java:global/jdbc/jaxrsoPU + + + + + + + + \ No newline at end of file diff --git a/jaxwsdemo-client/jaxwsdemo-client.iml b/jaxwsdemo-client/jaxwsdemo-client.iml new file mode 100644 index 0000000..c49e5ea --- /dev/null +++ b/jaxwsdemo-client/jaxwsdemo-client.iml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 08e6d8f..8d69e26 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ xmlandjsondemo jmsdemo jaxwsdemo-service + jaxrsdemo