Migration from MY DATA Control Technologies 3.x to 4.0
Prerequisites
-
MY DATA Control Technologies 4.0 requires at least Spring 5 (e.g., 5.2.5.RELEASE). Make sure, that the Spring dependencies in your Project are at least Spring 5. Example packages: org.springframework.spring-beans, org.springframework.spring-webmvc
-
MY DATA Control Technologies 4.0 requires at least Spring Boot 2.2.4.RELEASE. Example packages: org.springframework.boot.spring-boot-test
-
MY DATA Control Technologies 4.0 requires at least Gson 2.8.6 (package com.google.code.gson.gson).
Step by Step Migration
-
Update the version property in the
propertiessection of yourpom.xmlfile.<mydata.version>4.0.0</mydata.version> -
Update the package versions and names in your
pom.xmlfrom ind2uce to mydata:<dependency> <groupId>de.fraunhofer.iese.mydata</groupId> <artifactId>core</artifactId> <version>${mydata.version}</version> </dependency> <dependency> <groupId>de.fraunhofer.iese.mydata</groupId> <artifactId>sdk</artifactId> <version>${mydata.version}</version> </dependency> -
Alive check urlis not longer necessary and developers should not use it any longer and remove it throughout the code and properties. -
Change the PMP url by removing the
/wsat the end, so that just the server name and port remains. -
Replace all old imports (package names changed from ind2uce to mydata). Commonly used imports are now:
import de.fraunhofer.iese.mydata.policy.event.Event; import de.fraunhofer.iese.mydata.policy.exception.EvaluationUndecidableException; import de.fraunhofer.iese.mydata.policy.exception.InhibitException; import de.fraunhofer.iese.mydata.util.MyDataUtil; -
When replacing the old imports, consider replacing the PEP calls too. With MY DATA Control Technologies 4.0 there are a few helper (like
MyDataUtil) that enable an easier handling of PEPs (see also Using a custom PEP):MyPep myPep = ...; User u = new User("John Doe"); final User enforcedUser; try { final Event event = MyDataUtil.checkedBlockingGet(myPep.enforceUser(user)); enforcedUser = (User) enforcedEvent.getValueForName("user"); } catch (IOException e) { throw new AccessPermissionDeniedException("There is a problem with the communication channel to the PDP. This will result in inhibition.", e); } catch (InhibitException e) { final String msg = e.getMessage(); throw new AccessPermissionDeniedException("PDP decided to inhibit the access" + (msg != null ? ": " + msg : "."), e); } catch (EvaluationUndecidableException e) { throw new AccessPermissionDeniedException("PDP reported that the evaluation is undecidable. This will result in inhibition.", e); } catch (RuntimeException e) { // catch any other RuntimeExceptions LOG.error("Exception occured", e); throw new AccessPermissionDeniedException("Internal error, have a look into the log files. For now: This will result in inhibition."); } System.out.println(enforcedUser.getName()); -
In your PEP definition, remove old annotations like
@PEPServiceDescriptionor@ProvidedModifiers. Replace them with@Modifiersin case you want to scan all your packages for available modifiers.@Modifiers(packageNames = {"de.fraunhofer.iese.mydata.pep.modifiers"})will limit the search scope and provides a better performance. Relevant imports in PEPs are:import de.fraunhofer.iese.mydata.policy.event.Event; import de.fraunhofer.iese.mydata.reactive.common.EventParameter; import de.fraunhofer.iese.mydata.reactive.common.EventSpecification; import de.fraunhofer.iese.mydata.reactive.common.Modifiers; -
Also in your PEP definition, remove the no longer valid
scopeparameter from the@EventSpecification -
Where ever you instantiate and use the
Eventclass, remove the usage of thescopefrom the constructor. -
MY DATA Control Technologies 4.0 replaced the
scopebysolutionId. For consistency reasons, you can rename existing variable names.The solutionId,componentIdandclientIdneeds to be written in lowercase. -
Replace the initialization of the MY DATA Control Technologies environment according to your needs. In MY DATA Control Technologies 4.0, there are several modes available that are initialized differently. Please read the manual pages to learn all about it: Working with the library
-
For non Spring Boot applications, the registration of a custom PEP is different. Learn more about it in the manual: Register a custom PEP