incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joe Greenawalt <joe.greenaw...@gmail.com>
Subject Astyanax javax.persistence.PersistenceException: failed to construct entity
Date Fri, 14 Jun 2013 22:39:50 GMT
Hi trying to use Astyanax Entity persister.
https://github.com/Netflix/astyanax/wiki/Entity-persister

Playing around, so this is all in a JUnit test.

Everything seems to work, except when getting the object by id with
.get(id).  Looks like it fails when trying to create the object to map it
back to.

*
**        @Entity*
*        class User {*

*            @Id*
*            private String id = UUID.randomUUID().toString();*

*            @Column(name = "firstName")*
*            private String firstName = "Joe";*
*            @Column(name = "lastName")*
*            private String lastName = "Greenawalt";*

*            @Column(name="age")*
*            private int age;*

*            @Column(name = "phone_numbers")*
*            Map<String, String> phoneNumbers;*

*          public User(){*
*                phoneNumbers = new HashMap<String, String>();*

*                phoneNumbers.put("home", "338-229-4493");*
*                phoneNumbers.put("work", "757-229-4493");*

*            }*

*         .....removing setters and getters....
**



        }

        AstyanaxContext<Keyspace> context = new
AstyanaxContext.Builder().withAstyanaxConfiguration(new
AstyanaxConfigurationImpl()
                .setCqlVersion("3.0.0")
                .setTargetCassandraVersion("1.2")
        )
                //.forCluster("ClusterName")
                .forKeyspace(KEYSPACE_NAME)
                .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
                        .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
                )
                .withConnectionPoolConfiguration(new
ConnectionPoolConfigurationImpl("MyConnectionPool")
                        .setPort(9160)
                        .setMaxConnsPerHost(1)
                        .setSeeds("127.0.0.1:9160")
                )
                .withConnectionPoolMonitor(new
CountingConnectionPoolMonitor())
                .buildKeyspace(ThriftFamilyFactory.getInstance());

        context.start();
        Keyspace keyspace = context.getClient();

        ColumnFamily<String, String> COLUMN_FAMILY = ColumnFamily
                .newColumnFamily(COLUMN_FAMILY_NAME, StringSerializer.get(),
                        StringSerializer.get());

        try{
            keyspace.dropColumnFamily(COLUMN_FAMILY);

            keyspace.dropKeyspace();
        } catch (Exception e){
            System.out.println("SWALLOWING NON EXISTENT DROP");
        }

        keyspace.createKeyspace(ImmutableMap.<String, Object>builder()
                .put("strategy_options", ImmutableMap.<String,
Object>builder()
                        .put("replication_factor", "1")
                        .build())
                .put("strategy_class", "SimpleStrategy")
                .build()
        );

        assertNotNull(keyspace);




        keyspace.createColumnFamily(COLUMN_FAMILY, null);

        assertNotNull(COLUMN_FAMILY);

        EntityManager<User, String> entityManager =
                new DefaultEntityManager.Builder<User, String>()
                        .withEntityType(User.class)
                        .withKeyspace(keyspace)
                        .withColumnFamily(COLUMN_FAMILY)
                        .withTTL(3600)  // 1 hour
                        .build();

        User user = new User();

        String getUserId = user.getId();

        user.setFirstName("JOHNNY");

        entityManager.put(user);

        user.setAge(40);

        entityManager.put(user);


        User newUser = new User();

        newUser.setAge(2);

        entityManager.put(newUser);

        ColumnList<String> cl =
keyspace.prepareQuery(COLUMN_FAMILY).getKey(getUserId).execute().getResult();

        Assert.assertEquals(5, cl.size());
        Assert.assertEquals(user.getFirstName(),
cl.getColumnByName("firstName").getStringValue());

        User fetchedUser = entityManager.get(getUserId);

        assertNotNull(newUser);

        assertEquals(user, fetchedUser);


**I get the following error: *

*javax.persistence.PersistenceException: failed to get entity
f33605bb-d748-447f-946c-10929753ce4d*
*    at
com.netflix.astyanax.entitystore.DefaultEntityManager.get(DefaultEntityManager.java:227)
*
*    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)*
*    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
*
*    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
*
*    at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
*
*    at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
*
*    at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
*
*    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.runners.ParentRunner.runLeaf(ParentRunner.java:271)*
*    at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
*
*    at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
*
*    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)*
*    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)*
*    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)*
*    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)*
*    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)*
*    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)*
*    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)*
*    at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77)
*
*    at
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
*
*    at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)*
*    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)*
*    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
*
*    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
*
*Caused by: javax.persistence.PersistenceException: failed to construct
entity*
*    at
com.netflix.astyanax.entitystore.EntityMapper.constructEntity(EntityMapper.java:162)
*
*    at
com.netflix.astyanax.entitystore.DefaultEntityManager.get(DefaultEntityManager.java:223)
*
*    ... 28 more*
*Caused by: java.lang.InstantiationException:
me.bagz.scratch.ConnectAndCreateTest$1User*
*    at java.lang.Class.newInstance0(Class.java:359)*
*    at java.lang.Class.newInstance(Class.java:327)*
*    at
com.netflix.astyanax.entitystore.EntityMapper.constructEntity(EntityMapper.java:149)
*
*    ... 29 more*

However, the object gets stored and I can get it with the low level API and
the tests prove it.  Pretty new to this library and cassandra, so I
certainly could be doing something wrong, but I was following the wiki, and
also reading the test here:
https://github.com/Netflix/astyanax/blob/master/astyanax-entity-mapper/src/test/java/com/netflix/astyanax/entitystore/DefaultEntityManagerTest.java
(LINE 234).

Any help appreciated.

Thanks,
Joe

Mime
View raw message