Still having problems getting cross-store persistence working with Roo after including the dependency on the spring-data mongo build snapshot (spring-data-mongodb-80aa057) while using roo build snapshot (spring-roo-51be0cd)
My JPA entity looks like this,
Code:
@RooJavaBean
@RooToString
@RooDisplayString
@RooJpaActiveRecord
public class JpaEntity {
private String name;
@RelatedDocument
private MongoEntity mongoEntity;
}
My Mongo entity
Code:
@RooJavaBean
@RooToString
@RooMongoEntity
@RooDisplayString
public class MongoEntity {
private String name;
}
My mongo context
Code:
<mongo:db-factory host="${mongo.host}" id="mongoDbFactory"
port="${mongo.port}" />
<mongo:repositories base-package="com.test" />
<!-- To translate any MongoExceptions thrown in @Repository annotated classes -->
<context:annotation-config />
<bean class="org.springframework.data.mongodb.core.MongoTemplate"
id="mongoTemplate">
<constructor-arg ref="mongoDbFactory" />
</bean>
<bean class="org.springframework.data.mongodb.core.MongoExceptionTranslator" />
<!-- Mongo cross-store aspect config -->
<bean id="mongoChangeSetPersister"
class="org.springframework.data.mongodb.crossstore.MongoChangeSetPersister">
<property name="mongoTemplate" ref="mongoTemplate" />
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean
class="org.springframework.data.mongodb.crossstore.MongoDocumentBacking"
factory-method="aspectOf">
<property name="changeSetPersister" ref="mongoChangeSetPersister" />
</bean>
</beans>
My test code:
Code:
MongoEntity me = new MongoEntity();
me.setName("me");
meRepo.save(me);
JpaEntity je = new JpaEntity();
je.setName("je");
je.setMongoEntity(me);
je.persist();
List<MongoEntity> meList = meRepo.findAll();
List<JpaEntity> jpas = JpaEntity.findAllJpaEntitys();
JpaEntity jpae = jpas.get(0);
// this fails, see stacktrace
MongoEntity mongo = jpae.getMongoEntity();
String name = mongo.getName();
Both entities persist properly, but when retrieving the JPA entity I get a stack overflow
Code:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.StackOverflowError
at java.lang.Long.toString(Long.java:97)
at java.lang.String.valueOf(String.java:2945)
at java.lang.Long.toString(Long.java:740)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at com.test.domain.JpaEntity_Roo_ToString.ajc$interMethod$com_test_domain_JpaEntity_Roo_ToString$com_test_domain_JpaEntity$toString(JpaEntity_Roo_ToString.aj:10)
at com.test.domain.JpaEntity.toString(JpaEntity.java:1)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at org.springframework.data.mongodb.crossstore.MongoChangeSetPersister.getPersistentId(MongoChangeSetPersister.java:108)
at org.springframework.data.mongodb.crossstore.MongoDocumentBacking.ajc$interMethod$org_springframework_data_mongodb_crossstore_MongoDocumentBacking$org_springframework_data_mongodb_crossstore_DocumentBacked$get_persistent_id(MongoDocumentBacking.aj:198)
at com.test.domain.JpaEntity.get_persistent_id(JpaEntity.java:1)
at org.springframework.data.mongodb.crossstore.MongoDocumentBacking.ajc$interMethodDispatch1$org_springframework_data_mongodb_crossstore_MongoDocumentBacking$org_springframework_data_mongodb_crossstore_DocumentBacked$get_persistent_id(MongoDocumentBacking.aj)
at com.test.domain.JpaEntity_Roo_JavaBean.mongoEntity_aroundBody1$advice(JpaEntity_Roo_JavaBean.aj:245)
at com.test.domain.JpaEntity_Roo_JavaBean.ajc$interMethod$com_test_domain_JpaEntity_Roo_JavaBean$com_test_domain_JpaEntity$getMongoEntity(JpaEntity_Roo_JavaBean.aj:19)
at com.test.domain.JpaEntity.getMongoEntity(JpaEntity.java:1)
at com.test.domain.JpaEntity_Roo_JavaBean.ajc$interMethodDispatch1$com_test_domain_JpaEntity_Roo_JavaBean$com_test_domain_JpaEntity$getMongoEntity(JpaEntity_Roo_JavaBean.aj)
at com.test.domain.JpaEntity_Roo_ToString.ajc$interMethod$com_test_domain_JpaEntity_Roo_ToString$com_test_domain_JpaEntity$toString(JpaEntity_Roo_ToString.aj:11)
at com.test.domain.JpaEntity.toString(JpaEntity.java:1)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at org.springframework.data.mongodb.crossstore.MongoChangeSetPersister.getPersistentId(MongoChangeSetPersister.java:108)
at org.springframework.data.mongodb.crossstore.MongoDocumentBacking.ajc$interMethod$org_springframework_data_mongodb_crossstore_MongoDocumentBacking$org_springframework_data_mongodb_crossstore_DocumentBacked$get_persistent_id(MongoDocumentBacking.aj:198)
at com.test.domain.JpaEntity.get_persistent_id(JpaEntity.java:1)
at org.springframework.data.mongodb.crossstore.MongoDocumentBacking.ajc$interMethodDispatch1$org_springframework_data_mongodb_crossstore_MongoDocumentBacking$org_springframework_data_mongodb_crossstore_DocumentBacked$get_persistent_id(MongoDocumentBacking.aj)
at com.test.domain.JpaEntity_Roo_JavaBean.mongoEntity_aroundBody1$advice(JpaEntity_Roo_JavaBean.aj:245)
at com.test.domain.JpaEntity_Roo_JavaBean.ajc$interMethod$com_test_domain_JpaEntity_Roo_JavaBean$com_test_domain_JpaEntity$getMongoEntity(JpaEntity_Roo_JavaBean.aj:19)
at com.test.domain.JpaEntity.getMongoEntity(JpaEntity.java:1)
at com.test.domain.JpaEntity_Roo_JavaBean.ajc$interMethodDispatch1$com_test_domain_JpaEntity_Roo_JavaBean$com_test_domain_JpaEntity$getMongoEntity(JpaEntity_Roo_JavaBean.aj)
at com.test.domain.JpaEntity_Roo_ToString.ajc$interMethod$com_test_domain_JpaEntity_Roo_ToString$com_test_domain_JpaEntity$toString(JpaEntity_Roo_ToString.aj:11)
at com.test.domain.JpaEntity.toString(JpaEntity.java:1)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at org.springframework.data.mongodb.crossstore.MongoChangeSetPersister.getPersistentId(MongoChangeSetPersister.java:108)
at org.springframework.data.mongodb.crossstore.MongoDocumentBacking.ajc$interMethod$org_springframework_data_mongodb_crossstore_MongoDocumentBacking$org_springframework_data_mongodb_crossstore_DocumentBacked$get_persistent_id(MongoDocumentBacking.aj:198)
at com.test.domain.JpaEntity.get_persistent_id(JpaEntity.java:1)
at org.springframework.data.mongodb.crossstore.MongoDocumentBacking.ajc$interMethodDispatch1$org_springframework_data_mongodb_crossstore_MongoDocumentBacking$org_springframework_data_mongodb_crossstore_DocumentBacked$get_persistent_id(MongoDocumentBacking.aj)
at com.test.domain.JpaEntity_Roo_JavaBean.mongoEntity_aroundBody1$advice(JpaEntity_Roo_JavaBean.aj:245)
at com.test.domain.JpaEntity_Roo_JavaBean.ajc$interMethod$com_test_domain_JpaEntity_Roo_JavaBean$com_test_domain_JpaEntity$getMongoEntity(JpaEntity_Roo_JavaBean.aj:19)
at com.test.domain.JpaEntity.getMongoEntity(JpaEntity.java:1)
at com.test.domain.JpaEntity_Roo_JavaBean.ajc$interMethodDispatch1$com_test_domain_JpaEntity_Roo_JavaBean$com_test_domain_JpaEntity$getMongoEntity(JpaEntity_Roo_JavaBean.aj)
at com.test.domain.JpaEntity_Roo_ToString.ajc$interMethod$com_test_domain_JpaEntity_Roo_ToString$com_test_domain_JpaEntity$toString(JpaEntity_Roo_ToString.aj:11)
at com.test.domain.JpaEntity.toString(JpaEntity.java:1)
at java.lang.String.valueOf(String.java:2826)
So far, I have not been able to get cross-store persistence working with Roo in either the milestone nor nightly builds. Does anyone else have it working??
thanks,
Mark