Thanks Mark, your last commit seems to have fixed, our build is green again.

Nice job!

Il lun 3 lug 2023, 18:10 Mark Struberg <strub...@yahoo.de.invalid> ha
scritto:

> Francesco, I've now pushed this change. Can you please try it out? Looks
> good over here now.
> Now I started the full Syncope build and hope all comes green again.
>
> txs and LieGrue,
> strub
>
> > Am 03.07.2023 um 17:55 schrieb Mark Struberg <strub...@yahoo.de>:
> >
> > Think I found the solution, but first want to run all tests in OpenJPA.
> >
> > I did use the standard ClassWriter in ASMHelper. This does use
> Class.forName.
> > Changed ASMHelper to use the BCClassWriter you wrote some time ago. That
> should do the trick I hope.
> >
> > Gimme 10 minutes plz.
> >
> > LieGrue,
> > strub
> >
> >
> >> Am 03.07.2023 um 17:34 schrieb Romain Manni-Bucau <
> rmannibu...@gmail.com>:
> >>
> >> @Francesco: can you *javap -v -cp $yourclasspath the.class.which.Fail*
> when
> >> it works vs when it fails please?
> >>
> >> Romain Manni-Bucau
> >> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> >> <https://rmannibucau.metawerx.net/> | Old Blog
> >> <http://rmannibucau.wordpress.com> | Github <
> https://github.com/rmannibucau> |
> >> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> >> <
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> >
> >>
> >>
> >> Le lun. 3 juil. 2023 à 17:23, Mark Struberg <strub...@yahoo.de.invalid>
> a
> >> écrit :
> >>
> >>> Does not yet ring any bells, sorry :(
> >>>
> >>> Right now trying to fire up the enhancer manually in the debugger.
> >>> Difference really is that we now do the ASM part way earlier, but still
> >>> class per class.
> >>> Before that it was done as part of the ASMAdapter.
> >>>
> >>> Still digging.
> >>>
> >>> LieGrue,
> >>> strub
> >>>
> >>>
> >>>> Am 03.07.2023 um 17:00 schrieb Francesco Chicchiriccò <
> >>> ilgro...@apache.org>:
> >>>>
> >>>> Adding some info.
> >>>>
> >>>> First of all, the class to which the error message is referring is not
> >>> always the same.
> >>>>
> >>>> Secondly, at least about AccountPolicy as reported below, the original
> >>> error message is stating
> >>>>
> >>>> Execution enhancer of goal
> >>> org.apache.openjpa:openjpa-maven-plugin:4.0.0-SNAPSHOT:enhance failed:
> An
> >>> error occurred while enhancing
> >>> org.apache.syncope.core.persistence.jpa.entity.JPARealm. Exception
> message:
> >>> Type
> org/apache/syncope/core/persistence/api/entity/policy/AccountPolicy
> >>> not present:
> >>> org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy
> >>>>
> >>>> If you look at JPARealm:
> >>>>
> >>>>
> >>>
> https://github.com/apache/syncope/blob/master/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java#L82
> >>>>
> >>>> it declares
> >>>>
> >>>>   @ManyToOne(fetch = FetchType.EAGER)
> >>>>   private JPAAccountPolicy accountPolicy;
> >>>>
> >>>> e.g. a reference to the JPA entity JPAAccountPolicy, not to the
> >>> interface that this class implements, e.g. AccountPolicy
> >>>>
> >>>> It looks to me that somewhere the OpenJPA enhancement process is
> trying
> >>> to resolve more than it should do.
> >>>>
> >>>> Does this make ringing any bell?
> >>>>
> >>>> Regards.
> >>>>
> >>>> On 03/07/23 16:32, Francesco Chicchiriccò wrote:
> >>>>> On 03/07/23 16:27, Mark Struberg wrote:
> >>>>>> Went forward and compiled the Syncope main branch.
> >>>>>>
> >>>>>> Getting this error when running with mvn -X
> >>>>>>
> >>>>>> Caused by: java.lang.ClassNotFoundException:
> >>> org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy
> >>>>>>    at
> >>> org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass
> >>> (SelfFirstStrategy.java:50)
> >>>>>>    at
> >>>
> org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass
> >>> (ClassRealm.java:271)
> >>>>>>    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass
> >>> (ClassRealm.java:247)
> >>>>>>    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass
> >>> (ClassRealm.java:239)
> >>>>>>    at java.lang.Class.forName0 (Native Method)
> >>>>>>    at java.lang.Class.forName (Class.java:467)
> >>>>>>    at org.apache.xbean.asm9.ClassWriter.getCommonSuperClass
> >>> (ClassWriter.java:1043)
> >>>>>>    at org.apache.xbean.asm9.SymbolTable.addMergedType
> >>> (SymbolTable.java:1202)
> >>>>>>    at org.apache.xbean.asm9.Frame.merge (Frame.java:1299)
> >>>>>>    at org.apache.xbean.asm9.Frame.merge (Frame.java:1244)
> >>>>>>    at org.apache.xbean.asm9.MethodWriter.computeAllFrames
> >>> (MethodWriter.java:1611)
> >>>>>>    at org.apache.xbean.asm9.MethodWriter.visitMaxs
> >>> (MethodWriter.java:1547)
> >>>>>>    at org.apache.xbean.asm9.tree.MethodNode.accept
> >>> (MethodNode.java:767)
> >>>>>>    at org.apache.xbean.asm9.tree.MethodNode.accept
> >>> (MethodNode.java:647)
> >>>>>>    at org.apache.xbean.asm9.tree.ClassNode.accept
> >>> (ClassNode.java:468)
> >>>>>>    at org.apache.openjpa.util.asm.AsmHelper.readIntoBCClass
> >>> (AsmHelper.java:146)
> >>>>>>    at org.apache.openjpa.enhance.PCEnhancer.run
> (PCEnhancer.java:606)
> >>>>>>    at org.apache.openjpa.enhance.PCEnhancer.run
> >>> (PCEnhancer.java:5889)
> >>>>>>    at org.apache.openjpa.enhance.PCEnhancer.run
> >>> (PCEnhancer.java:5829)
> >>>>>>    at org.apache.openjpa.enhance.PCEnhancer$1.run
> >>> (PCEnhancer.java:5799)
> >>>>>>    at org.apache.openjpa.lib.conf.Configurations.launchRunnable
> >>> (Configurations.java:760)
> >>>>>>    at
> >>> org.apache.openjpa.lib.conf.Configurations.runAgainstAllAnchors
> >>> (Configurations.java:745)
> >>>>>>
> >>>>>>
> >>>>>> Is this the one you experience too?
> >>>>>
> >>>>> Yes, exactly.
> >>>>>
> >>>>> As you might have found out, AccountPolicy is an interface
> implemented
> >>> by JPAAccountPolicy, which is the corresponding JPA entity.
> >>>>> We take this approach for all JPA entities, actually.
> >>>>>
> >>>>> I thought the reason why AccountPolicy or JPAAccountPolicy are not
> >>> found is that enhancement does not actually finds them.
> >>>>>
> >>>>>> Will take a look at it now.
> >>>>>
> >>>>> Thank you very much!
> >>>>>
> >>>>> Regards.
> >>>>>>> Am 03.07.2023 um 15:49 schrieb Mark Struberg
> >>> <strub...@yahoo.de.INVALID>:
> >>>>>>>
> >>>>>>> Hi Francesco!
> >>>>>>>
> >>>>>>> Can you see which one of the classes fail to enhance?
> >>>>>>>
> >>>>>>> In which case you might try to run the enhancement of that very
> class
> >>> manually in your IDE.
> >>>>>>>
> >>>>>>> Main class: org.apache.openjpa.enhance.PCEnhancer
> >>>>>>> VMOptions:: -ea
> >>>
> -Dopenjpa.ConnectionURL=jdbc:derby:target/database/openjpa-derby-database;create=true
> >>> -Dopenjpa.ConnectionDriverName=org.apache.derby.jdbc.EmbeddedDriver
> >>>>>>> or something similar for your connection
> >>>>>>>
> >>>>>>> Then you also need the parameter pointing to the class file which
> you
> >>> want to enhance, e.g.
> >>>>>>>
> >>>
> target/test-classes/org/apache/openjpa/persistence/proxy/entities/Annuity.class
> >>>>>>>
> >>>>>>> Please keep me updated!
> >>>>>>>
> >>>>>>>
> >>>>>>> LieGrue,
> >>>>>>> strub
> >>>>>>>
> >>>>>>> PS: does it add value if we'd write all this up? You will likely
> know
> >>> most of that stuff, but others who dig into OpenJPA do not.
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>> Am 03.07.2023 um 15:28 schrieb Francesco Chicchiriccò <
> >>> ilgro...@apache.org>:
> >>>>>>>>
> >>>>>>>> Hi Mark,
> >>>>>>>> thanks for your reply.
> >>>>>>>>
> >>>>>>>> So I am proceeding as follows.
> >>>>>>>>
> >>>>>>>> Took the executions at
> >>>>>>>>
> >>>>>>>>
> https://ci-builds.apache.org/job/OpenJPA/job/OpenJPA-master-deploy/
> >>>>>>>>
> >>>>>>>> (the Jenkins job which is publishing SNAPSHOT artifacts from
> master
> >>> to ASF Maven repo) and saw that the artifacts with which the Syncope
> build
> >>> succeeded last Friday are the one from May 16th, so the corresponding
> >>> commit id is
> >>>>>>>>
> >>>>>>>> b238417dabeac935846fe1ce2fef28aafaeef205
> >>>>>>>>
> >>>>>>>> I confirm that building locally from that commit id everything is
> >>> working.
> >>>>>>>>
> >>>>>>>> As soon as I move to next commit (dated May 22nd, pushed and
> >>> deployed today) with id
> >>>>>>>>
> >>>>>>>> b51d003ed98aa7663465aad7c9a1b554b006cc7d
> >>>>>>>>
> >>>>>>>> I see the same behavior as with HEAD, e.g.
> >>>>>>>>
> >>>>>>>> 2b9b024f273d63e479a02cad751c28b8ef974ace
> >>>>>>>>
> >>>>>>>> I will try to take a closer look at the code.
> >>>>>>>> Regards.
> >>>>>>>>
> >>>>>>>> On 03/07/23 14:44, Mark Struberg wrote:
> >>>>>>>>> Hi Francesco!
> >>>>>>>>>
> >>>>>>>>> That's very valuable information!
> >>>>>>>>> Could you please do a git-bisect to find out which change did
> break
> >>> it?
> >>>>>>>>>
> >>>>>>>>> Actually the algorithm to select which classes are to be enhanced
> >>> should not have changed. Thus I'm really curious what I did break.
> >>>>>>>>>
> >>>>>>>>> Most times the amount of enhanced classes are the same but
> slightly
> >>> differ in the generated code. That might be due to now we really
> generate
> >>> Java11++ code whereas before we only generated Java 1.1 code (yes, not
> even
> >>> 1.5!)
> >>>>>>>>>
> >>>>>>>>> What I usually do is to have 2 checkouts. You might want to
> change
> >>> the pom GAV version of the working checkout to something something
> >>> different so you might have both in your ~/.m2/repository in parallel.
> >>>>>>>>>
> >>>>>>>>> The first thing I do is to compare the class files in
> >>> target/classes of both versions with 'compare with clipboard'.
> >>>>>>>>> I just open the class file in target/classes and let
> >>> Intellij/Netbeans do the decompilation for me.
> >>>>>>>>>
> >>>>>>>>> You might find some differences here in which case this needs
> >>> further investigation. Note that the order of the methods might have
> >>> changed.
> >>>>>>>>> Sometimes you will also see some 'cannot decompile' in the code
> >>> block. This happens when something in the bytecode is messed up. You
> can
> >>> also watch out for ClassNotFound or VerifyError, etc.
> >>>>>>>>>
> >>>>>>>>> If this is the case I then use
> >>>>>>>>> $> javap -c -p -constants
> >>> target/classes/com/foo/mycorp/MyBlaEntity.class > MyBlaEntity.decompile
> >>>>>>>>> on both versions and check whether something is different.
> >>>>>>>>> Often it's a wrong offset in the stack calculation (e.g. ALOAD 1
> vs
> >>> ALOAD 2)
> >>>>>>>>>
> >>>>>>>>> Note that the 'old' Java 1.1 bytecode doesn't understand LDC of
> >>> Class constants (LoaD Constant). This was only introduced in Java 1.4
> or
> >>> 1.5 bytecode afair. Before that a dynamic Class.forName was called and
> >>> stored in a static variable. Ugly stuff, and happy to finally get rid
> of
> >>> all those hacks...
> >>>>>>>>>
> >>>>>>>>> Hope that helps to get you started. Feel free to ping me again
> over
> >>> here or at the #apachee ASF slack channel.
> >>>>>>>>>
> >>>>>>>>> txs and LieGrue,
> >>>>>>>>> strub
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>> Am 03.07.2023 um 14:13 schrieb Francesco Chicchiriccò <
> >>> ilgro...@apache.org>:
> >>>>>>>>>>
> >>>>>>>>>> From a very preliminary analysis it seems that just a subset of
> >>> the persistence-capable classes are effectively found and enhanced: now
> >>> [2], it used to be [3].
> >>>>>>>>>>
> >>>>>>>>>> I'll continue investigating.
> >>>>>>>>>>
> >>>>>>>>>> Regards.
> >>>>>>>>>>
> >>>>>>>>>> On 03/07/23 13:56, Francesco Chicchiriccò wrote:
> >>>>>>>>>>> Hi Mark,
> >>>>>>>>>>> the build on Syncope master branch, using OpenJPA
> 4.0.0-SNAPSHOT
> >>> is now failing - it used to work at least until last June 30th.
> >>>>>>>>>>>
> >>>>>>>>>>> The issues seem to be related to entity enhancement, which we
> >>> perform via openjpa-maven-plugin - see [1].
> >>>>>>>>>>>
> >>>>>>>>>>> Is there anything obvious we should be changing?
> >>>>>>>>>>> Meanwhile I'll try to dig to see if I am able to understand
> >>> something more.
> >>>>>>>>>>>
> >>>>>>>>>>> Regards.
> >>>>>>>>>>>
> >>>>>>>>>>> [1]
> >>>
> https://github.com/apache/syncope/blob/master/core/persistence-jpa/pom.xml#L143-L174
> >>>>>>>>>> [2] https://paste.apache.org/gxcm6
> >>>>>>>>>> [3] https://paste.apache.org/1g9k5
> >>>>>>>>>>
> >>>>>>>>>>> On 03/07/23 12:15, Mark Struberg wrote:
> >>>>>>>>>>>> Update: I've now merged the wip to our master and pushed it to
> >>> the ASF gitox repo.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I think we already came pretty far and it looks really
> >>> promising. So there is a high chance that we succeed, although there is
> >>> still plenty of work in front of us.
> >>>>>>>>>>>>
> >>>>>>>>>>>> How it works:
> >>>>>>>>>>>>
> >>>>>>>>>>>> Basically there are 2 sets of information in the PCEnhancer
> >>> right now:
> >>>>>>>>>>>>
> >>>>>>>>>>>> _managed: the BCClass version of the original class
> >>>>>>>>>>>> _pc: the BCClass of the generated/modified class. Might be the
> >>> same as _managed but in case of subclassing or interface case it is
> >>> different. In those cases _managed represents the original class and
> _pc
> >>> the subclass/concrete implementation.
> >>>>>>>>>>>>
> >>>>>>>>>>>> managed and pc are the ASM variants of _managed and _pc.
> >>>>>>>>>>>>
> >>>>>>>>>>>> The main entry point for debugging into it is PCEnhancer#run()
> >>>>>>>>>>>>
> >>>>>>>>>>>> There are a few methods in ASMHelper to update from BCClass ->
> >>> ASM and vice versa:
> >>>>>>>>>>>>
> >>>>>>>>>>>> AsmHelper.readIntoBCClass(pc, _pc);
> >>>>>>>>>>>> takes all the information from the ASM pc, creates a class
> >>> byte[] and reads that back into the existing _pc instance.
> >>>>>>>>>>>>
> >>>>>>>>>>>> pc = AsmHelper.toClassNode(_pc);
> >>>>>>>>>>>> is the corresponding method in the other direction. from
> BCClass
> >>> to ASM.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Right now we have the following methods left to migrate in
> >>> PCEnhancer
> >>>>>>>>>>>> addAttachDetachCode();
> >>>>>>>>>>>> addSerializationCode();
> >>>>>>>>>>>> addCloningCode();
> >>>>>>>>>>>> runAuxiliaryEnhancers();
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'll be off for a week on holidays in Venice.
> >>>>>>>>>>>> If someone want's to join in with the effort then please go
> on!
> >>> You might want to compare the current PCEnhancer code with an older
> version
> >>> to get an idea how it can be done and to see some patterns I've used.
> >>>>>>>>>>>>
> >>>>>>>>>>>> As a quick hint: Java is basically a stack based virtual CPU.
> >>> The 'this' pointer is on position 0 of the stack, so ALOAD 0. After
> that
> >>> comes the parameters. The size of the param on the stack depends on the
> >>> type. Mostly 1, but for long eg 2 positions. So ALOAD 1 is the 1st
> method
> >>> parameter, ALOAD 2 the 2nd (except 1st param was a 2-pos type).
> >>>>>>>>>>>> In case of a static method there is ofc no 'this' on the
> stack,
> >>> so the parameters start with zero offset.
> >>>>>>>>>>>> After all the parameters there are the unnamed 'local'
> >>> variables. I tried to consistently name them xxxVarPos.
> >>>>>>>>>>>> See also the various helper methods in ASMHelper. For example
> >>> for the various LOAD, RETURN, STORE operations which depends based on
> the
> >>> type (ALOAD vs ILOAD vs IALOAD etc)
> >>>>>>>>>>>> Also read the guide to ASM PDF from objectweb.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'll be mostly offline till Sunday, but will try to answer
> mails
> >>> if there are some questions.
> >>>>>>>>>>>>
> >>>>>>>>>>>> txs and LieGrue,
> >>>>>>>>>>>> strub
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Am 19.06.2023 um 17:11 schrieb Matt Pavlovich <
> >>> mattr...@gmail.com>:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> +1 thanks for tackling this, Mark!
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> ASM definitely more widely used going forward.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> -Matt
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Jun 17, 2023, at 3:01 PM, Mark Struberg
> >>> <strub...@yahoo.de.INVALID> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Small update:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I've worked on it over the last few weeks, and I'm getting
> >>> closer
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> https://github.com/struberg/openjpa/tree/fb_asmEnhance
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> contains the latest work on the PCEnhancer. Right in the
> >>> middle of replacing Serp with native ASM code.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Note that I also had to modify a few interfaces with a few
> >>> more to follow from BCClass to ASM ClassNode.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Happy to get some feedback!
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> If anybody wants to help with this effort I'm happy to also
> >>> push this feature branch to our ASF repo. It looks reasonably promising
> >>> already.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> LieGrue,
> >>>>>>>>>>>>>> strub
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Am 25.05.2023 um 18:36 schrieb Mark Struberg
> >>> <strub...@yahoo.de.INVALID>:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Hi!
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Right now I'm trying to get rid of serp step by step.
> >>>>>>>>>>>>>>> The code is right now at my own github repo in the
> >>> fb_asmEnhance branch:
> >>>>>>>>>>>>>>> https://github.com/struberg/openjpa/tree/fb_asmEnhance
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> The approach I took for now is to create a few methods in
> >>> AsmHelper to be able to move from BCClass -> ASM ClassWriter and the
> other
> >>> way around. That way we should be able to replace functionality part by
> >>> part but still keep all things afloat.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> For now I've started with the PCSubclassValidator.
> >>>>>>>>>>>>>>> Right now this evaluates the attributs using Serp plus ASM
> >>> and then compare the results.
> >>>>>>>>>>>>>>> If something is fishy, you'll see the following
> >>>>>>>>>>>>>>> throw new IllegalStateException("MSX ASMTODO " + bcField +
> "
> >>> " + field);
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> It would be extremely helpful, if you could go through your
> >>> projects and let it run and report how it's going.
> >>>>>>>>>>>>>>> If you see that "MSX ASMTODO" somewhere then we know I
> messed
> >>> something up.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I'll gonna finally remove the BCClass handling from those
> >>> parts in a few days. Current commit is
> >>>>>>>>>>>>>>>
> >>>
> https://github.com/struberg/openjpa/commit/3ea2412003028d37f2a69971a47bb20abf589f8b
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> txs and LieGrue,
> >>>>>>>>>>>>>>> strub
> >>>>>
> >>>>
> >>>> --
> >>>> Francesco Chicchiriccò
> >>>>
> >>>> Tirasa - Open Source Excellence
> >>>> http://www.tirasa.net/
> >>>>
> >>>> Member at The Apache Software Foundation
> >>>> Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail
> >>>> http://home.apache.org/~ilgrosso/
> >>>>
> >>>
> >>>
> >
>
>

Reply via email to