4,031 karma · joined August 5, 2011
See also this HN thread [2] from last year for more discussion.
> The ability to reason clearly and conclusively about permitted subclasses will be realized in a future release that supports pattern matching.
[1] https://www.reddit.com/r/programming/comments/ftlv6d/psa_all...
Picnic is Europe's fastest growing online grocery scale-up. We create the whole experience all the way from our shopping app to delivering the groceries at the door with our own electric vehicles. Picnic is currently active in The Netherlands and Germany, expanding at a fast pace.
In this role, you help building products that support crucial parts of the Picnic experience. This ranges from a custom warehouse management system, to sophisticated planning and routing challenges, to e-commerce building blocks facilitating continuous experimentation. You can also read our blog to get a better feel for what we do: https://blog.picnic.nl
Wondering about our application process? It's fully transparent and described here: https://hiring.picnic.app (if you have suggestions for this process, feel free to create a Pull Request: https://github.com/PicnicSupermarket/hiring-experience).
Our tech stack: Java 11 / Spring (Reactor/WebFlux) / PostgreSQL / MongoDB / Kubernetes / AWS / GitHub
For other development roles, see https://join.picnic.app/team/technology-and-engineering
You can apply through the links above, or shoot an email to sander.mak@teampicnic.com if there's anything you can't find in the supplied links.
(disclaimer: I'm author of the O'Reilly book Java 9 Modularity (see https://javamodularity.com) which discusses this and other migration issues in great detail)
- some Java EE technologies that are tradionally part of Java SE as well, won't resolve by default when compiling/running on the classpath (JAXB will be the most noticeable)
- JDK 9 strongly encapsulation internal implementation classes (think of types in com.sun.* and sun.* packages). When running on the classpath, there's a lenient form of strong encapsulation: you will get a warning on the console when reflectively using these types. In time, this lenient mode will be switched to a more strict enforcement. Ergo: time to wean code off the dependencies on internal implementation classes
The first restriction you'll probably run into (if you for example have a Spring application). The second restriction is more an issue for library maintainers (though you should start complaining to said maintainers if your application starts printing warnings)
All in all, it's not a 100% drop-in replacement, but it's close enough for most scenarios. The trick is to make sure your application will keep running in the future as well, when a more strict strong encapsulation regime will be enforced for classpath-applications as well.
(full disclosure: I'm author of Java 9 Modularity, O'Reilly, which covers many migrations scenarios as well. See https://javamodularity.com)
- OSGi: offers run-time modularization (based on classloaders), with a more dynamic model (bundles can start/stop/load/unload). Often derided for its complexity, which Jigsaw has tried to reduce (in part by offering a less dynamic model)
- Forced modularization: fortunately, Java 9 has many migration features to allow incremental modularization. Most notable are automatic modules, which allow you to treat non-modularized JARs as modules, and interoperation between automatic modules and the classpath
Hope this helps.
(full disclosure: I'm author of Java 9 Modularity, O'Reilly, see https://javamodularity.com)
[1] https://books.google.nl/books?id=_AfABAAAQBAJ&pg=PA258&lpg=P...
If the Public Draft Specification Ballot fails, the Expert
Group will have 30 days to update the draft in response to
the concerns raised by the EC and to submit a revised version
to the PMO. If a revised draft is not received within 30
days, the original decision by the EC shall stand and the PMO
will declare the JSR closed. If a revision is received, the
PMO shall forward it to the EC and initiate a Public Draft
Specification Reconsideration Ballot.
From: https://jcp.org/en/procedures/jcp2#3.4.5Be sure to read the comments on the votes though. Most votes offer an opening for reconsideration, since progress was already made since the version that was submitted for the Public Review Ballot.
module mymodule {
exports mymodule.pkga;
exports mymodule.pkgb;
requires someothermodule;
}
What happens is that every package except the ones exported are accessible to other modules. Non-exported packages are encapsulated, not even reflection can break through that barrier. The requires statements are used by the Java compiler and runtime to verify the current configuration of modules resolves correctly.Obviously there's lots of more detail to go into. Of course I recommend you check out my upcoming book (early release available) for that: http://shop.oreilly.com/product/0636920049494.do
In short, Java makes a great step forward wrt. modularity. When regular JARs transition to modular JARs (adding a module descriptor), many more checks and balances are in place than are currently possible with the classpath.