Difference between revisions of "Java 2018 Code Sprint"

From OSGeo
Jump to: navigation, search
(How to sponsorship)
(GeoServer Planning)
Line 83: Line 83:
 
* dependency audit  
 
* dependency audit  
  
Sprint priorities:
+
Required updates:
 
+
* Spring 5 - Older versions of spring are not compatible with Java 18.9. Upgrading to from Spring 4 to Spring 5 does involve handling some API changes.
+
  
 +
* Spring 5 - Older versions of spring are not compatible with Java 11. Upgrading to from Spring 4 to Spring 5 does involve handling some API changes.
 
* HazelCast - Like Spring, HazelCast involves a lot of reflection.  
 
* HazelCast - Like Spring, HazelCast involves a lot of reflection.  
  
Line 92: Line 91:
  
 
* Repackage GeoServer application jars to prevent conflicts at the package level.
 
* Repackage GeoServer application jars to prevent conflicts at the package level.
* The resulting application can be used on either the CLASSPATH (Java 8) or MODULEPATH (Java 11)
+
* Resulting application can be used on either the CLASSPATH (Java 8) or MODULEPATH (Java 11)
  
 
== GeoTools Planning ==
 
== GeoTools Planning ==

Revision as of 11:54, 22 August 2018

The Java tribe has a real challenge for 2018 - updating our open source projects for the Java roadmap.

Location

We are looking at setting up a distributed sprint with locations in North America, Europe and Oceania.

Contacts

Jody Garnett

Sponsors

We would like to thank our sponsors - would you like to be the first?

Gold Sponsors

TBD

Bronze Sponsors

TBD

In-Kind Support

TBD

Participants

Please add your name and the projects you are planning to sprint and note the likehood of your attendance.

Participants
# Participant Country Organization Arrival Departure Project Work on Notes Attendance

Discussion

Java has a roadmap?

Yes, we had a previous sprint focused on Java 8 compatibility, several features had changed breaking compatibility.

More importantly the Java roadmap has changed to a six-month release cycle:

- six month release cycle is already well underway having started with Java 9 and Java 10. - Oracle is offering three year LTS releases .. to paying customers - AdoptOpenJDK is setting up LTS releases of OpenJDK .. backed by IBM, Microsoft and others. - RedHat is focusing on LTS (skipping Java 9 and Java 10) and plans to ship OpenJDK based on Java SE 11

Why is updating our open source projects for the Java roadmap a challenge?

- Java changed the service provider interface plugin system used by GeoTools, forcing the project to write its own replacement.

- The java runtime has been broken up into modules, not all of which are activated by default. We need to review what sections of the JRE we require and ensure they are turned on.

- Java introduced the module system "jigsaw" providing both a class-path and module-path for loading jars.

- When loaded on the module-path jars are prevented from using the same package. This breaks multi-jar projects like GeoTools library where gt-api defining interfaces, and gt-main providing implementations.

- Jigsaw also locks down aspects of Java reflection, affecting projects like Spring that make heavy use of reflection to "auto wire" GeoServer together. Spring 5 has been released and upgrading to this release will be a key focus.

- With these changes projects like GeoServer need to review of hundreds open source dependencies to determine what other libraries are broken, if an update is available or replacement can be found.

- The java web service framework (responsible for concepts like Servlet and Session) is being removed from Oracle oversight and has been setup as [Jakarta EE Software](https://jakarta.ee).

Recommended reading

Do you have any experience running sprints?

The GeoServer team really benefited from java 2017 code sprint and is eager to repeat the success.

GeoServer Planning

Initial planning has started:

Preflight activities:

  • dependency audit

Required updates:

  • Spring 5 - Older versions of spring are not compatible with Java 11. Upgrading to from Spring 4 to Spring 5 does involve handling some API changes.
  • HazelCast - Like Spring, HazelCast involves a lot of reflection.

Module refactor:

  • Repackage GeoServer application jars to prevent conflicts at the package level.
  • Resulting application can be used on either the CLASSPATH (Java 8) or MODULEPATH (Java 11)

GeoTools Planning

Planning and work is already well underway:

The first completed phase is to allow GeoTools to be used on the classpath:

The sprint goal is to refactor the geotools library into modules, allowing the jars to be used on either the classpath (Java 8) or the module path (Java 11).

  • Core library refactored into modules

GeoTools Java 11 modules

  • plugins used to automatic modules to dependencies on the classpath

module-path bridge to classpath

In the above illustration the gt-svg module is used as an automatic module publishing org.geotools.renderer.style.svg package. It acts as a bridge to the multi-jar project batik still on the classpath, completely masking the fact batik is used used to read and render svg files. The core module gt-renderer publishes select packages for use, while hiding others. It makes use of ServiceLocator to access the IconFactory implemented by gt-svg and never has direct use of the batik implementation.

For this to work the gt-svg jar has been refactored, moving the icon factory the new package org.geotools.style.svg. This was required as the package org.geotools.renderer.style was already published by gt-renderer.

We expect:

  • Initial focus is on the core library, refactoring to allow jars to be used on the module path as named modules
  • plugins will remain on the classpath, accessed via service locator, any conflicting packages will not be visible to client code

Open questions:

  • Is this a good time to migrate away from org.opengis packages?

JTS Topology Suite Activities

Results of bonn code sprint:

JTS jars can be placed on the module-path used as an automatic module, the jars have been supplied am Automatic-Module-Name using a MANIFEST.MF entry.

For an example.application using jts-core as a module add module-info:

  module example.application {
    requires org.locationtech.jts;            // jts-core
  }

How to sponsorship

Contributions will be put towards travel costs for sprint participants who would be otherwise unable to attend. Any surplus at the end of the event will be turned over to OSGeo or used for a future code sprint. We have set-up the sprint to minimize travel and accommodation costs.

Sponsors will receive the following benefits / honours:

  • Your logo at the top of this page
  • Mention in project communication (for example the GeoServer 2.15 release announcement)
  • The ability to run on a supported java platform
  • Our gratitude :)

This event provides the following sponsorship levels:

Gold $2500 USD
Silver $1500 USD
Bronze $750 USD
In-Kind In-kind support graciously accepted

This is an official OSGeo event, your contribution counts towards being recognized as an OSGeo Sponsors.

For more information on sponsorship, please contact Jody Garnett, Andrea Aime.

How to Sponsor

  1. Contact OSGeo Treasurer for details on using PayPal or to request an invoice:
  2. The OSGeo Treasurer will contact both you and the event organizers to acknowledge your sponsorship
    • Please have a logo ready for your organization if you wish to be acknowledged publicly
    • Your event sponsorship, at your request, can contribute towards being recognized as an OSGeo Foundation sponsor

Sponsorship Outreach

We are reaching out to organizations to see if there is interest in sponsorship:

  • International organizations (OSGeo, GeoSolutions, Boundless);
  • Local organizations

If there is a lot of local sponsorship we expect to drag the developers away from the task at hand and meet the local community (at a social evening or similar).

OSGeo Funding Request

The following information is requested by OSGeo Board Code_Sprint_Guidelines, we provided an indication that we would be planning a sprint during the 2018 budget process.