diff --git a/libraries/pom.xml b/libraries/pom.xml
index cf77d197a2..e9603b1453 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -105,6 +105,92 @@
+
+
+
+ maven-antrun-plugin
+ 1.8
+
+
+ generateMithra
+ generate-sources
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.goldmansachs.reladomo
+ reladomogen
+ ${reladomo.version}
+
+
+
+ com.goldmansachs.reladomo
+ reladomo-gen-util
+ ${reladomo.version}
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 3.0.0
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+ ${project.build.directory}/generated-sources/reladomo
+
+
+
+
+ add-resource
+ generate-resources
+
+ add-resource
+
+
+
+
+ ${project.build.directory}/generated-db/
+
+
+
+
+
+
+
+
@@ -497,6 +583,16 @@
gt-swing
${geotools.version}
+
+ com.goldmansachs.reladomo
+ reladomo
+ ${reladomo.version}
+
+
+ com.goldmansachs.reladomo
+ reladomo-test-util
+ ${reladomo.version}
+
@@ -563,6 +659,6 @@
0.6.5
0.9.0
15.2
+ 16.5.1
-
-
+
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/reladomo/Department.java b/libraries/src/main/java/com/baeldung/reladomo/Department.java
new file mode 100644
index 0000000000..d26ddafbf4
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/reladomo/Department.java
@@ -0,0 +1,15 @@
+package com.baeldung.reladomo;
+
+public class Department extends DepartmentAbstract {
+ public Department() {
+ super();
+ // You must not modify this constructor. Mithra calls this internally.
+ // You can call this constructor. You can also add new constructors.
+ }
+
+ public Department(long id, String name) {
+ super();
+ this.setId(id);
+ this.setName(name);
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/reladomo/DepartmentDatabaseObject.java b/libraries/src/main/java/com/baeldung/reladomo/DepartmentDatabaseObject.java
new file mode 100644
index 0000000000..4cfb5cb055
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/reladomo/DepartmentDatabaseObject.java
@@ -0,0 +1,4 @@
+package com.baeldung.reladomo;
+public class DepartmentDatabaseObject extends DepartmentDatabaseObjectAbstract
+{
+}
diff --git a/libraries/src/main/java/com/baeldung/reladomo/DepartmentList.java b/libraries/src/main/java/com/baeldung/reladomo/DepartmentList.java
new file mode 100644
index 0000000000..edad6bc1f4
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/reladomo/DepartmentList.java
@@ -0,0 +1,25 @@
+package com.baeldung.reladomo;
+import com.gs.fw.finder.Operation;
+import java.util.*;
+public class DepartmentList extends DepartmentListAbstract
+{
+ public DepartmentList()
+ {
+ super();
+ }
+
+ public DepartmentList(int initialSize)
+ {
+ super(initialSize);
+ }
+
+ public DepartmentList(Collection c)
+ {
+ super(c);
+ }
+
+ public DepartmentList(Operation operation)
+ {
+ super(operation);
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/reladomo/Employee.java b/libraries/src/main/java/com/baeldung/reladomo/Employee.java
new file mode 100644
index 0000000000..519e841282
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/reladomo/Employee.java
@@ -0,0 +1,16 @@
+package com.baeldung.reladomo;
+public class Employee extends EmployeeAbstract
+{
+ public Employee()
+ {
+ super();
+ // You must not modify this constructor. Mithra calls this internally.
+ // You can call this constructor. You can also add new constructors.
+ }
+
+ public Employee(long id, String name){
+ super();
+ this.setId(id);
+ this.setName(name);
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/reladomo/EmployeeDatabaseObject.java b/libraries/src/main/java/com/baeldung/reladomo/EmployeeDatabaseObject.java
new file mode 100644
index 0000000000..407049f342
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/reladomo/EmployeeDatabaseObject.java
@@ -0,0 +1,4 @@
+package com.baeldung.reladomo;
+public class EmployeeDatabaseObject extends EmployeeDatabaseObjectAbstract
+{
+}
diff --git a/libraries/src/main/java/com/baeldung/reladomo/EmployeeList.java b/libraries/src/main/java/com/baeldung/reladomo/EmployeeList.java
new file mode 100644
index 0000000000..4e759898c3
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/reladomo/EmployeeList.java
@@ -0,0 +1,25 @@
+package com.baeldung.reladomo;
+import com.gs.fw.finder.Operation;
+import java.util.*;
+public class EmployeeList extends EmployeeListAbstract
+{
+ public EmployeeList()
+ {
+ super();
+ }
+
+ public EmployeeList(int initialSize)
+ {
+ super(initialSize);
+ }
+
+ public EmployeeList(Collection c)
+ {
+ super(c);
+ }
+
+ public EmployeeList(Operation operation)
+ {
+ super(operation);
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/reladomo/ReladomoApplication.java b/libraries/src/main/java/com/baeldung/reladomo/ReladomoApplication.java
new file mode 100644
index 0000000000..c6b242d3ae
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/reladomo/ReladomoApplication.java
@@ -0,0 +1,54 @@
+package com.baeldung.reladomo;
+
+import java.io.InputStream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.gs.fw.common.mithra.MithraManager;
+import com.gs.fw.common.mithra.MithraManagerProvider;
+
+public class ReladomoApplication {
+
+ public static void main(String[] args) {
+
+ try {
+ ReladomoConnectionManager.getInstance().createTables();
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ }
+
+ MithraManager mithraManager = MithraManagerProvider.getMithraManager();
+ mithraManager.setTransactionTimeout(120);
+
+ try (InputStream is = ReladomoApplication.class.getClassLoader().getResourceAsStream("ReladomoRuntimeConfig.xml")) {
+ MithraManagerProvider.getMithraManager().readConfiguration(is);
+
+ Department department = new Department(1, "IT");
+ Employee employee = new Employee(1, "John");
+ department.getEmployees().add(employee);
+ department.cascadeInsert();
+
+ Department depFound = DepartmentFinder.findByPrimaryKey(1);
+ System.out.println("Department Name:" + department.getName());
+
+ Employee empFound = EmployeeFinder.findOne(EmployeeFinder.name().eq("John"));
+ System.out.println("Employee Id:" + empFound.getId());
+ empFound.setName("Steven");
+ empFound.delete();
+ Department depDetached = DepartmentFinder.findByPrimaryKey(1).getDetachedCopy();
+
+ mithraManager.executeTransactionalCommand(tx -> {
+ Department dep = new Department(2, "HR");
+ Employee emp = new Employee(2, "Jim");
+ dep.getEmployees().add(emp);
+ dep.cascadeInsert();
+ return null;
+ });
+
+ } catch (java.io.IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/libraries/src/main/java/com/baeldung/reladomo/ReladomoConnectionManager.java b/libraries/src/main/java/com/baeldung/reladomo/ReladomoConnectionManager.java
new file mode 100644
index 0000000000..66a8f9ff99
--- /dev/null
+++ b/libraries/src/main/java/com/baeldung/reladomo/ReladomoConnectionManager.java
@@ -0,0 +1,92 @@
+package com.baeldung.reladomo;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.TimeZone;
+import java.util.stream.Stream;
+
+import org.h2.tools.RunScript;
+
+import com.gs.fw.common.mithra.bulkloader.BulkLoader;
+import com.gs.fw.common.mithra.bulkloader.BulkLoaderException;
+import com.gs.fw.common.mithra.connectionmanager.SourcelessConnectionManager;
+import com.gs.fw.common.mithra.connectionmanager.XAConnectionManager;
+import com.gs.fw.common.mithra.databasetype.DatabaseType;
+import com.gs.fw.common.mithra.databasetype.H2DatabaseType;
+
+public class ReladomoConnectionManager implements SourcelessConnectionManager {
+
+ private static ReladomoConnectionManager instance;
+
+ private XAConnectionManager xaConnectionManager;
+
+ private final String databaseName = "myDb";
+
+ public static synchronized ReladomoConnectionManager getInstance() {
+ if (instance == null) {
+ instance = new ReladomoConnectionManager();
+ }
+ return instance;
+ }
+
+ private ReladomoConnectionManager() {
+ this.createConnectionManager();
+ }
+
+ private XAConnectionManager createConnectionManager() {
+ xaConnectionManager = new XAConnectionManager();
+ xaConnectionManager.setDriverClassName("org.h2.Driver");
+ xaConnectionManager.setJdbcConnectionString("jdbc:h2:mem:" + databaseName);
+ xaConnectionManager.setJdbcUser("sa");
+ xaConnectionManager.setJdbcPassword("");
+ xaConnectionManager.setPoolName("My Connection Pool");
+ xaConnectionManager.setInitialSize(1);
+ xaConnectionManager.setPoolSize(10);
+ xaConnectionManager.initialisePool();
+ return xaConnectionManager;
+ }
+
+ @Override
+ public BulkLoader createBulkLoader() throws BulkLoaderException {
+ return null;
+ }
+
+ @Override
+ public Connection getConnection() {
+ return xaConnectionManager.getConnection();
+ }
+
+ @Override
+ public DatabaseType getDatabaseType() {
+ return H2DatabaseType.getInstance();
+ }
+
+ @Override
+ public TimeZone getDatabaseTimeZone() {
+ return TimeZone.getDefault();
+ }
+
+ @Override
+ public String getDatabaseIdentifier() {
+ return databaseName;
+ }
+
+ public void createTables() throws Exception {
+ Path ddlPath = Paths.get(ClassLoader.getSystemResource("sql").toURI());
+
+ try (Connection conn = xaConnectionManager.getConnection(); Stream list = Files.list(ddlPath);) {
+ list.forEach(path -> {
+ try {
+ RunScript.execute(conn, Files.newBufferedReader(path));
+ } catch (SQLException | IOException exc) {
+ exc.printStackTrace();
+ }
+ });
+ }
+ }
+
+}
diff --git a/libraries/src/main/resources/ReladomoRuntimeConfig.xml b/libraries/src/main/resources/ReladomoRuntimeConfig.xml
new file mode 100644
index 0000000000..7181e75406
--- /dev/null
+++ b/libraries/src/main/resources/ReladomoRuntimeConfig.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/src/main/resources/reladomo/Department.xml b/libraries/src/main/resources/reladomo/Department.xml
new file mode 100644
index 0000000000..a284965cd6
--- /dev/null
+++ b/libraries/src/main/resources/reladomo/Department.xml
@@ -0,0 +1,11 @@
+
+ com.baeldung.reladomo
+ Department
+ departments
+
+
+
+
+ Employee.departmentId = this.id
+
+
\ No newline at end of file
diff --git a/libraries/src/main/resources/reladomo/Employee.xml b/libraries/src/main/resources/reladomo/Employee.xml
new file mode 100644
index 0000000000..00e360bc67
--- /dev/null
+++ b/libraries/src/main/resources/reladomo/Employee.xml
@@ -0,0 +1,9 @@
+
+ com.baeldung.reladomo
+ Employee
+ employees
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/src/main/resources/reladomo/ReladomoClassList.xml b/libraries/src/main/resources/reladomo/ReladomoClassList.xml
new file mode 100644
index 0000000000..99118a745d
--- /dev/null
+++ b/libraries/src/main/resources/reladomo/ReladomoClassList.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/libraries/src/test/java/com/baeldung/reladomo/ReladomoTest.java b/libraries/src/test/java/com/baeldung/reladomo/ReladomoTest.java
new file mode 100644
index 0000000000..61c29e8aa3
--- /dev/null
+++ b/libraries/src/test/java/com/baeldung/reladomo/ReladomoTest.java
@@ -0,0 +1,38 @@
+package com.baeldung.reladomo;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.gs.fw.common.mithra.test.ConnectionManagerForTests;
+import com.gs.fw.common.mithra.test.MithraTestResource;
+
+public class ReladomoTest {
+ private MithraTestResource mithraTestResource;
+
+ @Before
+ public void setUp() throws Exception {
+ this.mithraTestResource = new MithraTestResource("reladomo/ReladomoTestConfig.xml");
+
+ final ConnectionManagerForTests connectionManager = ConnectionManagerForTests.getInstanceForDbName("testDb");
+ this.mithraTestResource.createSingleDatabase(connectionManager);
+
+ mithraTestResource.addTestDataToDatabase("reladomo/test-data.txt", connectionManager);
+
+ this.mithraTestResource.setUp();
+ }
+
+ @Test
+ public void whenGetTestData_thenOk() {
+ Employee employee = EmployeeFinder.findByPrimaryKey(1);
+ assertEquals(employee.getName(), "Paul");
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ this.mithraTestResource.tearDown();
+ }
+
+}
diff --git a/libraries/src/test/resources/reladomo/ReladomoTestConfig.xml b/libraries/src/test/resources/reladomo/ReladomoTestConfig.xml
new file mode 100644
index 0000000000..a1951f09b7
--- /dev/null
+++ b/libraries/src/test/resources/reladomo/ReladomoTestConfig.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/src/test/resources/reladomo/test-data.txt b/libraries/src/test/resources/reladomo/test-data.txt
new file mode 100644
index 0000000000..8e407278ac
--- /dev/null
+++ b/libraries/src/test/resources/reladomo/test-data.txt
@@ -0,0 +1,7 @@
+class com.baeldung.reladomo.Department
+id, name
+1, "Marketing"
+
+class com.baeldung.reladomo.Employee
+id, name
+1, "Paul"
\ No newline at end of file