Skip to content
Snippets Groups Projects
Commit 685a9fc3 authored by Emmanuel Bruno's avatar Emmanuel Bruno
Browse files

Merge branch 'feature/minor-updates' into develop

parents f96fe0b7 0c36f232
Branches
No related tags found
No related merge requests found
Showing
with 138 additions and 93 deletions
# 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
......
package fr.univtln.bruno.samples.jee91.dao;
import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
public class DAO2 {
private EntityManager entityManager;
@Inject
public DAO2(@H2Database EntityManager entityManager) {
this.entityManager = entityManager;
}
}
......@@ -7,7 +7,7 @@ import jakarta.persistence.PersistenceUnit;
import java.util.Map;
public class DAO1 {
public class MainDAO {
@PersistenceUnit(unitName="myappPU")
EntityManagerFactory entityManagerFactory;
......
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;
}
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();
}
}
package fr.univtln.bruno.samples.jee91.dao;
package fr.univtln.bruno.samples.jee91.dao.entitymanagersproducers;
import jakarta.enterprise.inject.Produces;
import jakarta.persistence.EntityManager;
......
package fr.univtln.bruno.samples.jee91.dao;
package fr.univtln.bruno.samples.jee91.dao.entitymanagersproducers;
import jakarta.inject.Qualifier;
......
package fr.univtln.bruno.samples.jee91.dao;
package fr.univtln.bruno.samples.jee91.dao.entitymanagersproducers;
import jakarta.inject.Qualifier;
......
......@@ -15,23 +15,14 @@ services:
depends_on:
- db
db:
image: oscarfonts/h2:1.4.199
image: brunoe/h2:develop
ports:
- "1521:1521"
- "8081:81"
- "8082:8082"
- "9092:9092"
environment:
H2_OPTIONS: '-ifNotExists'
H2_OPTIONS: '-ifNotExists -webAllowOthers -tcpAllowOthers -pgAllowOthers -ifNotExists'
volumes:
- h2data:/opt/h2-data
# db:
# image: brunoe/h2
# ports:
# - "8081:8082"
# - "1521:8092"
# environment:
# H2_OPTIONS: '-ifNotExists -webAllowOthers -tcpAllowOthers -pgAllowOthers -ifNotExists'
# volumes:
# - h2data:/h2-data
- h2data:/h2-data
volumes:
h2data:
\ No newline at end of file
......@@ -8,7 +8,7 @@ RUN --mount=type=cache,id=mvncache,target=/root/.m2/repository,rw \
mvn -B clean package
### Then we add the builded war to a JEE server.
FROM payara/server-full:5.2021.9-jdk11
FROM payara/server-full:5.2021.9-jdk11 as server
ARG STORE_PASSWORD=changeit
## Download the JDBC driver
USER root
......@@ -29,7 +29,7 @@ COPY --from=build /app/utils/src/main/resources/mycert-pub.p12 /app/utils/src/m
RUN keytool -importkeystore -noprompt -destkeystore /opt/payara/appserver/glassfish/domains/domain1/config/keystore.jks -srckeystore /tmp/mycert.p12 -srcstoretype PKCS12 -alias mycert -srcstorepass storepass -deststorepass ${STORE_PASSWORD} -deststoretype pkcs12 && \
keytool -importcert -noprompt -trustcacerts -destkeystore /opt/payara/appserver/glassfish/domains/domain1/config/cacerts.jks -file /tmp/mycert.crt -alias mycert -srcstorepass storepass -deststorepass ${STORE_PASSWORD} -deststoretype pkcs12
# COPY target/*.war $DEPLOY_DIR
FROM server as production
COPY --from=build /app/restApp/target/*.war \
$DEPLOY_DIR
COPY --from=build /app/wsApp/target/*.war \
......
set-hazelcast-configuration --enabled=true --dynamic=true
add-library /tmp/h2.jar
# create-jdbc-connection-pool --datasourceclassname org.h2.jdbcx.JdbcDataSource --restype javax.sql.ConnectionPoolDataSource --property password=password:user=user:url="jdbc:h2:tcp://db:1521/payara;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;DEFAULT_NULL_ORDERING=HIGH" H2-pool
create-jdbc-connection-pool --datasourceclassname org.h2.jdbcx.JdbcDataSource --restype javax.sql.ConnectionPoolDataSource --property password=password:user=user:url="jdbc:h2:tcp://db:1521/payara" H2-pool
create-jdbc-connection-pool --datasourceclassname org.h2.jdbcx.JdbcDataSource --restype javax.sql.ConnectionPoolDataSource --property password=password:user=user:url="jdbc:h2:tcp://db:9092/payara;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE" H2-pool
create-jdbc-resource --connectionpoolid H2-pool jdbc/h2-pool
# set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.cert-nickname=mycert
......@@ -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
package fr.univtln.bruno.samples.jee91.dao;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
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"),
@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();
}
......@@ -8,7 +8,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>rest</artifactId>
<artifactId>restApp</artifactId>
<packaging>war</packaging>
<dependencies>
......
package fr.univtln.bruno.samples.jee91.rs;
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 fr.univtln.bruno.samples.jee91.dao.DAO1;
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
......@@ -22,7 +27,10 @@ public class SampleResource {
Hello hello;
@Inject
DAO1 dao1;
MainDAO mainDAO;
@Inject
PersonDAO personDAO;
@Inject
@ConfigProperty(name = "message")
......@@ -40,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("persons")
public List<Person> personsFindAll() {
return personDAO.findAll();
}
@GET
@Path("dao2")
@Produces(MediaType.APPLICATION_JSON)
public Map<String, Object> dao2() {
return dao1.getMetadata();
@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);
}
}
......@@ -7,12 +7,12 @@
<class>fr.univtln.bruno.samples.jee91.dao.Person</class>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
<property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create" />
<property name="javax.persistence.schema-generation.scripts.create-target" value="sampleCreate.ddl" />
<property name="javax.persistence.schema-generation.scripts.drop-target" value="sampleDrop.ddl" />
<property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create" />
<property name="jakarta.persistence.schema-generation.scripts.action" value="drop-and-create" />
<property name="jakarta.persistence.schema-generation.scripts.create-target" value="sampleCreate.ddl" />
<property name="jakarta.persistence.schema-generation.scripts.drop-target" value="sampleDrop.ddl" />
<!--property name="javax.persistence.sql-load-script-source" value="insert.sql" /-->
<property name="jakarta.persistence.sql-load-script-source" value="insert.sql" />
</properties>
</persistence-unit>
</persistence>
\ 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
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 {
......
<?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
......@@ -3,9 +3,6 @@ package fr.univtln.bruno.samples.jee91.wsclient;
import jakarta.websocket.*;
import lombok.extern.slf4j.Slf4j;
import org.glassfish.grizzly.ssl.SSLContextConfigurator;
import org.glassfish.grizzly.ssl.SSLEngineConfigurator;
import org.glassfish.tyrus.client.ClientManager;
import org.glassfish.tyrus.client.ClientProperties;
import java.net.URI;
import java.net.URISyntaxException;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment