You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by "gchauvet@zatarox.com" <gc...@zatarox.com> on 2015/06/21 10:20:41 UTC

OpenEJB/OpenJPA: Entity cannot be cast to Number

Hi,

I use OpenEJB for my unitary tests, and I'm facing to an exception, with the
following stack trace :

FailedObject: com.zatarox.rageweak.model.Summoner@df4ab [java.lang.String]
	at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3515)
	at
org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1213)
	at
org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:877)
	at
org.apache.openejb.persistence.JtaEntityManager.merge(JtaEntityManager.java:159)
	at
com.zatarox.rageweak.backend.ParticipantSessionBean.find(ParticipantSessionBean.java:70)
	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:497)
	at
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
	at
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
	at
org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181)
	at
org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100)
	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:497)
	at
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
	at
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
	at
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
	at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227)
	at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
	at
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:322)
	at
com.zatarox.rageweak.backend.ParticipantSessionBean$$LocalBeanProxy.find(com/zatarox/rageweak/backend/ParticipantSessionBean.java)
	at
com.zatarox.rageweak.backend.ParticipantSessionTest.getParticipant(ParticipantSessionTest.java:35)
	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:497)
	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)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
	at
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
	at
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
	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:497)
	at
org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
	at
org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
	at
org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
	at
org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
Caused by: java.lang.ClassCastException: com.zatarox.rageweak.model.Platform
cannot be cast to java.lang.Number
	at
org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.fetchShortField(ApplicationIds.java:660)
	at
org.apache.openjpa.enhance.com$zatarox$rageweak$model$Summoner$pcsubclass.pcCopyKeyFieldsToObjectId(Unknown
Source)
	at
org.apache.openjpa.enhance.PCRegistry.copyKeyFieldsToObjectId(PCRegistry.java:169)
	at
org.apache.openjpa.util.ApplicationIds.fromPKValues(ApplicationIds.java:223)
	at
org.apache.openjpa.enhance.ReflectingPersistenceCapable.pcNewObjectIdInstance(ReflectingPersistenceCapable.java:277)
	at org.apache.openjpa.util.ApplicationIds.create(ApplicationIds.java:426)
	at org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4624)
	at org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4597)
	at
org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:83)
	at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:252)
	at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:105)
	at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3508)
	... 58 more



The two classes pointed in the exception are defined like this:
Summoner.java :
=====================
@IdClass(Summoner.SummonerId.class)
public class Summoner implements Serializable {

    private static final long serialVersionUID = 0L;

    public static class SummonerId implements Serializable {

        private static final long serialVersionUID = 0L;

        private long id;
        private short platform;

        public SummonerId() {
        }

        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        public short getPlatform() {
            return platform;
        }

        public void setPlatform(short platform) {
            this.platform = platform;
        }

        @Override
        public int hashCode() {
            int result = 0;
            if(id > 0) {
                result ^= ((Long)id).hashCode();
            }
            if(platform > 0) {
                result ^= ((Short)platform).hashCode();
            }
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            }
            if (getClass() != obj.getClass()) {
                return false;
            }
            final SummonerId other = (SummonerId) obj;
            if (this.id != other.id) {
                return false;
            }
            if (this.platform != other.platform) {
                return false;
            }
            return true;
        }
        
    };

    public static final String FIND_PARTICIPANTS = "SUMMONERS.FIND.SUBSET";

    @Id
    @Column(name = "id")
    private long id;
    @Id
    @ManyToOne(optional = false, cascade = {CascadeType.DETACH,
CascadeType.PERSIST, CascadeType.REFRESH})
    @JoinColumn(name = "platform_id")
    private Platform platform;

/** getters/setters & other stuff**/
}

Platform.java:
=====================
public class Platform implements Serializable {
    private static final long serialVersionUID = 0L;
    
    public static final String FIND_BY_REGION = "PLATFORM.FIND.REGION";
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private short id;
    @Column(updatable = false, unique = true)
    private String name;
    @Column(updatable = false, unique = true)
    private String region;

/** getters/setters & other stuff**/
}

Note: I've wrotten a small unitary UT with JPA only, mapping seems good, and
i've no exception.



--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/OpenEJB-OpenJPA-Entity-cannot-be-cast-to-Number-tp4675369.html
Sent from the TomEE Users mailing list archive at Nabble.com.

Re: OpenEJB/OpenJPA: Entity cannot be cast to Number

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi

Think updating nonfinal openjpa to final version (now released) should
solve it
Le 21 juin 2015 13:42, "gchauvet" <gc...@zatarox.com> a écrit :

> Hi,
>
> My test environment :
> ===================
> Maven 3.0
> OpenEJB 4.7.2
> JUnit 4.12
>
> My OpenJPA entity test environment:
> ===================
> Maven 3.0
> OpenJPA 2.4.0
> JUnit 4.12
>
> It's seems like OpenJPA don't understand how to map my composite primary
> key
> through OpenEJB
>
>
>
> --
> View this message in context:
> http://tomee-openejb.979440.n4.nabble.com/OpenEJB-OpenJPA-Entity-cannot-be-cast-to-Number-tp4675369p4675371.html
> Sent from the TomEE Users mailing list archive at Nabble.com.
>

Re: OpenEJB/OpenJPA: Entity cannot be cast to Number

Posted by gchauvet <gc...@zatarox.com>.
Hi,

My test environment :
===================
Maven 3.0
OpenEJB 4.7.2
JUnit 4.12

My OpenJPA entity test environment:
===================
Maven 3.0
OpenJPA 2.4.0
JUnit 4.12

It's seems like OpenJPA don't understand how to map my composite primary key
through OpenEJB



