From 0b7da064b8169375d34662bca6dd3e541d10bbcd Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Tue, 30 Jun 2015 11:23:32 +0200
Subject: [PATCH] Exercise skeleton

---
 P/Sda1/Jpa/rdbms2catalog/skeleton/.gitignore  |  5 ++
 .../rdbms2catalog/skeleton/Schema/catalog.xsd | 27 ++++++++
 .../skeleton/Schema/products.xml              | 17 +++++
 .../rdbms2catalog/skeleton/Schema/schema.sql  | 28 ++++++++
 P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml     | 65 +++++++++++++++++++
 .../mi/sda1/sql2catalog/Rdbms2Xml.java        | 36 ++++++++++
 .../mi/sda1/sql2catalog/RdbmsAccess.java      | 32 +++++++++
 .../sda1/sql2catalog/model/Description.java   | 15 +++++
 .../mi/sda1/sql2catalog/model/Product.java    | 11 ++++
 .../main/resources/META-INF/persistence.xml   | 57 ++++++++++++++++
 .../skeleton/src/main/resources/log4j2.xml    | 21 ++++++
 .../test/java/rdbms2catalog/TestSchema.java   | 47 ++++++++++++++
 P/Sda1/Jpa/rdbms2catalog/solution/pom.xml     |  2 +-
 .../mi/sda1/sql2catalog/Helper.java           | 18 -----
 .../mi/sda1/sql2catalog/Messages.java         | 22 -------
 .../mi/sda1/sql2catalog/messages.properties   | 11 ----
 P/pom.xml                                     |  3 +-
 17 files changed, 364 insertions(+), 53 deletions(-)
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/.gitignore
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/catalog.xsd
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/products.xml
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/schema.sql
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Product.java
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/META-INF/persistence.xml
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/log4j2.xml
 create mode 100644 P/Sda1/Jpa/rdbms2catalog/skeleton/src/test/java/rdbms2catalog/TestSchema.java
 delete mode 100644 P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
 delete mode 100644 P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Messages.java
 delete mode 100644 P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/messages.properties

diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/.gitignore b/P/Sda1/Jpa/rdbms2catalog/skeleton/.gitignore
new file mode 100644
index 000000000..660be2a5f
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/.gitignore
@@ -0,0 +1,5 @@
+.project
+.classpath
+/.settings/
+/target/
+A1.log
\ No newline at end of file
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/catalog.xsd b/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/catalog.xsd
new file mode 100644
index 000000000..9df8b8626
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/catalog.xsd
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+ 
+    <xs:element name="catalog">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="product" minOccurs="0" maxOccurs="unbounded"/>
+            </xs:sequence>
+        </xs:complexType>
+        <xs:key name="uniqueProductId">
+            <xs:selector xpath="product"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+    </xs:element>
+    
+    <xs:element name="product">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="name" type="xs:string"/>
+                <xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+                <xs:element name="age" type="xs:int" minOccurs="0" maxOccurs="1"/>
+            </xs:sequence>
+            <xs:attribute name="id" type="xs:int" use="required"/>
+        </xs:complexType>
+    </xs:element>
+ 
+</xs:schema>
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/products.xml b/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/products.xml
new file mode 100644
index 000000000..15000ab5d
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/products.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="Schema/catalog.xsd">
+   <product id="17">
+       <name>Monkey Picked Tea</name>
+       <description>Rare wild Chinese tea</description>
+       <description>Picked only by specially trained monkeys</description>
+   </product>
+    <product id="42">
+        <name>4-Person Instant Tent</name>
+        <description>4-person, 1-room tent</description>
+        <description>Pre-attached tent poles</description>
+        <description>Exclusive WeatherTec system.</description>
+        <age>15</age>
+    </product>
+</catalog>
\ No newline at end of file
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/schema.sql b/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/schema.sql
new file mode 100644
index 000000000..be699fb39
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/Schema/schema.sql
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS Description;
+DROP TABLE IF EXISTS Product;
+
+CREATE TABLE Product (
+   id INTEGER NOT NULL PRIMARY KEY
+  ,name VARCHAR(255) NOT NULL
+  ,age SMALLINT
+) ENGINE=InnoDB;
+
+CREATE TABLE Description (
+   product INTEGER NOT NULL
+  ,orderIndex int NOT NULL   -- preserving the order of descriptions belonging to a given product
+  ,text VARCHAR(255) NOT NULL
+  ,UNIQUE(product, orderIndex)
+  ,FOREIGN KEY(product) REFERENCES Product(id)
+) ENGINE=InnoDB;
+
+-- example data corresponding to products.xml --
+
+-- Product lacking age property --
+INSERT INTO Product (id, name) VALUES (1, 'Monkey Picked Tea');
+INSERT INTO Description VALUES(1, 0, 'Picked only by specially trained monkeys');
+INSERT INTO Description VALUES(1, 1, 'Rare wild Chinese tea');
+
+INSERT INTO Product VALUES (2, '4-Person Instant Tent', 15);
+INSERT INTO Description VALUES(2, 0, 'Exclusive WeatherTec system.');
+INSERT INTO Description VALUES(2, 1, '4-person, 1-compartment tent');
+INSERT INTO Description VALUES(2, 2, 'Pre-attached tent poles');
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml b/P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml
new file mode 100644
index 000000000..70c0563ec
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/pom.xml
@@ -0,0 +1,65 @@
+<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>
+
+  <parent>
+    <groupId>de.hdm-stuttgart.mi</groupId>
+    <artifactId>lecturenotes-pom</artifactId>
+    <version>1.0</version>
+
+    <relativePath>../../../../pom.xml</relativePath>
+  </parent>
+
+  <groupId>de.hdm-stuttgart.mi.sda1</groupId>
+  <artifactId>rdbms2catalog</artifactId>
+  <version>2.0</version>
+  <packaging>jar</packaging>
+
+  <name>rdbms2catalogJpa</name>
+  <url>http://www.mi.hdm-stuttgart.de/freedocs</url>
+
+  <dependencies>
+	<dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-entitymanager</artifactId>
+      <version>5.0.0.CR1</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.hibernate</groupId>
+      <artifactId>hibernate-c3p0</artifactId>
+      <version>5.0.0.CR1</version>
+    </dependency>
+	
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <version>2.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <version>2.1</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jdom</groupId>
+      <artifactId>jdom2</artifactId>
+      <version>2.0.5</version>
+    </dependency>
+
+    <dependency>
+      <groupId>mysql</groupId>
+      <artifactId>mysql-connector-java</artifactId>
+      <version>5.1.34</version>
+    </dependency>
+
+  </dependencies>
+
+</project>
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
new file mode 100644
index 000000000..fc40375eb
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
@@ -0,0 +1,36 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+import java.io.IOException;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jdom2.Element;
+import org.jdom2.output.Format;
+import org.jdom2.output.XMLOutputter;
+import org.xml.sax.SAXException;
+
+/**
+ * Dumping RDBMS catalog data
+ * to XML.
+ * 
+ */
+public class Rdbms2Xml {
+
+   /**
+    * @param args
+    *           Unused
+    * @throws SAXException
+    * @throws ParserConfigurationException
+    * @throws IOException
+    */
+   public static void main(String[] args) throws ParserConfigurationException,
+         SAXException, IOException {
+
+      final Element catalogElement = new Element("catalog");
+      new RdbmsAccess().appendProducts(catalogElement);
+      
+      // Write XML content to standard output
+      XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
+      outputter.output(catalogElement, System.out);
+   }
+}
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
new file mode 100644
index 000000000..6e97a39e2
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
@@ -0,0 +1,32 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+
+import org.jdom2.Element;
+
+/**
+ * Reading product data
+ *
+ */
+public class RdbmsAccess {
+
+	static final EntityManager em;
+
+	static {
+		final EntityManagerFactory emFactory =  Persistence.createEntityManagerFactory("none");
+		em = emFactory.createEntityManager();
+	}
+
+	public void appendProducts(final Element root) {
+		final EntityTransaction transaction = em.getTransaction();
+        transaction.begin();
+
+		// TODO: read RDBMS for products and related descriptions, then create DOM tree
+        
+		transaction.commit();
+	}
+
+}
\ No newline at end of file
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java
new file mode 100644
index 000000000..4f3187ef4
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Description.java
@@ -0,0 +1,15 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Description {
+
+	@Id
+	@GeneratedValue
+	Long id;
+	
+	
+}
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Product.java b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Product.java
new file mode 100644
index 000000000..890c2b4b1
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/model/Product.java
@@ -0,0 +1,11 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog.model;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class Product {
+
+	@Id
+	int id;
+}
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/META-INF/persistence.xml b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 000000000..6431ae651
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,57 @@
+<persistence 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"
+	version="2.1">
+
+	<persistence-unit name="create-drop" transaction-type="RESOURCE_LOCAL">
+		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+		
+		<properties>
+			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/hdm" />
+			<property name="javax.persistence.jdbc.user" value="hdmuser" />
+			<property name="javax.persistence.jdbc.password" value="XYZ" />
+			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
+			
+			<property name="hibernate.show_sql" value="true" />
+			<property name="hibernate.format_sql" value="true" />
+			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
+			<property name="hibernate.hbm2ddl.auto" value="create-drop" />
+			
+			<!-- Configuring Connection Pool -->
+			
+			<property name="hibernate.c3p0.min_size" value="5" />
+			<property name="hibernate.c3p0.max_size" value="20" />
+			<property name="hibernate.c3p0.timeout" value="500" />
+			<property name="hibernate.c3p0.max_statements" value="50" />
+			<property name="hibernate.c3p0.idle_test_period" value="2000" />
+			
+		</properties>
+	</persistence-unit>
+	
+	<persistence-unit name="none" transaction-type="RESOURCE_LOCAL">
+		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+		
+		<properties>
+			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/hdm" />
+			<property name="javax.persistence.jdbc.user" value="hdmuser" />
+			<property name="javax.persistence.jdbc.password" value="XYZ" />
+			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
+			
+			<property name="hibernate.show_sql" value="true" />
+			<property name="hibernate.format_sql" value="true" />
+			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
+			<property name="hibernate.hbm2ddl.auto" value="none" />
+			
+			<!-- Configuring Connection Pool -->
+			
+			<property name="hibernate.c3p0.min_size" value="5" />
+			<property name="hibernate.c3p0.max_size" value="20" />
+			<property name="hibernate.c3p0.timeout" value="500" />
+			<property name="hibernate.c3p0.max_statements" value="50" />
+			<property name="hibernate.c3p0.idle_test_period" value="2000" />
+			
+		</properties>
+	</persistence-unit>
+	
+</persistence>
\ No newline at end of file
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/log4j2.xml b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..eda4f3b0d
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/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="%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.catalog2sax.App" level="debug">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="debug">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/P/Sda1/Jpa/rdbms2catalog/skeleton/src/test/java/rdbms2catalog/TestSchema.java b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/test/java/rdbms2catalog/TestSchema.java
new file mode 100644
index 000000000..661e8439e
--- /dev/null
+++ b/P/Sda1/Jpa/rdbms2catalog/skeleton/src/test/java/rdbms2catalog/TestSchema.java
@@ -0,0 +1,47 @@
+package rdbms2catalog;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+
+import org.junit.Test;
+
+import de.hdm_stuttgart.mi.sda1.sql2catalog.model.Description;
+import de.hdm_stuttgart.mi.sda1.sql2catalog.model.Product;
+
+public class TestSchema {
+	
+    static final EntityManager em;
+
+    static {
+	    final EntityManagerFactory emFactory =  Persistence.createEntityManagerFactory("create-drop");
+	    em = emFactory.createEntityManager();
+	}
+
+	@Test
+	public void insertData() {
+		{
+	          final EntityTransaction transaction = em.getTransaction();
+	          transaction.begin();
+	          
+	          //TODO: Once your your Entities de.hdm_stuttgart.mi.sda1.sql2catalog.model.Product and 
+	          // de.hdm_stuttgart.mi.sda1.sql2catalog.model.Description are being defined
+	          // accordingly the following commented code should work.
+	          
+//	          final Product monkeyPickedTea = new Product(1, "Monkey Picked Tea", null);
+//	          new Description(monkeyPickedTea, 0, "Picked only by specially trained monkeys");
+//	          new Description(monkeyPickedTea, 1, "Rare wild Chinese tea");
+//	          
+//	          final Product instantTent = new Product(2, "4-Person Instant Tent", 15);
+//	          new Description(instantTent, 0, "Exclusive WeatherTec system.");
+//	          new Description(instantTent, 1, "4-person, 1-compartment tent");
+//	          new Description(instantTent, 2, "Pre-attached tent poles");
+//	          
+//	          em.persist(monkeyPickedTea);
+//	          em.persist(instantTent);
+	          
+	          transaction.commit();
+	    }
+	}
+}
\ No newline at end of file
diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/pom.xml b/P/Sda1/Jpa/rdbms2catalog/solution/pom.xml
index a1ce55b3d..70c0563ec 100644
--- a/P/Sda1/Jpa/rdbms2catalog/solution/pom.xml
+++ b/P/Sda1/Jpa/rdbms2catalog/solution/pom.xml
@@ -7,7 +7,7 @@
     <artifactId>lecturenotes-pom</artifactId>
     <version>1.0</version>
 
