2019-04-16: DEV cluster update, changes to libraries, build system, Java, JAPC, LSA ...

1 Introduction

Dear LSA community,
Dear Java developers,

in preparation for release 13 of control system applications and LSA, the controls infrastructure group will already update the development cluster next Tuesday (April 16th). During the update, you will not be able to access asl740 to asl744. It will be accessible again on Wednesday, April 17th.

This way we will have the 'to be expected' development environment already available for testing and preparation. At the same time we will introduce new development versions of our frameworks which will introduce BACKWARD INCOMPATIBLE CHANGES.

We strongly recommend that you commit all your code changes no later than Monday evening, April 15th. After the update, you should start adapting to the changes that were introduced and check that your software still works as expected. We prepared a wiki page that contains an overview of the changes so you know what to do and what to look out for. You may also want to subscribe to the wiki page (the button on the top right of the page), because we might update it if new information regarding R13 changes becomes available in the future.

https://www-acc.gsi.de/wiki/Applications/AppRelease13DevelopmentClusterUpdateApril19

Happy coding,

Raphael on behalf of the LSA Team

2 Roadmap for release 13

Tuesday, 16th of April 2019 - Development cluster update, adapt to changes
Monday, 6th May 2019 - ACO IN Maintenance Week, Production Cluster update
Monday, 13th May 2019 - r13 Rollout of Software (Production Release)
Monday, 20th May 2019 - Dry Run to Test that everything still works as expected
Monday, 3rd June 2019 - CryRing Beamtime, everything has to work as expected

3 Java Build System

3.1 Updated Maven Parents

The Maven parents provided by ACO have been released in version 13.0.0-SNAPSHOT for the current development version:
  • csco-parent
  • csco-parent-java
  • csco-parent-java-service
  • csco-parent-java-bundle

Please check all your projects to see whether you use our Maven parents, and if yes, update them to 13.0.0-SNAPSHOT for the development version of your application.

Note that a 13.0.0. version (without "-SNAPSHOT") to be used in production will not be provided yet, but on May 15th when the R13 release takes place. Nevertheless, it is vital that you check whether your application still works properly with the new Java / library versions beforehand.

3.2 Settings.xml configuration

To ensurce compatibility with CERN artifacts and to prevent errors that are hard to debug, all developers that use our Maven parents will have to edit their Maven settings.

This can be done in the following steps:

1. Open your Maven settings file in an editor of your choice (e.g. "gedit ~/.m2/settings.xml").
2. Before the closing </settings> tag, copy and paste the following profile configuration:
<profiles>
   <profile>
     <id>inject-dependencies-set-direct</id>
     <properties>
       <dependencies.set.direct>true</dependencies.set.direct>
     </properties>
   </profile>
 </profiles>

 <activeProfiles>
   <activeProfile>inject-dependencies-set-direct</activeProfile>
 </activeProfiles>

If you do not have the file at all, you propably never configured maven for release / deployment.

Either configure your maven version for deployment and add the mentioned section, this is explained here: https://www-acc.gsi.de/wiki/IN/Maven#Authentication

Or, if you do not want to deploy on your own, create a new settings.xml file that looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
 <profiles>
   <profile>
     <id>inject-dependencies-set-direct</id>
     <properties>
       <dependencies.set.direct>true</dependencies.set.direct>
     </properties>
   </profile>
 </profiles>

 <activeProfiles>
   <activeProfile>inject-dependencies-set-direct</activeProfile>
 </activeProfiles>
</settings>

3. Save the file.
4. Done!

If you do not properly perform this configuration step, you will receive the following error when trying to build and / or run your application:
  • "Some Enforcer rules have failed."
  • "You must set the dependencies.set.direct property to true!"
If you encounter this error message, please check again if you altered your Maven settings correctly as described above. Should the problem persist anyway, please contact Raphael or Hanno for help.

4 Java 11

During the maintenance week from May 6th until May 10th, Java 11 (OpenJDK) will be installed on the PRO cluster. Java 8 (OracleJDK) will not be available anymore, except as a fallback in case things should go terribly wrong. To prevent that from happening, the DEV cluster will updated as soon as possible after the current beam time. So from Wednesday next week, April 17th, you will be able to check that your applications / services / widgets etc. still work with Java 11. Hopefully, switching to the new Java version should not cause you too much trouble, but better safe than sorry, so please check that things still work until the R13 control systems applications release on May 15th. Also, other control system components that get updated may also require your attention, as detailed below.

