Compact Profiles for the Java Runtime (was: JFX build and deployment - squeaking wheel)
Florian Brunner
fbrunnerlist at gmx.ch
Sun Nov 18 16:05:28 PST 2012
Hi Bob,
Thanks for your response.
> We have analyzed two different OSGi implementations and they don't appear to
> have any dependencies on these classes.
I was more refering to the fact, that OSGi sometimes has issues when packages
are split/ incomplete.
> Can you provide us with a list of some concrete applications that you
> believe require Java Beans? We could investigate the feasibility of
> pushing this package down to compact3 if there's enough demand and if it
> doesn't have any dependencies that we can't untangle.
According to:
http://docs.oracle.com/javase/7/docs/api/java/beans/package-use.html
JavaBeans are used even by supported Compact1 profile packages such as:
- java.util.jar
- java.util.logging
Often JavaBeans classes such as PropertyChangeListener, Introspector,
BeanInfo, PropertyDescriptor etc. are used somewhere in the implementation and
not necessarily in the API, so it's a bit hard find the dependencies, but a
quick search showed at least:
- Eclipse Link
- Spring
- Several Apache Projects
- GlassFish Projects
- robokind.org
I'm sure the list can go on.
Also my own framework, which I'm about to release, uses
PropertyChangeListeners under the hood in the JavaFX-independent parts.
And what about the other packages I've mentioned:
> > javax.accessibility
> > javax.activation
> > javax.activity
> > javax.annotation
> > javax.print.*
> > javax.sound.*
Especially javax.annotation is also quite popular.
Regards,
Florian
Am Freitag, 9. November 2012, 18.34:20 schrieb Bob Vandette:
> On Nov 9, 2012, at 5:55 PM, Florian Brunner wrote:
> > Hi Bob,
> >
> > As I understand the profiles/ project Jigsaw in the context of JavaFX is
> > it to makte it easier to port Java + JavaFX to other platforms especially
> > by omitting AWT. So I understand that the following packages are omitted:
> >
> > javax.awt.*
> > javax.swing.* (dependencies to AWT)
> > javax.imagio.* (dependencies to AWT)
> >
> > But neither are any of the following packages mentioned:
> > java.beans.*
> > javax.accessibility
> > javax.activation
> > javax.activity
> > javax.annotation
> > javax.jws.*
> > javax.print.*
> > javax.sound.*
> > org.omg.*
> >
> > Now, I understand that the java.beans.PropertyEditor related classes cause
> > an issue because of the dependency to AWT, but the JEP 161 states that
> > some packages have to be split up anyway (which will probably cause
> > issues with OSGi based library, though). And Java Beans patterns (and
> > e.g. PropertyChangeListener) are used at many places in applications and
> > frameworks.
> We really want to avoid splitting packages because this will make it
> difficult to transition to Jigsaw in JDK9.
>
> The PropertyChangeListener classes are problematic. We currently have a
> small set of beans classes in compact1 that we'd like to remove. I've
> requested the fx team remove any dependency on these class in preparation
> for their possible removal. They have a few JIRA's filed to track this
> change.
>
> We have analyzed two different OSGi implementations and they don't appear to
> have any dependencies on these classes.
>
> Can you provide us with a list of some concrete applications that you
> believe require Java Beans? We could investigate the feasibility of
> pushing this package down to compact3 if there's enough demand and if it
> doesn't have any dependencies that we can't untangle.
>
> > I think there should be a profile (maybe Compact3?), which includes
> > everything except AWT related classes to allow maximum reuse and
> > portability of existing 3rd party libraries, which make the Java
> > ecosystem so rich, so they can be used in JavaFX applications.
> The compact3 profile is a very rich set of APIs. The only large group of SE
> APIs that are not found in this profile are: Desktop (AWT/SWING/Java2D),
> JAX-WS, and Corba.
>
> For embedded we felt that JAX-WS was too heavy weight and difficult to split
> up or subset. We've been working under the assumption that embedded
> devices will probably continue to use the smaller kSoap or move to JAX-RS
> for lighter weight RestFul web services.
> > And another question:
> >
> > The JEP 161 states:
> > "If a package listed in a lower Profile in this table has subpackages then
> > those subpackages are included in that Profile unless they are identified
> > as members of some higher Profile. Thus the java.lang.reflect package,
> > e.g., is in the Compact1 Profile, but java.lang.management is in the
> > Compact3 Profile."
> >
> > But the profile Compact1 states explicitly both java.util and
> > java.util.logging.
> >
> > What about the following packages?
> >
> > java.util.concurrent
> > java.util.concurrent.atomic
> > java.util.concurrent.locks
> > java.util.jar
> > java.util.regex
> > java.util.spi
> > java.util.zip
>
> We were attempting to keep the contents of the JEP to the minimum.
>
> These packages are covered by this statement "If a package listed in a lower
> Profile in this table has subpackages then those subpackages are included
> in that Profile ". Since they aren't explicitly mentioned in higher
> profiles, they are in compact1.
>
> Feel free to build your own set of linux 86 profiles where you can see
> exactly what we've proposed for each profile.
>
> You could also grab a copy of this repo and look at the
> jdk/make/profile-rtjar-includes.txt file that lists the packages included
> in each compact profile level.
>
> http://hg.openjdk.java.net/jdk8/profiles/jdk
>
> Thanks for the input,
> Bob.
>
> > I think it would be clearer if all subpackages were listed explicitly.
> >
> > - Florian
> >
> > Am Donnerstag, 8. November 2012, 16.11:31 schrieb Bob Vandette:
> > > There have been some questions on this list about Jigsaw, compact
> > > profiles,
> > > embedded, minimal VMs and the JRE customization tool called jrecreate.
> > > Richard asked me to jump in to try to clear up any confusion.
> > >
> > > Here goes ....
> > >
> > > The Java Modularity Project (project Jigsaw) that was originally planned
> > > for JDK8 was deferred to JDK9. The Java Embedded team (I'm the lead)
> > > was expecting to use Jigsaw in order to provide smaller customizable
> > > Java runtimes for embedded devices. Lacking this new functionality, we
> > > decided to propose a simpler alternate plan that would enhance the JDK8
> > > specification to allow the distribution of a small set of profiles that
> > > are
> > > subsets of the full Java runtime. These are called Compact Profiles.
> > > We
> > > have proposed three compact profiles. A talk and presentation that I
> > > gave
> > > at JavaOne describes these profiles.
> > >
> > > https://oracleus.activeevents.com/connect/fileDownload/session/CDC887FAE
> > > AD8A BE54064406AC304AD59/CON4538_Vandette.pdf
> > >
> > > The Java Enhancement Proposal (JEP) for this work is here:
> > >
> > > http://openjdk.java.net/jeps/161
> > >
> > > The openjdk repository that implements our current prototype is located
> > > here:
> > >
> > > http://hg.openjdk.java.net/jdk8/profiles
> > >
> > > The mailing list that discusses the profiles is
> > > build-infra-dev at openjdk.java.net since the creation of the new profiles
> > > is
> > > done using the new configure based JDK build system.
> > >
> > > This repository allows you to do a build that generates the full JRE,
> > > JDK
> > > but in addition produces three additional image targets (compact1,
> > > compact2, and compact3).
> > >
> > > In order to achieve the smallest Java runtime for embedded (our goal is
> > > around 10MB), we have applied changes to Hotspot that allow us to build
> > > a
> > > small VM (2-3MB) with reduced functionality. The small VM (minimal) +
> > > compact1 profile goal we've set is around 10MB. We're at 11MB today.
> > >
> > > In addition to the profile bundles and the small VM, we have a reduced
> > > Embedded FX stack that we'll run on embedded devices such as the
> > > RaspberryPi. This FX Embedded stack is a compatible FX implementation
> > > without media and webkit support. The goal for this added stack is
> > > 6MB.
> > >
> > > The jrecreate tool that some of you have asked about is not a java
> > > stripping tool. It's main purpose is to assist the embedded developer
> > > in customizing Java runtimes. It allows the developer to select which
> > > profile, VM, debugging options, compression, security and FX options.
> > > It does not strip the full JRE to produce the compact profile. The
> > > jrecreate will be packaged with the three compact profile binaries. It
> > > simply copies these profiles and applies some additional massaging
> > > based on the selected options.
> > >
> > > We have already pushed the minimal VM changes to JDK8 hotspot and will
> > > be
> > > open sourcing the compact profile changes since they will be a standard
> > > feature of JDK8 (independent of embedded). The current profile changes
> > > in
> > > our project repository are only functional for Linux x86.
> > >
> > > We certainly recognize the value that small Java runtimes + reduced FX
> > > could have on Java applications published on Web App stores, but the
> > > current immediate plan is that the jrecreate tool is only going to be
> > > available with our embedded binary downloads since that's where it's
> > > needed most. I've had some discussions with our Netbeans team to see
> > > what it will take to make Netbeans profile aware. This might be a good
> > > way of taking advantage of profiles, reduced FX for producing smaller
> > > applications for distribution.
> > >
> > > I hope this help,
> > > Bob.
More information about the openjfx-dev
mailing list