I spoke about using getter/setter from our own accessorfactory so we can
prevent generation and use our well known getter/setter.

Le 29 févr. 2012 03:44, "David Blevins" <david.blev...@gmail.com> a écrit :

>
> On Feb 27, 2012, at 10:02 PM, Romain Manni-Bucau wrote:
>
> > Was my analysis so the question is do we still need to capture them like
> it
> > or can we use more simple setters/getters?
>
> The accessors are generated regardless if field or getters/setters are
> used.
>
> > Note: the code i pasted in my previous email is the one which is
> generated
> > from the injector.
>
> You might have to give me a line number as I don't see that in the
> NativeMethodAccessorImpl.java you posted in your previous email.
>
> > Ps: maybe i looked too fast but i didnt see jaxb-impl in tomee
>
> It's part of the jvm as of Java 6, so it's no longer something we ship.
>
> That said, if we wanted to certify our JAX-WS stack, we'd have to upgrade
> to 2.2 which means putting the jaxb impl in an endorsed dir (same as
> @Resource.lookup)
>
> -David
>
> > Le 28 févr. 2012 06:36, "David Blevins" <david.blev...@gmail.com> a
> écrit :
> >
> >>
> >> On Feb 26, 2012, at 11:59 PM, Romain Manni-Bucau wrote:
> >>
> >>> did you look
> >>>
> >>
> http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/reflect/NativeMethodAccessorImpl.java
> >>> ?
> >>>
> >>> seems this class usage/generation is not a simple try { loadClass() }
> >> catch
> >>> (...)  { generate(); }
> >>>
> >>> it is generated if it is often used (> 15 times by default if i didnt
> >> look
> >>> too quickly).
> >>
> >> That's a deceptively similar, but unrelated bit of code.  Those are for
> >> the java.lang.reflect API.
> >>
> >> I grabbed the JAXB RI source and dug around (svn co
> >> https://svn.java.net/svn/jaxb~version2/tags/jaxb-2_1_9).  This appears
> to
> >> be the mechanism it uses to determine if the class has already been
> >> generated:
> >>
> >>
> >>
> http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector.java?av=f#112
> >>
> >> Basically a weak hashmap of classloaders and "Injector" instances where
> >> each "Injector" holds a hashmap of classes that have been generated.
> >>
> >> Not sure how we get around it other than an AccessorFactory.
> >>
> >>> Custom accessors is probably the key.
> >>
> >> Perhaps one that just instantiates the generated Accessors we've
> captured.
> >>
> >>
> >> -David
> >>
> >>>
> >>> 2012/2/27 David Blevins <david.blev...@gmail.com>
> >>>
> >>>>
> >>>> On Sep 26, 2011, at 12:43 AM, David Blevins wrote:
> >>>>
> >>>>> # JAXB Accessors
> >>>>>
> >>>>> One of the biggest polluters of the class space is JAXB as it
> generates
> >>>> accessors for all the fields.  First thought is, gee, I wonder if we
> >> can do
> >>>> that at build time and keep the class definitions.  If there's some
> way
> >> we
> >>>> could write down those classes, it could save us a lot of trouble at
> >>>> runtime.  We'd get a great speed boost on the cold start -- which is
> >> where
> >>>> unit test performance lives.
> >>>>>
> >>>>> A while back I did some perf testing of our OpenEJB 3.0 speed and
> JAXB
> >>>> was nearly half of the time it took to boot.  We have a bigger JAXB
> tree
> >>>> than we did and that can easily account for a sliver of the slightly
> >> slower
> >>>> embedded speed.
> >>>>>
> >>>>> The classes exist, so there has to be some way to write them to disk
> >>>> even if there is no magical flag that will make the JAXB RI do it for
> >> us.
> >>>> Would be great to know if such a flag did exist.  If someone is
> looking
> >>>> for a research problem, this would be a great one.
> >>>>
> >>>> Did some work on this.
> https://issues.apache.org/jira/browse/TOMEE-143
> >>>>
> >>>> With a JavaAgent, we monitor all classes created and their bytecode.
> >>>> Anything that is a "$JaxbAccessor" class is written to disk.  The new
> >>>> openejb-jee-accessors module contains all these accessors.
> >>>>
> >>>>  $ ls -lh target/openejb-jee-accessors-4.0.0-beta-3-SNAPSHOT.jar
> >>>>  -rw-r--r--  1 dblevins  dblevins   596K Feb 26 15:48
> >>>> target/openejb-jee-accessors-4.0.0-beta-3-SNAPSHOT.jar
> >>>>
> >>>>  $ jar tvf target/openejb-jee-accessors-4.0.0-beta-3-SNAPSHOT.jar |
> >> grep
> >>>> 'WebApp'
> >>>>     666 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_absoluteOrdering.class
> >>>>     608 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_contextParam.class
> >>>>     652 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_dataSource.class
> >>>>     610 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_distributable.class
> >>>>     654 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_ejbLocalRef.class
> >>>>     644 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_ejbRef.class
> >>>>     648 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_envEntry.class
> >>>>     602 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_errorPage.class
> >>>>     596 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_filter.class
> >>>>     610 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_filterMapping.class
> >>>>     640 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_icon.class
> >>>>     602 Sun Feb 26 15:48:22 PST 2012
> >>>> org/apache/openejb/jee/WebApp$JaxbAccessorF_jspConfig.class
> >>>>     [....]
> >>>>
> >>>>  $ jar tvf target/openejb-jee-accessors-4.0.0-beta-3-SNAPSHOT.jar |
> >> grep
> >>>> -c 'class$'
> >>>>  966
> >>>>
> >>>> Soo... all that and it doesn't seem to work :)
> >>>>
> >>>>  mingus:~/openejb/examples 04:13:17
> >>>>  $ for n in simple-stateless* ; do  (cd $n && mvn clean install); done
> >> |
> >>>> egrep 'Time elapsed|JAXBContext'
> >>>>  Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.918
> >>>> sec
> >>>>  JAXBContext.newInstance 403  org.apache.openejb.jee.EjbJar
> >>>>  Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.341
> >>>> sec
> >>>>
> >>>> I think we're darn close though.
> >>>>
> >>>> I'd like to shift gears and work on more classpath scanning
> performance
> >>>> boosts, if someone wants to pickup this task and see what we might
> have
> >> to
> >>>> do to get JAXB to see the classes we've generated, that'd be great.
> >>>>
> >>>> Could shave half a second or a second off of even a simple test.
> >>>>
> >>>>
> >>>> -David
> >>>>
> >>>>
> >>
> >>
>
>

Reply via email to