Because of license changes in OracleJDK 11 we will not be able to use OracleJDK anymore in production, on the cluster OpenJDK 11 is provided. If you use your own Java installation please make sure to test against OpenJDK. OpenJDK is now also the reference implementation for Java.

Oracle compiled a quite substantial list of changes that happen in Java 11, this page might help you to spot changes that affect you:
https://docs.oracle.com/en/java/javase/11/migrate/index.html

5 JavaFX

We will switch from JavaFX 8 (which was included with Java 8) to JavaFX 12 (OpenJFX, which has been decoupled from the Java JDK and is now a separate product).

Since JavaFX is not part of the JDK anymore, additional dependencies on Maven artifacts have to be specified. We already did that for the most commonly used JavaFX artifacts within cscoap-common-gui-elements, so If you use the dependencies provided by ACO, you're probably fine.

If you encounter compilation problems that indicate missing JavaFX dependencies, they are probably not within the set we provide and you may need to add those. As usual, you can do this in your pom.xml like this:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-web</artifactId>
    <version>${dependencyversion.openjfx}</version>
</dependency>

The ${dependencyversion.openjfx} tag is provided by our Maven parent and ensures that versions between JavaFX artifacts are consistent. In the example above, the javafx-web artifact is needed additionally, as specified in the artifactId tag. A list of available OpenJFX artifacts can be retrieved from Maven Central.

Please check that your JavaFX applications still run and that they behave as expected.

5.1 Changed artifacts

accsoft-gui-fx

The artifact cern.accsoft.gui:accsoft-gui-fx:0.4.15 is not compatible with Java FX 11. Until CERN provides a new version for JDK11, we have to use a special artifact we adapted ourselves: de.gsi.aco.accsoft.gui:accsoft-gui-fx:13.0.0(-SNAPSHOT) .

If you use libraries provided by ACO APP, e.g. cscoap-common-gui-elements, you should automatically get the correct artifact. If you explicitly included a dependency to this artifact yourself, please make sure to update the dependency to the new group id and version.

5.2 SceneBuilder

A JavaFX 12 compatible Version of SceneBuilder can be started on the development cluster, it is located here:

/common/usr/cscoap/bin/SceneBuilder

6 Eclipse

6.1 New Version / Naming Schema

Eclipse moved from a 'naming' scheme to a 'date' scheme.
We will update eclipse from the old eclipse-neon to the new eclipse version eclipse-2019-03.

The new version can be found at:

/usr/bin/eclipse-2019-03

To start eclipse-2019-03 with the default plugin customization / preferences as provided by AP, please use the startup script (see Eclipse configuration for more details):
/common/usr/cscoap/opt/eclipse/2019-03/eclipse-app-2019-03

6.2 Eclipse Workspace Setup

We also provide the usual scripts to set-up an eclipse development workspace.
  • The minimum profile is more targeted towards application development, it contains very few projects and the only LSA artifacts are 'lsa-client-gsi' and 'lsa-ext-fair-gsi'.
  • The medium profile is targeted towards advanced developers (e.g. LSA GSI Core, Model, Database), however it does not contain CERN artifacts, so no CERN account is required.
  • The maximum profile also contains collaboration projects from CERN (e.g. LSA Common Core) and requires a CERN account and Gitlab.cern.ch access.
The scripts are located here (or in your path if you are in the lsa linux group):

Development (13.0.0-SNAPSHOT)
/common/usr/lsa/bin/mkws-dev
/common/usr/lsa/bin/mkws-dev-med
/common/usr/lsa/bin/mkws-dev-max
Production (12.0.0 until 10th May, 13.0.0 after 10th May)
/common/usr/lsa/bin/mkws-pro
/common/usr/lsa/bin/mkws-pro-med
/common/usr/lsa/bin/mkws-pro-max

You can configure Eclipse/your workspace as usual, see EclipseConfiguration , e.g. import the Eclipse preferences.

6.3 SVN Connector

We can use the old SVN client for Eclipse. Please note: Projects that are checked out via Eclipse can not be used with the command line SVN client (you cannot do e.g. "svn status" or a Maven release (!)) from the command line. If you need command line SVN, check out your projects via the command line (or use a mkws script).

SvnTeamProvider_Eclipse201903.png
  • Install SVN Team Provider: Help -> Install New Software -> Update Site: https://download.eclipse.org/technology/subversive/4.0/update-site, Check ONLY: Subversive SVN Team Provider 4.0.5.I20170425-1700, Next -> ... -> Finish ; Restart Eclipse
  • Install Connector: Window -> Preferences -> Search for: SVN -> SVN Connector -> Get Connector -> Choose SVNKit 1.8.14 Implementation (Optional) 6.0.4.I20161211-1700 , Next -> ... Finish ; Restart Eclipse

