diff --git a/README.md b/README.md index 7f6dc37b97abce24279b100c2e80cb521d735ab9..78b616796ccbb5347f0337738561be22dab59a23 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,21 @@ # Project fr.univtln.bruno.samples/jee9.1 -Steps to run this project: +## Steps to run this project 1. COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose up --build -d 2. Visit - 1. curl http://localhost:8080/jee9.1/resources/sample - 2. curl http://localhost:8080/jee9.1/resources/sample/hello - 3. curl http://localhost:8080/jee9.1/resources/sample/dao1 - 4. curl http://localhost:8080/jee9.1/resources/sample/dao2 + 1. curl http://localhost:8080/restApp-1.0-SNAPSHOT/resources/sample + 2. curl http://localhost:8080/restApp-1.0-SNAPSHOT/resources/sample/hello + 3. curl http://localhost:8080/restApp-1.0-SNAPSHOT/resources/sample/main + 4. curl http://localhost:8080/restApp-1.0-SNAPSHOT/resources/sample/persons + 5. curl -H "Content-Type: application/json" \ + -X POST \ + -d '{"name":"Jeanne"}' \ + http://localhost:8080/restApp-1.0-SNAPSHOT/resources/sample/persons + 6. curl http://localhost:8080/restApp-1.0-SNAPSHOT/resources/sample/persons/843c8236-6c6b-450e-9aa3-211a9b897403 + 7. curl -H "Accept: text/xml" http://localhost:8080/restApp-1.0-SNAPSHOT/resources/sample/persons +## Import "real" certificate -openssl x509 -outform der -in localhost.pem -out localhost.der -keytool -import -noprompt -trustcacerts -storepass storepass -alias localhost -keystore mycert-pub.jks -file localhost.der + openssl x509 -outform der -in localhost.pem -out localhost.der + keytool -import -noprompt -trustcacerts -storepass storepass -alias localhost -keystore mycert-pub.jks -file localhost.der diff --git a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/DAO2.java b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/DAO2.java deleted file mode 100644 index dd55a1af9d68fcb4675d92759aaf9c41e27556a2..0000000000000000000000000000000000000000 --- a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/DAO2.java +++ /dev/null @@ -1,20 +0,0 @@ -package fr.univtln.bruno.samples.jee91.dao; - -import jakarta.inject.Inject; -import jakarta.persistence.EntityManager; - -import java.util.List; - -public class DAO2 { - private EntityManager entityManager; - - @Inject - public DAO2(@H2Database EntityManager entityManager) { - this.entityManager = entityManager; - } - - public List<Person> findAll() { - return entityManager.createNamedQuery("Person.findAll").getResultList(); - } - -} diff --git a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/DAO1.java b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/MainDAO.java similarity index 95% rename from dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/DAO1.java rename to dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/MainDAO.java index 9b605d5d973012d0b8dbe33eaa60c0c68d327b88..20d2e232c30d20d0a4691050a05f01abe1a70f97 100644 --- a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/DAO1.java +++ b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/MainDAO.java @@ -7,7 +7,7 @@ import jakarta.persistence.PersistenceUnit; import java.util.Map; -public class DAO1 { +public class MainDAO { @PersistenceUnit(unitName="myappPU") EntityManagerFactory entityManagerFactory; diff --git a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/Person.java b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/Person.java deleted file mode 100644 index 33a2438bc411f3c777b8bdc3fb9fd5b03a944481..0000000000000000000000000000000000000000 --- a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/Person.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.univtln.bruno.samples.jee91.dao; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -@Entity -public class Person { - @Id - @GeneratedValue - long id; - - private String name; -} diff --git a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/PersonDAO.java b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/PersonDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..f05f5a5ca1b4c59901d899a33eae690ed9409b71 --- /dev/null +++ b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/PersonDAO.java @@ -0,0 +1,31 @@ +package fr.univtln.bruno.samples.jee91.dao; + +import fr.univtln.bruno.samples.jee91.dao.entitymanagersproducers.H2Database; +import jakarta.inject.Inject; +import jakarta.persistence.EntityManager; + +import java.util.List; +import java.util.UUID; + +public class PersonDAO { + private EntityManager entityManager; + + @Inject + public PersonDAO(@H2Database EntityManager entityManager) { + this.entityManager = entityManager; + } + + public List<Person> findAll() { + return entityManager.createNamedQuery("Person.findAll").getResultList(); + } + + public UUID persist(Person person) { + entityManager.persist(person); + return person.getUuid(); + } + + public Person findByUUID(UUID uuid) { + return entityManager.createNamedQuery("Person.findByUUID", Person.class).setParameter("uuid",uuid).getSingleResult(); + } + +} diff --git a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/EntityManagerProducer.java b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/EntityManagerProducer.java similarity index 81% rename from dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/EntityManagerProducer.java rename to dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/EntityManagerProducer.java index e4cc76e73be4692dc0c542430b4a19cb406f7d53..d6645febbaa6d733363ac59c5c71ccf63776c63d 100644 --- a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/EntityManagerProducer.java +++ b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/EntityManagerProducer.java @@ -1,4 +1,4 @@ -package fr.univtln.bruno.samples.jee91.dao; +package fr.univtln.bruno.samples.jee91.dao.entitymanagersproducers; import jakarta.enterprise.inject.Produces; import jakarta.persistence.EntityManager; diff --git a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/H2Database.java b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/H2Database.java similarity index 84% rename from dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/H2Database.java rename to dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/H2Database.java index baef67cb4320cc3854f476ee6e38a9e25afe0c34..698f6074b6299f470f5aa2c612fb61d992f6de09 100644 --- a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/H2Database.java +++ b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/H2Database.java @@ -1,4 +1,4 @@ -package fr.univtln.bruno.samples.jee91.dao; +package fr.univtln.bruno.samples.jee91.dao.entitymanagersproducers; import jakarta.inject.Qualifier; diff --git a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/PostgreSQLDatabase.java b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/PostgreSQLDatabase.java similarity index 84% rename from dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/PostgreSQLDatabase.java rename to dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/PostgreSQLDatabase.java index 81776b59babfa1e7ec00e69ee143e30e337bea51..ce389e38d13aee67b5ccc8e10d2f09b31e0cb062 100644 --- a/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/PostgreSQLDatabase.java +++ b/dao/src/main/java/fr/univtln/bruno/samples/jee91/dao/entitymanagersproducers/PostgreSQLDatabase.java @@ -1,4 +1,4 @@ -package fr.univtln.bruno.samples.jee91.dao; +package fr.univtln.bruno.samples.jee91.dao.entitymanagersproducers; import jakarta.inject.Qualifier; diff --git a/entites/pom.xml b/entites/pom.xml index 897e951ef087dc09b1506d3c2bfaf01ea60c3d61..f21f6b1e11046acc206068def224850aa9319697 100644 --- a/entites/pom.xml +++ b/entites/pom.xml @@ -15,6 +15,10 @@ <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> </dependency> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/entites/src/main/java/fr/univtln/bruno/samples/jee91/dao/Person.java b/entites/src/main/java/fr/univtln/bruno/samples/jee91/dao/Person.java index c7cf3068e8db97e0b33a94d32ea0781cc0342126..2b85888364a51ab6761879e6b7e83f556a2fdd58 100644 --- a/entites/src/main/java/fr/univtln/bruno/samples/jee91/dao/Person.java +++ b/entites/src/main/java/fr/univtln/bruno/samples/jee91/dao/Person.java @@ -1,21 +1,41 @@ package fr.univtln.bruno.samples.jee91.dao; +import jakarta.json.bind.annotation.JsonbTransient; import jakarta.persistence.*; import jakarta.xml.bind.annotation.XmlRootElement; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.FieldDefaults; +import java.util.UUID; + +@Table(name = "PERSON") @Entity +@Getter +@Setter @NamedQueries({ @NamedQuery(name = "Person.findAll", query = "select p from Person p"), @NamedQuery( name = "Person.findAllOrderedByName", - query = "SELECT p FROM Person p ORDER BY p.name") + query = "SELECT p FROM Person p ORDER BY p.name"), + @NamedQuery( + name = "Person.findByUUID", + query = "SELECT p FROM Person p WHERE p.uuid=:uuid") }) @XmlRootElement +@FieldDefaults(level = AccessLevel.PRIVATE) public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + @JsonbTransient long id; - private String name; + @Column(name = "NAME") + String name; + + @Column(name = "UUID", updatable = false, nullable = false, unique = true) + UUID uuid = UUID.randomUUID(); } diff --git a/restApp/src/main/java/fr/univtln/bruno/samples/jee91/rs/SampleResource.java b/restApp/src/main/java/fr/univtln/bruno/samples/jee91/rs/SampleResource.java index 08647b5a52707b2bfa7e0905d6e050bd5461d771..d0feb963ef9d65a0055969cff4203d3647940060 100644 --- a/restApp/src/main/java/fr/univtln/bruno/samples/jee91/rs/SampleResource.java +++ b/restApp/src/main/java/fr/univtln/bruno/samples/jee91/rs/SampleResource.java @@ -1,23 +1,25 @@ package fr.univtln.bruno.samples.jee91.rs; -import fr.univtln.bruno.samples.jee91.dao.DAO1; -import fr.univtln.bruno.samples.jee91.dao.DAO2; +import fr.univtln.bruno.samples.jee91.dao.MainDAO; import fr.univtln.bruno.samples.jee91.dao.Person; +import fr.univtln.bruno.samples.jee91.dao.PersonDAO; import fr.univtln.bruno.samples.jee91.ejb.Hello; import fr.univtln.bruno.samples.jee91.ejb.qualifiers.SpokenLanguage; import jakarta.inject.Inject; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; +import jakarta.transaction.Transactional; +import jakarta.ws.rs.*; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.eclipse.microprofile.config.inject.ConfigProperty; import java.util.List; import java.util.Map; +import java.util.UUID; @Path("sample") +//@Stateless +@Produces({MediaType.APPLICATION_JSON,MediaType.TEXT_XML}) public class SampleResource { @Inject @@ -25,10 +27,10 @@ public class SampleResource { Hello hello; @Inject - DAO1 dao1; + MainDAO mainDAO; @Inject - DAO2 dao2; + PersonDAO personDAO; @Inject @ConfigProperty(name = "message") @@ -46,16 +48,29 @@ public class SampleResource { } @GET - @Path("dao1") - @Produces(MediaType.APPLICATION_JSON) - public Map<String, Object> dao1() { - return dao1.getMetadata(); + @Path("main") + public Map<String, Object> mainGetMetadata() { + return mainDAO.getMetadata(); } @GET - @Path("dao2") - @Produces(MediaType.APPLICATION_JSON) - public List<Person> dao2() { - return dao2.findAll(); + @Path("persons") + public List<Person> personsFindAll() { + return personDAO.findAll(); } + + @GET + @Path("persons/{uuid}") + public Person personsFind(@PathParam("uuid") UUID uuid) { + return personDAO.findByUUID(uuid); + } + + @Transactional + @POST + @Path("persons") + @Consumes(MediaType.APPLICATION_JSON) + public UUID personsPersist(Person person) { + return personDAO.persist(person); + } + } diff --git a/restApp/src/main/resources/insert.sql b/restApp/src/main/resources/insert.sql index 4f6d3cd5fa7b13227900babb897df9d5672f3bf3..e74e7ffef4c148ef8820cf85f012ce24599f7e1f 100644 --- a/restApp/src/main/resources/insert.sql +++ b/restApp/src/main/resources/insert.sql @@ -1,4 +1,4 @@ -INSERT INTO "public"."person" ("name") VALUES ('pierre'); -INSERT INTO "public"."person" ("name") VALUES ('Marie'); -INSERT INTO "public"."person" ("name") VALUES ('jacques'); -INSERT INTO "public"."person" ("name") VALUES ('Annie'); \ No newline at end of file +INSERT INTO "public"."person" ("name", "uuid") VALUES ('Yves', 'ACED00057372000E6A6176612E7574696C2E55554944BC9903F7986D852F0200024A000C6C65617374536967426974734A000B6D6F7374536967426974737870B25A000916801FE374FCFAC5DCF94C11'); +INSERT INTO "public"."person" ("name", "uuid") VALUES ('Pierre', 'ACED00057372000E6A6176612E7574696C2E55554944BC9903F7986D852F0200024A000C6C65617374536967426974734A000B6D6F7374536967426974737870B8F28F7D3945291756DAC7325DF44938'); +INSERT INTO "public"."person" ("name", "uuid") VALUES ('Marie', 'ACED00057372000E6A6176612E7574696C2E55554944BC9903F7986D852F0200024A000C6C65617374536967426974734A000B6D6F73745369674269747378709AA3211A9B897403843C82366C6B450E'); +INSERT INTO "public"."person" ("name", "uuid") VALUES ('Jeanne', 'ACED00057372000E6A6176612E7574696C2E55554944BC9903F7986D852F0200024A000C6C65617374536967426974734A000B6D6F7374536967426974737870BC1580AEB48C0F0C0B3C82E884AA4C3C'); \ No newline at end of file diff --git a/wsApp/src/main/java/fr/univtln/bruno/samples/jee91/ws/WSServer.java b/wsApp/src/main/java/fr/univtln/bruno/samples/jee91/ws/WSServer.java index ae8b211faf2d3e32e0fc03e2ff3fcf5b02c4a79a..eacbdf6085d1d708af0a5e9b48bcf2aca643c092 100644 --- a/wsApp/src/main/java/fr/univtln/bruno/samples/jee91/ws/WSServer.java +++ b/wsApp/src/main/java/fr/univtln/bruno/samples/jee91/ws/WSServer.java @@ -1,6 +1,6 @@ package fr.univtln.bruno.samples.jee91.ws; -import fr.univtln.bruno.samples.jee91.dao.DAO1; +import fr.univtln.bruno.samples.jee91.dao.MainDAO; import fr.univtln.bruno.samples.jee91.ejb.Hello; import fr.univtln.bruno.samples.jee91.ejb.qualifiers.SpokenLanguage; import jakarta.enterprise.context.ApplicationScoped; @@ -25,7 +25,7 @@ public class WSServer { Hello hello; @Inject - DAO1 dao1; + MainDAO dao1; @OnOpen public void onOpen(Session session) throws EncodeException, IOException { diff --git a/wsApp/src/main/webapp/WEB-INF/beans.xml b/wsApp/src/main/webapp/WEB-INF/beans.xml deleted file mode 100644 index f8e254275530a1d3ce18bae65334cd014bf184c4..0000000000000000000000000000000000000000 --- a/wsApp/src/main/webapp/WEB-INF/beans.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?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" - bean-discovery-mode="all"> -</beans> \ No newline at end of file