diff --git a/cust-services/pom.xml b/cust-services/pom.xml
index 7b7d422..357f99a 100644
--- a/cust-services/pom.xml
+++ b/cust-services/pom.xml
@@ -17,7 +17,7 @@
framework
1.0-SNAPSHOT
-
+
org.apache.geronimo.specs
geronimo-jpa_2.0_spec
1.1
@@ -48,7 +48,6 @@
- cust-webapp
maven-war-plugin
@@ -56,6 +55,46 @@
true
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+ **/XmlRpcServlet.properties
+
+
+
+
+ make-a-jar
+ compile
+
+ jar
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.7
+
+
+ attach-artifacts
+ package
+
+ attach-artifact
+
+
+
+
+ ${project.basedir}/target/cust-webapp-1.0-SNAPSHOT.jar
+ jar
+
+
+
+
+
+
org.apache.openejb.maven
tomee-maven-plugin
diff --git a/database-services/.gitignore b/database-services/.gitignore
new file mode 100644
index 0000000..e774414
--- /dev/null
+++ b/database-services/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+# Package Files #
+*.jar
+*.war
+*.ear
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+/target
+/.settings
+/.classpath
+/.project
diff --git a/database-services/pom.xml b/database-services/pom.xml
new file mode 100644
index 0000000..e6604d7
--- /dev/null
+++ b/database-services/pom.xml
@@ -0,0 +1,81 @@
+
+ 4.0.0
+
+ de.hsadmin
+ hsadmin-parent
+ 1.0-SNAPSHOT
+
+
+ database-webapp
+ war
+ HSAdmin XML-RPC Database Webapp
+
+
+ de.hsadmin
+ framework
+ 1.0-SNAPSHOT
+
+
+ de.hsadmin
+ cust-webapp
+ 1.0-SNAPSHOT
+
+
+ org.apache.geronimo.specs
+ geronimo-jpa_2.0_spec
+ 1.1
+ provided
+
+
+ org.apache.geronimo.specs
+ geronimo-ejb_3.0_spec
+ 1.0.1
+ provided
+
+
+ org.apache.geronimo.specs
+ geronimo-validation_1.0_spec
+ 1.1
+ provided
+
+
+ org.apache.xmlrpc
+ xmlrpc-server
+ 3.1.3
+
+
+ javax.servlet
+ servlet-api
+
+
+
+
+
+ database-webapp
+
+
+ maven-war-plugin
+
+ true
+
+
+
+ org.apache.openejb.maven
+ tomee-maven-plugin
+ 1.7.4
+
+ 1.7.4
+ webprofile
+ false
+ 8000
+ ${project.basedir}/src/test/tomee/conf
+
+ org.postgresql:postgresql:9.4.1212.jre7
+
+
+
+
+
+
diff --git a/cust-services/src/main/java/de/hsadmin/bo/database/Database.java b/database-services/src/main/java/de/hsadmin/bo/database/Database.java
similarity index 100%
rename from cust-services/src/main/java/de/hsadmin/bo/database/Database.java
rename to database-services/src/main/java/de/hsadmin/bo/database/Database.java
diff --git a/cust-services/src/main/java/de/hsadmin/bo/database/DatabaseUser.java b/database-services/src/main/java/de/hsadmin/bo/database/DatabaseUser.java
similarity index 100%
rename from cust-services/src/main/java/de/hsadmin/bo/database/DatabaseUser.java
rename to database-services/src/main/java/de/hsadmin/bo/database/DatabaseUser.java
diff --git a/cust-services/src/main/java/de/hsadmin/bo/database/MySqlDatabase.java b/database-services/src/main/java/de/hsadmin/bo/database/MySqlDatabase.java
similarity index 100%
rename from cust-services/src/main/java/de/hsadmin/bo/database/MySqlDatabase.java
rename to database-services/src/main/java/de/hsadmin/bo/database/MySqlDatabase.java
diff --git a/cust-services/src/main/java/de/hsadmin/bo/database/MySqlUser.java b/database-services/src/main/java/de/hsadmin/bo/database/MySqlUser.java
similarity index 100%
rename from cust-services/src/main/java/de/hsadmin/bo/database/MySqlUser.java
rename to database-services/src/main/java/de/hsadmin/bo/database/MySqlUser.java
diff --git a/cust-services/src/main/java/de/hsadmin/bo/database/PgSqlDatabase.java b/database-services/src/main/java/de/hsadmin/bo/database/PgSqlDatabase.java
similarity index 100%
rename from cust-services/src/main/java/de/hsadmin/bo/database/PgSqlDatabase.java
rename to database-services/src/main/java/de/hsadmin/bo/database/PgSqlDatabase.java
diff --git a/cust-services/src/main/java/de/hsadmin/bo/database/PgSqlUser.java b/database-services/src/main/java/de/hsadmin/bo/database/PgSqlUser.java
similarity index 100%
rename from cust-services/src/main/java/de/hsadmin/bo/database/PgSqlUser.java
rename to database-services/src/main/java/de/hsadmin/bo/database/PgSqlUser.java
diff --git a/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseRemote.java b/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseRemote.java
new file mode 100644
index 0000000..9d44a04
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseRemote.java
@@ -0,0 +1,14 @@
+package de.hsadmin.service.database;
+
+import de.hsadmin.xmlrpc.AbstractRemote;
+import de.hsadmin.xmlrpc.Remote;
+
+
+public class MySqlDatabaseRemote extends AbstractRemote implements Remote {
+
+ @Override
+ protected String getModuleLookup() {
+ return "MySqlDatabaseServiceLocal";
+ }
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseServiceLocal.java b/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseServiceLocal.java
new file mode 100644
index 0000000..5c05d9e
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseServiceLocal.java
@@ -0,0 +1,10 @@
+package de.hsadmin.service.database;
+
+import javax.ejb.Local;
+
+import de.hsadmin.module.Module;
+
+@Local
+public interface MySqlDatabaseServiceLocal extends Module{
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseVO.java b/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseVO.java
new file mode 100644
index 0000000..948a983
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/MySqlDatabaseVO.java
@@ -0,0 +1,13 @@
+package de.hsadmin.service.database;
+
+import de.hsadmin.common.error.TechnicalException;
+import de.hsadmin.module.ValueObject;
+import de.hsadmin.module.impl.AbstractVO;
+
+public class MySqlDatabaseVO extends AbstractVO implements ValueObject {
+
+ public MySqlDatabaseVO() throws TechnicalException {
+ super();
+ }
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/MySqlUserRemote.java b/database-services/src/main/java/de/hsadmin/service/database/MySqlUserRemote.java
new file mode 100644
index 0000000..133c0e1
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/MySqlUserRemote.java
@@ -0,0 +1,14 @@
+package de.hsadmin.service.database;
+
+import de.hsadmin.xmlrpc.AbstractRemote;
+import de.hsadmin.xmlrpc.Remote;
+
+
+public class MySqlUserRemote extends AbstractRemote implements Remote {
+
+ @Override
+ protected String getModuleLookup() {
+ return "MySqlUserServiceLocal";
+ }
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/MySqlUserService.java b/database-services/src/main/java/de/hsadmin/service/database/MySqlUserService.java
new file mode 100644
index 0000000..ebc76cd
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/MySqlUserService.java
@@ -0,0 +1,21 @@
+package de.hsadmin.service.database;
+
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import de.hsadmin.common.error.TechnicalException;
+import de.hsadmin.module.impl.AbstractModule;
+
+@Stateless
+public class MySqlUserService extends AbstractModule implements MySqlUserServiceLocal {
+
+ @PersistenceContext(name="hsar")
+ private EntityManager entityManager;
+
+ @Override
+ public MySqlUserVO buildVO() throws TechnicalException {
+ return new MySqlUserVO();
+ }
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/MySqlUserServiceLocal.java b/database-services/src/main/java/de/hsadmin/service/database/MySqlUserServiceLocal.java
new file mode 100644
index 0000000..d6cf2fa
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/MySqlUserServiceLocal.java
@@ -0,0 +1,10 @@
+package de.hsadmin.service.database;
+
+import javax.ejb.Local;
+
+import de.hsadmin.module.Module;
+
+@Local
+public interface MySqlUserServiceLocal extends Module{
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/MySqlUserVO.java b/database-services/src/main/java/de/hsadmin/service/database/MySqlUserVO.java
new file mode 100644
index 0000000..3087d87
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/MySqlUserVO.java
@@ -0,0 +1,13 @@
+package de.hsadmin.service.database;
+
+import de.hsadmin.common.error.TechnicalException;
+import de.hsadmin.module.ValueObject;
+import de.hsadmin.module.impl.AbstractVO;
+
+public class MySqlUserVO extends AbstractVO implements ValueObject {
+
+ public MySqlUserVO() throws TechnicalException {
+ super();
+ }
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseRemote.java b/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseRemote.java
new file mode 100644
index 0000000..0963211
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseRemote.java
@@ -0,0 +1,14 @@
+package de.hsadmin.service.database;
+
+import de.hsadmin.xmlrpc.AbstractRemote;
+import de.hsadmin.xmlrpc.Remote;
+
+
+public class PgSqlDatabaseRemote extends AbstractRemote implements Remote {
+
+ @Override
+ protected String getModuleLookup() {
+ return "PgSqlDatabaseServiceLocal";
+ }
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseServiceLocal.java b/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseServiceLocal.java
new file mode 100644
index 0000000..7c38376
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseServiceLocal.java
@@ -0,0 +1,10 @@
+package de.hsadmin.service.database;
+
+import javax.ejb.Local;
+
+import de.hsadmin.module.Module;
+
+@Local
+public interface PgSqlDatabaseServiceLocal extends Module{
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseVO.java b/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseVO.java
new file mode 100644
index 0000000..df776cc
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/PgSqlDatabaseVO.java
@@ -0,0 +1,13 @@
+package de.hsadmin.service.database;
+
+import de.hsadmin.common.error.TechnicalException;
+import de.hsadmin.module.ValueObject;
+import de.hsadmin.module.impl.AbstractVO;
+
+public class PgSqlDatabaseVO extends AbstractVO implements ValueObject {
+
+ public PgSqlDatabaseVO() throws TechnicalException {
+ super();
+ }
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserRemote.java b/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserRemote.java
new file mode 100644
index 0000000..5b0e61e
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserRemote.java
@@ -0,0 +1,14 @@
+package de.hsadmin.service.database;
+
+import de.hsadmin.xmlrpc.AbstractRemote;
+import de.hsadmin.xmlrpc.Remote;
+
+
+public class PgSqlUserRemote extends AbstractRemote implements Remote {
+
+ @Override
+ protected String getModuleLookup() {
+ return "PgSqlUserServiceLocal";
+ }
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserServiceLocal.java b/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserServiceLocal.java
new file mode 100644
index 0000000..0663296
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserServiceLocal.java
@@ -0,0 +1,10 @@
+package de.hsadmin.service.database;
+
+import javax.ejb.Local;
+
+import de.hsadmin.module.Module;
+
+@Local
+public interface PgSqlUserServiceLocal extends Module{
+
+}
diff --git a/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserVO.java b/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserVO.java
new file mode 100644
index 0000000..501f5c0
--- /dev/null
+++ b/database-services/src/main/java/de/hsadmin/service/database/PgSqlUserVO.java
@@ -0,0 +1,13 @@
+package de.hsadmin.service.database;
+
+import de.hsadmin.common.error.TechnicalException;
+import de.hsadmin.module.ValueObject;
+import de.hsadmin.module.impl.AbstractVO;
+
+public class PgSqlUserVO extends AbstractVO implements ValueObject {
+
+ public PgSqlUserVO() throws TechnicalException {
+ super();
+ }
+
+}
diff --git a/database-services/src/main/resources/org/apache/xmlrpc/webserver/XmlRpcServlet.properties b/database-services/src/main/resources/org/apache/xmlrpc/webserver/XmlRpcServlet.properties
new file mode 100644
index 0000000..d044fd4
--- /dev/null
+++ b/database-services/src/main/resources/org/apache/xmlrpc/webserver/XmlRpcServlet.properties
@@ -0,0 +1,4 @@
+mysqluser=de.hsadmin.service.database.MySqlUserRemote
+mysqldb=de.hsadmin.service.database.MySqlDatabaseRemote
+pgsqluser=de.hsadmin.service.database.PgSqlUserRemote
+pgsqldb=de.hsadmin.service.database.PgSqlDatabaseRemote
\ No newline at end of file
diff --git a/database-services/src/main/webapp/WEB-INF/web.xml b/database-services/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..e681660
--- /dev/null
+++ b/database-services/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ XmlRpcServlet
+ de.hsadmin.xmlrpc.HSXmlRpcServlet
+
+ enabledForExtensions
+ true
+
+
+
+
+ XmlRpcServlet
+ /xmlrpc/*
+
+
+
+
diff --git a/database-services/src/test/tomee/conf/hsadmin.properties b/database-services/src/test/tomee/conf/hsadmin.properties
new file mode 100644
index 0000000..5941ad2
--- /dev/null
+++ b/database-services/src/test/tomee/conf/hsadmin.properties
@@ -0,0 +1,6 @@
+ticketvalidator.class=de.hsadmin.login.TestTicketValidator
+cas.validate.url=https://login.hostsharing.net:443/cas/proxyValidate
+cas.service.url=https://config.hostsharing.net:443/hsar/backend
+accountprefix.hostmaster=hsh01
+accountprefix.customer=hsh00
+domainpostfix.pacdomain=hostsharing.net
\ No newline at end of file
diff --git a/framework/README.md b/framework/README.md
new file mode 100644
index 0000000..1e1a120
--- /dev/null
+++ b/framework/README.md
@@ -0,0 +1,40 @@
+Entwicklung eines HSAdmin Modul
+===============================
+
+Für die Klasse werden folgende Klassen/Interfaces angelegt:
+
+Das Namens-Präfix "Entity" wird durch den spezifischen Modulnamen ersetzt.
+
+Value-Objekt *EntityVO*
+-----------------------
+
+class **EntityVO** extends _AbstractVO_ implements _ValueObject_
+
+Beschreibt das Mapping der Attribute zum persistenten Objekt und
+Eigenschaften des Feldes in der GUI bzw. im Skript-Client.
+
+XML-RPC Schnittstelle *EntityRemote*
+------------------------------------
+
+class **EntityRemote** extends _AbstractRemote_ implements _Remote_
+
+Das Interface _Remote_ gibt die Methoden search, add, update und delete
+der HSAdmin-API vor.
+
+Die abstrakte Implementierung aus _AbstractRemote_ muss in der Regel nur um eine
+Implementierung der Methode _getModuleLookup()_ erweitert werden. _getModuleLookup()_
+liefert den Namen des EJB-Local-Interface der Session-Bean (s.u.).
+
+EJB Schnittstelle *EntityServiceLocal*
+--------------------------------------
+
+interface **EntityServiceLocal** extends _Module_
+
+Entity-spezifische Erweiterung des Interface _Module_.
+
+EJB Implementierung *EntityService*
+-----------------------------------
+
+class **EntityService** extends _AbstractModule_ implements _EntityServiceLocal_
+
+Modul-spezifische Implementierung unter Nutzung der generischen Implementierung aus _AbstactModule_.
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 87462df..b4997f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,6 +14,7 @@
db-migration
framework
cust-services
+ database-services
web
cli