Skip to content

Commit

Permalink
feat: MongoDB with Panache quickstart
Browse files Browse the repository at this point in the history
  • Loading branch information
loicmathieu committed Sep 25, 2019
1 parent bf71ce7 commit f19652b
Show file tree
Hide file tree
Showing 11 changed files with 465 additions and 0 deletions.
4 changes: 4 additions & 0 deletions mongodb-panache/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
*
!target/*-runner
!target/*-runner.jar
!target/lib/*
35 changes: 35 additions & 0 deletions mongodb-panache/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Eclipse
.project
.classpath
.settings/
bin/

# IntelliJ
.idea
*.ipr
*.iml
*.iws

# NetBeans
nb-configuration.xml

# Visual Studio Code
.vscode

# OSX
.DS_Store

# Vim
*.swp
*.swo

# patch
*.orig
*.rej

# Maven
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
release.properties
118 changes: 118 additions & 0 deletions mongodb-panache/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.acme</groupId>
<artifactId>mongodb-panache</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<surefire-plugin.version>2.22.0</surefire-plugin.version>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<quarkus.version>999-SNAPSHOT</quarkus.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-bom</artifactId>
<version>${quarkus.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-mongodb-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.version}</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<configuration>
<systemProperties>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>native</id>
<activation>
<property>
<name>native</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.version}</version>
<executions>
<execution>
<goals>
<goal>native-image</goal>
</goals>
<configuration>
<enableHttpUrlHandler>true</enableHttpUrlHandler>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<systemProperties>
<native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
</systemProperties>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
22 changes: 22 additions & 0 deletions mongodb-panache/src/main/docker/Dockerfile.jvm
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
####
# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
#
# Before building the docker image run:
#
# mvn package
#
# Then, build the image with:
#
# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/mongodb-panache-jvm .
#
# Then run the container using:
#
# docker run -i --rm -p 8080:8080 quarkus/mongodb-panache-jvm
#
###
FROM fabric8/java-alpine-openjdk8-jre
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV AB_ENABLED=jmx_exporter
COPY target/lib/* /deployments/lib/
COPY target/*-runner.jar /deployments/app.jar
ENTRYPOINT [ "/deployments/run-java.sh" ]
22 changes: 22 additions & 0 deletions mongodb-panache/src/main/docker/Dockerfile.native
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
####
# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode
#
# Before building the docker image run:
#
# mvn package -Pnative -Dnative-image.docker-build=true
#
# Then, build the image with:
#
# docker build -f src/main/docker/Dockerfile.native -t quarkus/mongodb-panache .
#
# Then run the container using:
#
# docker run -i --rm -p 8080:8080 quarkus/mongodb-panache
#
###
FROM registry.access.redhat.com/ubi8/ubi-minimal
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
42 changes: 42 additions & 0 deletions mongodb-panache/src/main/java/org/acme/mongodb/panache/Person.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package org.acme.mongodb.panache;

import io.quarkus.mongodb.panache.MongoEntity;
import io.quarkus.mongodb.panache.PanacheMongoEntity;
import org.bson.codecs.pojo.annotations.BsonProperty;

import java.time.LocalDate;
import java.util.List;

@MongoEntity(collection="ThePerson")
public class Person extends PanacheMongoEntity {
public String name;

// will be persisted as a 'birth' field in MongoDB
@BsonProperty("birth")
public LocalDate birthDate;

public Status status;

// return name as uppercase in the model
public String getName(){
return name.toUpperCase();
}

// store all names in lowercase in the DB
public void setName(String name){
this.name = name.toLowerCase();
}

// entity methods
public static Person findByName(String name){
return find("name", name).firstResult();
}

public static List<Person> findAlive(){
return list("status", Status.LIVING);
}

public static void deleteLoics(){
delete("name", "Loïc");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.acme.mongodb.panache;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import java.util.List;

@Path("/persons")
@Consumes("application/json")
@Produces("application/json")
public class PersonResource {
@GET
public List<Person> list(){
return Person.listAll();
}

@GET
@Path("/{id}")
public Person get(String id){
return Person.findById(id);
}

@POST
public Response create(Person person){
person.persist();
return Response.status(201).build();
}

@PUT
@Path("/{id}")
public void update(@PathParam("id") String id, Person person){
person.update();
}

@DELETE
@Path("/{id}")
public void delete(String id){
Person person = Person.findById(id);
person.delete();
}

@GET
@Path("/search/{name}")
public Person search(String name){
return Person.findByName(name);
}

@GET
@Path("/count")
public Long count(){
return Person.count();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.acme.mongodb.panache;

public enum Status {
LIVING,
DECEASED
}
Loading

0 comments on commit f19652b

Please sign in to comment.