6.4 Launching applications

6.4.1 Launching FX applications

FX applications cannot simply be started via Run As -> Run as Java application anymore - if you try, you get an error: Error: JavaFX runtime components are missing, and are required to run this application . This means that your module path is not correctly configured.

Solution: Launch the application via Maven.
  • Right click on your Java FX project -> Run As -> Maven build... -> Goal: exec:java
  • For more information (e.g. how to resolve artifacts from your workspace, how to definewhich main/application class to use (and possibly errors if you don't define it), see How to launch apps with maven.

Alternatively, you could try to figure out how to correctly set your module path and adapt your run configuration accordingly.

7 GIT

On 16h May the ACO Git repository manager will also be treated as 'productive' and not in testing stage anymore.
We will be using Gitea as a repository manager for GIT, the ACO Git instance is located here: https://git.acc.gsi.de/

To access it you will need a cluster account and the repository owner/admin has to grant you access to individual repositories. Depending on the access restrictions set by the owner/admin the default access rights on repositories might differ.
  • SVN will be set to read-only after the beamtime 2019/2020 (around April 2020).
  • SVN will be completly shutdown November 2020.
If you are interested in details regarding this decision there is a CCT protocol: https://www-acc.gsi.de/wiki/FAIR/CCT/Minutes251018

Several projects (e.g. LSA) are already migrating to GIT. SVN has been set read-only for these projects.

More information on how to migrate existing SVN projects to Git and how to use Git from within Eclipse can be found in the HowTo-section of the APP Web.

8 JAPC

JAPC will be upgraded. With the new version CERN cleaned up in preparation for Java 11, removed split package issues, removed deprecations and restructured.

For all projects that use JAPC this requires to update all the imports.

So you might encounter a lot of compilation errors, but don't panic, most of them will probably just be classes that moved from one package to another, which is easy to fix: Remove the wrong imports and let Eclipse create the correct ones for you.

The content of the package

cern.japc.*

was seperated into to different packages

cern.japc.core.*
cern.japc.value.*

As an example, the class

cern.japc.Parameter 

was moved to

cern.japc.core.Parameter

Please check all your imports so they point to the new location of the respective classes.

CSCOSV provides a bill of materials that contains all the maven artefacts and versions needed and can be used in a maven dependency management section.

If you use csco-parent you have this BOM anyway, otherwise you can include it in your maven pom like this:
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>de.gsi.aco.sv</groupId>
                <artifactId>acosv-bom</artifactId>
                <version>13.0.0-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
     </dependencyManagement>

Also two dependencies became obsolete and need to be removed if you still use them:
        <dependency>
            <groupId>org.zeromq</groupId>
            <artifactId>jzmq</artifactId>
        </dependency>
        <dependency>
            <groupId>de.gsi.cs.co.sv.zmq</groupId>
            <artifactId>gsi-jzmq-native-sl7</artifactId>
        </dependency>

Instead you should use one or both of the following dependencies:
            <dependency>
                <groupId>org.zeromq</groupId>
                <artifactId>jeromq</artifactId>
                <version>0.4.3</version>
            </dependency>

           <dependency>
               <groupId>de.gsi.cs.co.sv.zmq</groupId>
               <artifactId>jzmq-jni</artifactId>
                <version>3.1.1-SNAPSHOT</version>
           </dependency>

If you have any problem, please contact Vitaliy Rapp.

9 LSA

The LSA framework moved to the new JAPC version, so projects using LSA also need to use the recent JAPC release.
At the same time we merged with the CERN codebase, updated the database schema and moved to Java 11.

The new LSA development version will be 13.0.0-SNAPSHOT and should work against the current development (gsi-dev, LSA@AccDbU) and integration database ( gsi-int, LSA@AccDbT ).
We also changed passwords on this databases so older clients can not connect by accident. Please update your client to the new version.
If you want to look into the database in development tools like SQLDeveloper please update your database connection strings.
The Production Database LSA@AccDbP will probably be upgraded during our maintenance window on 15th May.

Be carefull! Until release 13 is rolled out on 15h May, the development and integration environment will be incompatible with production.
You should not attempt to run the current development version with the production LSA server and/or database.
Topic revision: r31 - 13 Apr 2020, JuttaFitzek
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback