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?
Will take a look at it now.

LieGrue
strub


> 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