polygene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Niclas Hedhman <nic...@hedhman.org>
Subject Re: Non-Accessible Public Method??
Date Wed, 07 Jun 2017 10:00:50 GMT
I am inclined to think it is somehow related to the classloaders. There is
one classloader per mixin type, which doesn't seem right. And I can't
manage to trigger it in a test either, although the code in question is not
that convoluted.

In essence, 2 private Mixins inside a service, and one of them (SqlTable)
also refers to the other (jooqDslContext). Perhaps it really is
classloading issues, and maybe I have just found a breaking case. And the
course of action would be to work around the issue now, and schedule
ClassLoader renovation for 3.1

public class JooqEntityStoreMixin
    implements EntityStore, EntityStoreSPI, ServiceActivation
{

    @This
    private SqlTable sqlTable;

    @This
    private JooqDslContext jooqDslContext;


@Override
public EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork,
ModuleDescriptor module, EntityReference reference )
{
    BaseEntity baseEntity = sqlTable.fetchBaseEntity( reference,
module );  // Problem happens here...



@Mixins( SqlTable.Mixin.class )
public interface SqlTable
{
    BaseEntity fetchBaseEntity( EntityReference reference,
ModuleDescriptor module );


    class Mixin
        implements SqlTable, Initializable, TableFields
    {

        @Structure
        private Application application;

        @Structure
        private ObjectFactory objectFactory;

        @This
        private JooqDslContext dsl;

        @This
        private Configuration<JooqEntityStoreConfiguration> configuration;

        @Uses
        private ServiceDescriptor serviceDescriptor;

        @Service
        private DataSource datasource;

        private Schema schema;

        private SQLDialect dialect;

        private EntitiesTable entitiesTable;
        private TypesTable types;

        @Override
        public BaseEntity fetchBaseEntity( EntityReference reference,
ModuleDescriptor module )
        {
            return entitiesTable.fetchBaseEntity( reference, module );
        }


java.lang.IllegalAccessError: tried to access class
org.apache.polygene.entitystore.jooq.BaseEntity from class
org.apache.polygene.entitystore.jooq.SqlTable_Mixin_Stub
	at org.apache.polygene.entitystore.jooq.SqlTable_Mixin_Stub._fetchBaseEntity(Unknown
Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.polygene.runtime.composite.TypedModifierInvocationHandler.invoke(TypedModifierInvocationHandler.java:37)
	at org.apache.polygene.runtime.composite.CompositeMethodInstance.invoke(CompositeMethodInstance.java:66)
	at org.apache.polygene.runtime.composite.TransientInstance.invoke(TransientInstance.java:124)
	at org.apache.polygene.runtime.composite.CompositeMethodModel.invoke(CompositeMethodModel.java:116)
	at org.apache.polygene.runtime.composite.CompositeMethodsModel.invoke(CompositeMethodsModel.java:119)
	at org.apache.polygene.runtime.composite.CompositeModel.invoke(CompositeModel.java:235)
	at org.apache.polygene.runtime.composite.TransientInstance.invoke(TransientInstance.java:60)
	at com.sun.proxy.$Proxy50.fetchBaseEntity(Unknown Source)
	at org.apache.polygene.entitystore.jooq.JooqEntityStoreMixin.entityStateOf(JooqEntityStoreMixin.java:79)
	at org.apache.polygene.entitystore.jooq.JooqEntityStoreMixin_Stub._entityStateOf(Unknown
Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.polygene.runtime.composite.TypedModifierInvocationHandler.invoke(TypedModifierInvocationHandler.java:37)
	at org.apache.polygene.runtime.composite.CompositeMethodInstance.invoke(CompositeMethodInstance.java:66)
	at org.apache.polygene.runtime.composite.TransientInstance.invoke(TransientInstance.java:124)
	at org.apache.polygene.runtime.composite.CompositeMethodModel.invoke(CompositeMethodModel.java:116)
	at org.apache.polygene.runtime.composite.CompositeMethodsModel.invoke(CompositeMethodsModel.java:119)
	at org.apache.polygene.runtime.composite.CompositeModel.invoke(CompositeModel.java:235)
	at org.apache.polygene.runtime.composite.TransientInstance.invokeComposite(TransientInstance.java:81)
	at org.apache.polygene.entitystore.jooq.JooqEntityStoreMixin_Stub.entityStateOf(Unknown
Source)
	at org.apache.polygene.spi.entitystore.DefaultEntityStoreUnitOfWork.entityStateOf(DefaultEntityStoreUnitOfWork.java:106)

at
org.apache.polygene.spi.entitystore.ConcurrentModificationCheckConcern$ConcurrentCheckingEntityStoreUnitOfWork.entityStateOf(ConcurrentModificationCheckConcern.java:189)
at
org.apache.polygene.runtime.unitofwork.UnitOfWorkInstance.get(UnitOfWorkInstance.java:138)
at
org.apache.polygene.runtime.unitofwork.ModuleUnitOfWork.get(ModuleUnitOfWork.java:301)
at
org.apache.polygene.runtime.unitofwork.ModuleUnitOfWork_Stub._get(Unknown
Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498) at
org.apache.polygene.runtime.composite.TypedModifierInvocationHandler.invoke(TypedModifierInvocationHandler.java:37)
at
org.apache.polygene.runtime.composite.CompositeMethodInstance.invoke(CompositeMethodInstance.java:66)
at
org.apache.polygene.runtime.composite.TransientInstance.invoke(TransientInstance.java:124)
at
org.apache.polygene.runtime.composite.CompositeMethodModel.invoke(CompositeMethodModel.java:116)
at
org.apache.polygene.runtime.composite.CompositeMethodsModel.invoke(CompositeMethodsModel.java:119)
at
org.apache.polygene.runtime.composite.CompositeModel.invoke(CompositeModel.java:235)
at
org.apache.polygene.runtime.composite.TransientInstance.invoke(TransientInstance.java:60)
at com.sun.proxy.$Proxy17.get(Unknown Source) at
org.apache.polygene.test.entity.AbstractEntityStoreTest.givenEntityIsNotModifiedWhenUnitOfWorkCompletesThenDontStoreState(AbstractEntityStoreTest.java:338)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498) at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)


On Wed, Jun 7, 2017 at 5:21 PM, Niclas Hedhman <niclas@hedhman.org> wrote:

> Except!!!!  It is not that... It is something else...
>
> On Wed, Jun 7, 2017 at 3:40 PM, Niclas Hedhman <niclas@hedhman.org> wrote:
>
>> Oh... some more;
>>
>>     PropertyMapper
>>     CompositeAssemblyImpl
>>
>>
>>
>>
>> On Wed, Jun 7, 2017 at 3:38 PM, Niclas Hedhman <niclas@hedhman.org>
>> wrote:
>>
>>> I find it in the following places (note to myself where to fix it later);
>>>
>>>     TransientClassLoader ( 2 places )
>>>     FragmentClassLoader ( 2 places )
>>>     ConstructorsModel (2 places)
>>>     CompositeModel
>>>     CompositeMethodModel
>>>
>>> I also suspect that the "check for public" in AccessibleObjects helper
>>> should just not be done.
>>>
>>>
>>> Since this is happening during startup, I suspect that you had other
>>> reason than performance to make this change. Would like to hear about it.
>>>
>>>
>>> Cheers
>>>
>>>
>>>
>>> On Wed, Jun 7, 2017 at 3:31 PM, Niclas Hedhman <niclas@hedhman.org>
>>> wrote:
>>>
>>>>
>>>> So Paul, in commit 40d8d6de0c4c459d09ffad31110b3057d175536a you
>>>> removed setAccessible(true) in CompositeMethodModel, on the basis that it
>>>> is not needed. After all, the method is from an interface and public by
>>>> default.
>>>>
>>>> But that is for some reason not true.
>>>>
>>>> https://drive.google.com/open?id=0B1oCChgcqYT7RVhvMG1oaHBJQXc
>>>> https://drive.google.com/open?id=0B1oCChgcqYT7YlRDZnRXc2VBcnc
>>>>
>>>>
>>>> and for completeness
>>>>
>>>> public interface SqlTable
>>>> {
>>>>     BaseEntity fetchBaseEntity( EntityReference reference, ModuleDescriptor
module );
>>>>
>>>>
>>>>
>>>> So, I have no idea why a public interface method is not "accessible",
>>>> perhaps it is something new, or something leaking from Java 9.
>>>>
>>>> I am also very concerned that our tests don't catch this. I will try to
>>>> reproduce this for test setting prior to adding the "set accessible" to the
>>>> above place. Additionally, were there any other locations where this was
>>>> changed?
>>>>
>>>>
>>>>
>>>> Cheers
>>>>
>>>> On Wed, Jun 7, 2017 at 3:01 PM, Niclas Hedhman <niclas@hedhman.org>
>>>> wrote:
>>>>
>>>>>
>>>>> Uhhh.... I have just found this particularly interesting situation;
>>>>>
>>>>> https://drive.google.com/file/d/0B1oCChgcqYT7a2N5RktQNWlSQnM/view
>>>>> https://drive.google.com/open?id=0B1oCChgcqYT7aEJSeW9NdFUwaWM
>>>>>
>>>>>
>>>>> The method has "public" modifiers (it is public in the code), but the
>>>>> "isAccessible()" is reporting false.
>>>>>
>>>>> Anybody has any ideas on how this is possible? Is there anywhere we
>>>>> change "accessible" to false?
>>>>>
>>>>> Cheers
>>>>> --
>>>>> Niclas Hedhman, Software Developer
>>>>> http://polygene.apache.org - New Energy for Java
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Niclas Hedhman, Software Developer
>>>> http://polygene.apache.org - New Energy for Java
>>>>
>>>
>>>
>>>
>>> --
>>> Niclas Hedhman, Software Developer
>>> http://polygene.apache.org - New Energy for Java
>>>
>>
>>
>>
>> --
>> Niclas Hedhman, Software Developer
>> http://polygene.apache.org - New Energy for Java
>>
>
>
>
> --
> Niclas Hedhman, Software Developer
> http://polygene.apache.org - New Energy for Java
>



-- 
Niclas Hedhman, Software Developer
http://polygene.apache.org - New Energy for Java

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message