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 der 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 entsprechend einzurichten.