Faktor-IPS Produktdaten in der Datenbank

Deployment der Produktdaten

ProductDataDeployment-Service

Die Rest-API für das Einspielen der Produktdaten wird über das Deployment des productdata-jpa-deployment-service.war auf einen Java-EE-Server (EE6+ oder NetWeaver 7.50+) mit konfigurierter Persistence Unit faktorips-productdataservice-jpa zur Verfügung gestellt.

Data Source

Im Server muss dazu die Datasource mit dem JNDI Namen ips-product-data (bzw. je nach Server auch java:/ips-product-data) konfiguriert werden.

Um die Datenbanktabellen zu erstellen kann das folgende Skript als Vorlage dienen:

Oracle
CREATE TABLE IPS_CONTENT (ID VARCHAR2(22) NOT NULL, XML CLOB NOT NULL, PRIMARY KEY (ID));
CREATE TABLE IPS_TOC_ENTRY (ID VARCHAR2(22) NOT NULL, type VARCHAR2(31) NULL, IMPLEMENTATIONCLASSNAME VARCHAR2(255) NOT NULL, IPSOBJECTID VARCHAR2(255) NOT NULL, IPSOBJECTQNAME VARCHAR2(255) NOT NULL, VERSION_ID VARCHAR2(22) NULL, XMLRESOURCE_ID VARCHAR2(22) NULL, PRIMARY KEY (ID));
CREATE INDEX PSTCENTRYFKPSTOCENTRYVERSIONID ON IPS_TOC_ENTRY (VERSION_ID);
CREATE INDEX PSTCNTRYPSTCENTRYXMLRESOURCEID ON IPS_TOC_ENTRY (XMLRESOURCE_ID);
CREATE UNIQUE INDEX AK_TOCENTRY_OBJECT_VERSION ON IPS_TOC_ENTRY (IPSOBJECTID, VERSION_ID);
CREATE TABLE IPS_GENERATION_TOC_ENTRY (ID VARCHAR2(22) NOT NULL, VALIDFROM TIMESTAMP NOT NULL, PRODUCT_CMPT_ID VARCHAR2(22) NULL, XMLRESOURCE_ID VARCHAR2(22) NULL, PRIMARY KEY (ID));
CREATE INDEX PSGNRTNPSGNRTNTCNTRYPRDCTCMPTD ON IPS_GENERATION_TOC_ENTRY (PRODUCT_CMPT_ID);
CREATE INDEX PSGNRTNTCPSGNRTNTCNTRYXMLRSRCD ON IPS_GENERATION_TOC_ENTRY (XMLRESOURCE_ID);
CREATE TABLE IPS_PRODUCT_CMPT_TOC_ENTRY (ID VARCHAR2(22) NOT NULL, GENERATIONIMPLCLASSNAME VARCHAR2(255) NULL, KINDID VARCHAR2(255) NOT NULL, VALIDTO TIMESTAMP NULL, VERSIONID VARCHAR2(255) NOT NULL, PRIMARY KEY (ID));
CREATE INDEX PSPRDCTCMPTTPSPRDCTCMPTTCNTRYD ON IPS_PRODUCT_CMPT_TOC_ENTRY (ID);
CREATE TABLE IPS_TOC_VERSION (ID VARCHAR2(22) NOT NULL, DEPLOY_COMMENT VARCHAR2(255) NULL, DEPLOY_TIMESTAMP TIMESTAMP NULL, UPDATE_TIMESTAMP TIMESTAMP NULL, MODEL_VERSION VARCHAR2(255) NULL, NAME VARCHAR2(255) NULL, STATUS VARCHAR2(255) NULL, DEPLOY_USER VARCHAR2(255) NULL, VERSION VARCHAR2(255) NULL, PRIMARY KEY (ID));
CREATE UNIQUE INDEX AK_TOC_VERSION_NAME_VER_MVER ON IPS_TOC_VERSION (NAME, VERSION, MODEL_VERSION);
CREATE INDEX IX_TOC_VERSION_NAME_VER_STATUS ON IPS_TOC_VERSION (NAME, VERSION, STATUS);
ALTER TABLE IPS_TOC_ENTRY ADD CONSTRAINT FK_IPS_TOC_ENTRY_VERSION_ID FOREIGN KEY (VERSION_ID) REFERENCES IPS_TOC_VERSION (ID);
ALTER TABLE IPS_TOC_ENTRY ADD CONSTRAINT IPS_TOC_ENTRY_XMLRESOURCE_ID FOREIGN KEY (XMLRESOURCE_ID) REFERENCES IPS_CONTENT (ID);
ALTER TABLE IPS_GENERATION_TOC_ENTRY ADD CONSTRAINT PSGNERATIONTOCENTRYPRDCTCMPTID FOREIGN KEY (PRODUCT_CMPT_ID) REFERENCES IPS_TOC_ENTRY (ID);
ALTER TABLE IPS_GENERATION_TOC_ENTRY ADD CONSTRAINT PSGNRATIONTOCENTRYXMLRSOURCEID FOREIGN KEY (XMLRESOURCE_ID) REFERENCES IPS_CONTENT (ID);
ALTER TABLE IPS_PRODUCT_CMPT_TOC_ENTRY ADD CONSTRAINT IPS_PRODUCT_CMPT_TOC_ENTRY_ID FOREIGN KEY (ID) REFERENCES IPS_TOC_ENTRY (ID);

Dokumentation Rest-API

Die Dokumentation der Rest-API wird mit dem Service zusammen deployt und kann unter dem Deployment-URL erreicht werden.

Deployment auf JBoss Server

Wird JBoss als Server verwendet müssen zwei Properties gesetzt werden:

  • org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true, damit die in den IDs von Tabellen vorkommenden Slashs korrekt verarbeitet werden

  • eclipselink.target-server=JBoss damit EclipseLink die Transaktionen korrekt abschließt.

Die API ist mit Basic Authentication im Authentication Realm ips-deploy-realm gesichert und erwartet einen Benutzer mit der Rolle ipsdeploy. Dieser ist im Application Server, wie im Kapitel Deploymnet mit Wildfly einrichten beschrieben, einzurichten. Der Benutzer selbst muss dem Realm ips-deploy-realm nicht zugeordnet sein, entscheidend ist hier die Rolle ipsdeploy.