--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/OpenEJB-OpenJPA-Entity-cannot-be-cast-to-Number-tp4675369p4675371.html
Sent from the TomEE Users mailing list archive at Nabble.com.

Re: OpenEJB/OpenJPA: Entity cannot be cast to Number

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi

Which versions for both tests?
Le 21 juin 2015 10:42, "gchauvet@zatarox.com" <gc...@zatarox.com> a
écrit :

> Hi,
>
> I use OpenEJB for my unitary tests, and I'm facing to an exception, with
> the
> following stack trace :
>
> FailedObject: com.zatarox.rageweak.model.Summoner@df4ab [java.lang.String]
>         at
> org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3515)
>         at
>
> org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1213)
>         at
>
> org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:877)
>         at
>
> org.apache.openejb.persistence.JtaEntityManager.merge(JtaEntityManager.java:159)
>         at
>
> com.zatarox.rageweak.backend.ParticipantSessionBean.find(ParticipantSessionBean.java:70)
>         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:497)
>         at
>
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
>         at
>
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
>         at
>
> org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181)
>         at
>
> org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100)
>         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:497)
>         at
>
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
>         at
>
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
>         at
>
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
>         at
>
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227)
>         at
>
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194)
>         at
>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308)
>         at
>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303)
>         at
>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
>         at
>
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:322)
>         at
>
> com.zatarox.rageweak.backend.ParticipantSessionBean$$LocalBeanProxy.find(com/zatarox/rageweak/backend/ParticipantSessionBean.java)
>         at
>
> com.zatarox.rageweak.backend.ParticipantSessionTest.getParticipant(ParticipantSessionTest.java:35)
>         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:497)
>         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)
>         at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>         at
>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
>         at
>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
>         at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>         at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>         at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>         at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>         at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>         at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>         at
>
> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
>         at
>
> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
>         at
>
> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
>         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:497)
>         at
>
> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
>         at
>
> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
>         at
>
> org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
>         at
>
> org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
>         at
> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
> Caused by: java.lang.ClassCastException:
> com.zatarox.rageweak.model.Platform
> cannot be cast to java.lang.Number
>         at
>
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.fetchShortField(ApplicationIds.java:660)
>         at
> org.apache.openjpa.enhance.com
> $zatarox$rageweak$model$Summoner$pcsubclass.pcCopyKeyFieldsToObjectId(Unknown
> Source)
>         at
>
> org.apache.openjpa.enhance.PCRegistry.copyKeyFieldsToObjectId(PCRegistry.java:169)
>         at
>
> org.apache.openjpa.util.ApplicationIds.fromPKValues(ApplicationIds.java:223)
>         at
>
> org.apache.openjpa.enhance.ReflectingPersistenceCapable.pcNewObjectIdInstance(ReflectingPersistenceCapable.java:277)
>         at
> org.apache.openjpa.util.ApplicationIds.create(ApplicationIds.java:426)
>         at
> org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4624)
>         at
> org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4597)
>         at
>
> org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:83)
>         at
> org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:252)
>         at
> org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:105)
>         at
> org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3508)
>         ... 58 more
>
>
>
> The two classes pointed in the exception are defined like this:
> Summoner.java :
> =====================
> @IdClass(Summoner.SummonerId.class)
> public class Summoner implements Serializable {
>
>     private static final long serialVersionUID = 0L;
>
>     public static class SummonerId implements Serializable {
>
>         private static final long serialVersionUID = 0L;
>
>         private long id;
>         private short platform;
>
>         public SummonerId() {
>         }
>
>         public long getId() {
>             return id;
>         }
>
>         public void setId(long id) {
>             this.id = id;
>         }
>
>         public short getPlatform() {
>             return platform;
>         }
>
>         public void setPlatform(short platform) {
>             this.platform = platform;
>         }
>
>         @Override
>         public int hashCode() {
>             int result = 0;
>             if(id > 0) {
>                 result ^= ((Long)id).hashCode();
>             }
>             if(platform > 0) {
>                 result ^= ((Short)platform).hashCode();
>             }
>             return result;
>         }
>
>         @Override
>         public boolean equals(Object obj) {
>             if (obj == null) {
>                 return false;
>             }
>             if (getClass() != obj.getClass()) {
>                 return false;
>             }
>             final SummonerId other = (SummonerId) obj;
>             if (this.id != other.id) {
>                 return false;
>             }
>             if (this.platform != other.platform) {
>                 return false;
>             }
>             return true;
>         }
>
>     };
>
>     public static final String FIND_PARTICIPANTS = "SUMMONERS.FIND.SUBSET";
>
>     @Id
>     @Column(name = "id")
>     private long id;
>     @Id
>     @ManyToOne(optional = false, cascade = {CascadeType.DETACH,
> CascadeType.PERSIST, CascadeType.REFRESH})
>     @JoinColumn(name = "platform_id")
>     private Platform platform;
>
> /** getters/setters & other stuff**/
> }
>
> Platform.java:
> =====================
> public class Platform implements Serializable {
>     private static final long serialVersionUID = 0L;
>
>     public static final String FIND_BY_REGION = "PLATFORM.FIND.REGION";
>
>     @Id
>     @GeneratedValue(strategy = GenerationType.AUTO)
>     private short id;
>     @Column(updatable = false, unique = true)
>     private String name;
>     @Column(updatable = false, unique = true)
>     private String region;
>
> /** getters/setters & other stuff**/
> }
>
> Note: I've wrotten a small unitary UT with JPA only, mapping seems good,
> and
> i've no exception.
>
>
>
> --
> View this message in context:
> http://tomee-openejb.979440.n4.nabble.com/OpenEJB-OpenJPA-Entity-cannot-be-cast-to-Number-tp4675369.html
> Sent from the TomEE Users mailing list archive at Nabble.com.
>