-    <relativePath>../../pom.xml</relativePath>
+    <relativePath>../../../../pom.xml</relativePath>
   </parent>
 
   <groupId>de.hdm-stuttgart.mi.sda1</groupId>
diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
deleted file mode 100644
index f78795876..000000000
--- a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package de.hdm_stuttgart.mi.sda1.sql2catalog;
-
-/**
- * Project wide helper methods
- *
- */
-public class Helper {
-   /**
-    * Write message to stderr and exit with given error code
-    * @param errMsg
-    * @param errorCode
-    */
-   public static void exitWithErrorMessage(final String errMsg, int errorCode) {
-      System.err.println(errMsg);
-      System.exit(errorCode);
-   }
-
-}
diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Messages.java b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Messages.java
deleted file mode 100644
index 781829729..000000000
--- a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Messages.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package de.hdm_stuttgart.mi.sda1.sql2catalog;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class Messages {
-   private static final String BUNDLE_NAME = "de.hdm_stuttgart.mi.sda1.sql2catalog.messages"; //$NON-NLS-1$
-
-   private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
-         .getBundle(BUNDLE_NAME);
-
-   private Messages() {
-   }
-
-   public static String getString(String key) {
-      try {
-         return RESOURCE_BUNDLE.getString(key);
-      } catch (MissingResourceException e) {
-         return '!' + key + '!';
-      }
-   }
-}
diff --git a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/messages.properties b/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/messages.properties
deleted file mode 100644
index a183dcc38..000000000
--- a/P/Sda1/Jpa/rdbms2catalog/solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/messages.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-Xml2Rdbms.14='
-Xml2Rdbms.errMsgUnableCloseRdbms=Unable to close RDBMS access
-Xml2Rdbms.errMsgUnableInitDataInsert=Unable to initialize data inserter
-Xml2Rdbms.errMsgUnableRegisterDriverClass=Unable to register driver class '
-Xml2Rdbms.errMsgUnableToConnect=Unable to connect as user '
-Xml2Rdbms.jdbcDriverName=com.mysql.jdbc.Driver
-Xml2Rdbms.jdbcPasswd=XYZ
-Xml2Rdbms.jdbcUrl=jdbc:mysql://localhost:3306/hdm
-Xml2Rdbms.jdbcUser=hdmuser
-Xml2Rdbms.xmlSourceFileName=products.xml
-Xml2Rdbms.errMsgUnableCommitTransaction=Unable to commit transaction
\ No newline at end of file
diff --git a/P/pom.xml b/P/pom.xml
index 51432b9f0..7bbd52428 100644
--- a/P/pom.xml
+++ b/P/pom.xml
@@ -111,7 +111,8 @@
     <module>Sda1/NoCast</module>
 
     <module>Sda1/rdbms2catalog</module>
-    <module>Sda1/rdbms2catalogJpa</module>
+    <module>Sda1/Jpa/rdbms2catalog/skeleton</module>
+    <module>Sda1/Jpa/rdbms2catalog/solution</module>
     <module>Sda1/VerifyImgAccess</module>
     <module>Sda1/xmlstatistics</module>
 
-- 
GitLab