From 2cb8b3bec5a6bd407811b75873e4bd6526df5c72 Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Sun, 25 Dec 2016 12:25:24 +0100 Subject: [PATCH] MongoDB + JPA Exercise --- Doc/Common/glossary.xml | 30 +++++++ Doc/Sda1/jpaintro.xml | 2 +- Doc/Sda1/mongodb.xml | 49 ----------- Doc/lectures.xml | 1 + P/Sda1/Jpa/OgmUniversity/.gitignore | 5 ++ P/Sda1/Jpa/OgmUniversity/pom.xml | 83 +++++++++++++++++++ .../mi/sda1/hiberjpa/PersistDriver.java | 34 ++++++++ .../mi/sda1/hiberjpa/model/Lecture.java | 47 +++++++++++ .../main/resources/META-INF/persistence.xml | 38 +++++++++ .../src/main/resources/log4j2.xml | 21 +++++ .../mi/sda1/hiberjpa/AppTest.java | 17 ++++ 11 files changed, 277 insertions(+), 50 deletions(-) delete mode 100644 Doc/Sda1/mongodb.xml create mode 100644 P/Sda1/Jpa/OgmUniversity/.gitignore create mode 100644 P/Sda1/Jpa/OgmUniversity/pom.xml create mode 100644 P/Sda1/Jpa/OgmUniversity/src/main/java/de/hdm_stuttgart/mi/sda1/hiberjpa/PersistDriver.java create mode 100644 P/Sda1/Jpa/OgmUniversity/src/main/java/de/hdm_stuttgart/mi/sda1/hiberjpa/model/Lecture.java create mode 100644 P/Sda1/Jpa/OgmUniversity/src/main/resources/META-INF/persistence.xml create mode 100644 P/Sda1/Jpa/OgmUniversity/src/main/resources/log4j2.xml create mode 100644 P/Sda1/Jpa/OgmUniversity/src/test/java/de/hdm_stuttgart/mi/sda1/hiberjpa/AppTest.java diff --git a/Doc/Common/glossary.xml b/Doc/Common/glossary.xml index 6b945b6fb..fb3e2c014 100644 --- a/Doc/Common/glossary.xml +++ b/Doc/Common/glossary.xml @@ -45,6 +45,18 @@ </glossdef> </glossentry> + <glossentry xml:id="glo_CRUD"> + <glossterm>CRUD</glossterm> + + <glossdef> + <para><link + xlink:href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete"><emphasis + role="bold">C</emphasis>reate, <emphasis role="bold">R</emphasis>ead, + <emphasis role="bold">U</emphasis>pdate and <emphasis + role="bold">D</emphasis>elete operations</link> </para> + </glossdef> + </glossentry> + <glossentry xml:id="glo_CSS"> <glossterm><acronym>CSS</acronym></glossterm> @@ -440,6 +452,24 @@ </glossdef> </glossentry> + <glossentry xml:id="glo_MongoDB"> + <glossterm>MongoDB</glossterm> + + <glossdef> + <glosslist> + <glossentry xml:id="glo_Mongo_Shell"> + <glossterm>Mongo Shell</glossterm> + + <glossdef> + <para>Database <link + xlink:href="https://docs.mongodb.com/getting-started/shell/client">command + line client</link></para> + </glossdef> + </glossentry> + </glosslist> + </glossdef> + </glossentry> + <glossentry xml:id="glo_ORM"> <glossterm><acronym>ORM</acronym></glossterm> diff --git a/Doc/Sda1/jpaintro.xml b/Doc/Sda1/jpaintro.xml index 3cb00f153..847090246 100644 --- a/Doc/Sda1/jpaintro.xml +++ b/Doc/Sda1/jpaintro.xml @@ -9,7 +9,7 @@ xmlns:db="http://docbook.org/ns/docbook"> <title>Getting started with <xref linkend="glo_JPA"/></title> - <section xml:id="sda1JpaLecture"> + <section xml:id="sda1SectJpaLecture"> <title>Persisting lecture instances</title> <qandaset defaultlabel="qanda" xml:id="sda1QandaLectureAddBusinessKey"> diff --git a/Doc/Sda1/mongodb.xml b/Doc/Sda1/mongodb.xml deleted file mode 100644 index 06e8f90f3..000000000 --- a/Doc/Sda1/mongodb.xml +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<chapter version="5.0" xml:id="sda1ChapMongoDB" - xmlns="http://docbook.org/ns/docbook" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:xi="http://www.w3.org/2001/XInclude" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns:m="http://www.w3.org/1998/Math/MathML" - xmlns:html="http://www.w3.org/1999/xhtml" - xmlns:db="http://docbook.org/ns/docbook"> - <title><productname>MongoDB</productname></title> - - <section xml:id="sd1SectMongodbPrerequisite"> - <title>Prerequisites</title> - - <para><xref linkend="glo_Ubuntu"/> installation instructions are on offer - from <uri - xlink:href="https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/#run-mongodb-community-edition">https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu</uri>.</para> - - <para>Follow <uri - xlink:href="https://docs.mongodb.com/getting-started/shell/introduction">https://docs.mongodb.com/getting-started/shell/introduction</uri> - populating your database with sample data. Insert, retrieve, update and - delete sample data like e.g.:</para> - - <programlisting language="json">db.courses.insert( - { - "lecture" : { - "title" : "Introduction to JSON", - "required" : "10075", - "prerequisites" : "XXX" - }, - "studyCourse" : "MIB", - "programme" : "Bachelor", - "recommendedSemesters" : [ - { - "semester" : [3], - "comment" : "before doing practical stuff" - }, - { - "semester" : [5,6,7], - "comment" : "After doing practical stuff" - } - ], - "lecture_id" : 113213 - } -)</programlisting> - </section> - - <xi:include href="../Common/glossary.xml" xpointer="element(/1)"/> -</chapter> diff --git a/Doc/lectures.xml b/Doc/lectures.xml index a5d1735fd..1385f21f6 100644 --- a/Doc/lectures.xml +++ b/Doc/lectures.xml @@ -173,6 +173,7 @@ <xi:include href="Sda1/jdbc.xml" xpointer="element(/1)"/> <xi:include href="Sda1/jpaintro.xml" xpointer="element(/1)"/> + <xi:include href="Sda1/mongodb.xml" xpointer="element(/1)"/> <appendix> <title>Appendix</title> diff --git a/P/Sda1/Jpa/OgmUniversity/.gitignore b/P/Sda1/Jpa/OgmUniversity/.gitignore new file mode 100644 index 000000000..791f189b0 --- /dev/null +++ b/P/Sda1/Jpa/OgmUniversity/.gitignore @@ -0,0 +1,5 @@ +/target/ +/.settings/ +.classpath +.project +/A1.log diff --git a/P/Sda1/Jpa/OgmUniversity/pom.xml b/P/Sda1/Jpa/OgmUniversity/pom.xml new file mode 100644 index 000000000..c2ca2eac0 --- /dev/null +++ b/P/Sda1/Jpa/OgmUniversity/pom.xml @@ -0,0 +1,83 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>de.hdm-stuttgart.mi.sda1</groupId> + <artifactId>ogm-university</artifactId> + <version>0.1</version> + <packaging>jar</packaging> + + <name>Ogm-university</name> + + <url>http://www.mi.hdm-stuttgart.de/freedocs</url> + + <dependencies> + + <dependency> + <groupId>org.hibernate.ogm</groupId> + <artifactId>hibernate-ogm-mongodb</artifactId> + <version>5.1.0.Beta1</version> + </dependency> + + <dependency> + <groupId>org.hibernate.javax.persistence</groupId> + <artifactId>hibernate-jpa-2.1-api</artifactId> + <version>1.0.0.Final</version> + </dependency> + + <dependency> + <groupId>org.jboss.spec.javax.transaction</groupId> + <artifactId>jboss-transaction-api_1.2_spec</artifactId> + <version>1.0.1.Final</version> + </dependency> + + <!-- Add the Narayana Transactions Manager an implementation would be provided + in a Java EE container, but this works nicely in Java SE as well --> + <dependency> + <groupId>org.jboss.narayana.jta</groupId> + <artifactId>narayana-jta</artifactId> + <version>5.5.0.Final</version> + </dependency> + <dependency> + <groupId>org.jboss</groupId> + <artifactId>jboss-transaction-spi</artifactId> + <version>7.5.0.Final</version> + </dependency> + + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>6.0.5</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.12</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>2.6</version> + </dependency> + + </dependencies> + + <build> + <plugins> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.5.1</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> + + </plugins> + </build> +</project> diff --git a/P/Sda1/Jpa/OgmUniversity/src/main/java/de/hdm_stuttgart/mi/sda1/hiberjpa/PersistDriver.java b/P/Sda1/Jpa/OgmUniversity/src/main/java/de/hdm_stuttgart/mi/sda1/hiberjpa/PersistDriver.java new file mode 100644 index 000000000..fd1a35846 --- /dev/null +++ b/P/Sda1/Jpa/OgmUniversity/src/main/java/de/hdm_stuttgart/mi/sda1/hiberjpa/PersistDriver.java @@ -0,0 +1,34 @@ +package de.hdm_stuttgart.mi.sda1.hiberjpa; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +import de.hdm_stuttgart.mi.sda1.hiberjpa.model.Lecture; + +/** + * A simple OGM example + * + */ +public class PersistDriver { + + /** + * @param args Unused + */ + public static void main(String[] args) { + final EntityManagerFactory emFactory = Persistence + .createEntityManagerFactory("ogm-mongodb"); + + final EntityManager em = emFactory.createEntityManager(); + + em.getTransaction().begin(); + { + em.persist(new Lecture("Structure data and applications 1")); + } + em.getTransaction().commit(); + + em.close(); + + emFactory.close(); + } +} diff --git a/P/Sda1/Jpa/OgmUniversity/src/main/java/de/hdm_stuttgart/mi/sda1/hiberjpa/model/Lecture.java b/P/Sda1/Jpa/OgmUniversity/src/main/java/de/hdm_stuttgart/mi/sda1/hiberjpa/model/Lecture.java new file mode 100644 index 000000000..21e1a2686 --- /dev/null +++ b/P/Sda1/Jpa/OgmUniversity/src/main/java/de/hdm_stuttgart/mi/sda1/hiberjpa/model/Lecture.java @@ -0,0 +1,47 @@ +package de.hdm_stuttgart.mi.sda1.hiberjpa.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.TableGenerator; + +/** + * A simple example entity + * + */ +@Entity +public class Lecture { + + @Id + @GeneratedValue (strategy = GenerationType.TABLE, generator = "lecture") + + @TableGenerator( + name = "lecture", + table = "sequences", + pkColumnName = "key", + pkColumnValue = "lecture", + valueColumnName = "seed" + ) + private Integer id; + + String name; + + protected Lecture (){} + + public Lecture (final String name){ + setName(name); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getId() { + return id; + } +} diff --git a/P/Sda1/Jpa/OgmUniversity/src/main/resources/META-INF/persistence.xml b/P/Sda1/Jpa/OgmUniversity/src/main/resources/META-INF/persistence.xml new file mode 100644 index 000000000..10c234805 --- /dev/null +++ b/P/Sda1/Jpa/OgmUniversity/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,38 @@ +<persistence + version="2.1" + xmlns="http://xmlns.jcp.org/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence + http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> + + <persistence-unit name="ogm-mongodb" transaction-type="RESOURCE_LOCAL"> <!-- transaction-type="JTA" --> + <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> + <exclude-unlisted-classes>false</exclude-unlisted-classes> + <properties> + <property name="hibernate.ogm.datastore.provider" value="mongodb" /> + <property name="hibernate.ogm.datastore.database" value="catalog" /> + <property name="hibernate.ogm.datastore.create_database" value="true" /> + </properties> + </persistence-unit> +</persistence> + + <!-- + <persistence-unit name="jpa-recreate"> + + <exclude-unlisted-classes>false</exclude-unlisted-classes> + + <properties> + <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> + <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm?useSSL=false"/> + <property name="javax.persistence.jdbc.user" value="hdmuser"/> + <property name="javax.persistence.jdbc.password" value="XYZ"/> + <property + name="javax.persistence.schema-generation.database.action" + value="drop-and-create"/> + <property name="hibernate.format_sql" value="true"/> + <property name="hibernate.use_sql_comments" value="true"/> + <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> + <property name="hibernate.archive.autodetection" value="class"/> + </properties> + </persistence-unit> + --> diff --git a/P/Sda1/Jpa/OgmUniversity/src/main/resources/log4j2.xml b/P/Sda1/Jpa/OgmUniversity/src/main/resources/log4j2.xml new file mode 100644 index 000000000..a387d6f7c --- /dev/null +++ b/P/Sda1/Jpa/OgmUniversity/src/main/resources/log4j2.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Configuration> + <Appenders> + <File name="A1" fileName="A1.log" append="false"> + <PatternLayout pattern="%t %-5p %c{2} - %m%n"/> + </File> + <Console name="STDOUT" target="SYSTEM_OUT"> + <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> + </Console> + </Appenders> + <Loggers> + + <!-- You my want to define class or package level per-logger rules --> + <Logger name="de.hdm_stuttgart.mi.sda1.hiberjpa.App" level="debug"> + <AppenderRef ref="A1"/> + </Logger> + <Root level="info"> + <AppenderRef ref="STDOUT"/> + </Root> + </Loggers> +</Configuration> \ No newline at end of file diff --git a/P/Sda1/Jpa/OgmUniversity/src/test/java/de/hdm_stuttgart/mi/sda1/hiberjpa/AppTest.java b/P/Sda1/Jpa/OgmUniversity/src/test/java/de/hdm_stuttgart/mi/sda1/hiberjpa/AppTest.java new file mode 100644 index 000000000..1eac334a0 --- /dev/null +++ b/P/Sda1/Jpa/OgmUniversity/src/test/java/de/hdm_stuttgart/mi/sda1/hiberjpa/AppTest.java @@ -0,0 +1,17 @@ +package de.hdm_stuttgart.mi.sda1.hiberjpa; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest { + /** + * Dummy test method + */ + @Test + public void testApp() { + Assert.assertTrue( true ); + } +} -- GitLab