Hi Jiri,

I can see several issues in your assembly.

First, there are three MemoryEntityStore assembled in your infrastructure layer:
- in your config module, with module visibility
- in your indexing module, with application visibility
- in your entitystore module, with application visibility

You should remove the one from your indexing module.
See the "Defining an Entity Store" section in http://qi4j.org/core-bootstrap-assembly.html
Take special attention to the Configuration state storage.

EntityStores notify each visible indexing of entities state changes. ConfigurationComposites are entities. You must ensure the EntityStore you use to store configuration cannot see the indexing service.
Having too much EntityStores assembled is not a good idea.


Second, you can remove the two objects declaration at the beggining (EntityStateSerializer & EntityTypeSerializer) as they were used by indexing-rdf and are not needed when using indexing-sql.


Third, the endless loop seems to come from the DataSourceConfiguration loading and to take place in EntityStore.newUnitOfWork(..) but at first sight and without a complete test case I can't see why it goes crazy like that.


Could you please follow my advices above to cleanup your assembly a bit and report if it still fail?

Cheers

/Paul



jj a écrit :
Hello,

I wrote a simple application using In-Memory EntityStore and RdfIndexing.
Now I want to
switch over to SQL Index/Store but receive the following exception :

java.lang.IllegalStateException: java.lang.StackOverflowError
        at
org.qi4j.runtime.activation.ActivationDelegate.activate(ActivationDelegate.java:103)
        at
org.qi4j.runtime.activation.ActivationDelegate.activate(ActivationDelegate.java:56)
        at
org.qi4j.runtime.service.ServicesInstance.activate(ServicesInstance.java:57)
        at
org.qi4j.runtime.activation.ActivationDelegate.activate(ActivationDelegate.java:78)
        at
org.qi4j.runtime.activation.ActivationDelegate.activate(ActivationDelegate.java:56)
        at
org.qi4j.runtime.structure.ModuleInstance.activate(ModuleInstance.java:281)
        at
org.qi4j.runtime.activation.ActivationDelegate.activate(ActivationDelegate.java:78)
        at
org.qi4j.runtime.activation.ActivationDelegate.activate(ActivationDelegate.java:56)
        at
org.qi4j.runtime.structure.LayerInstance.activate(LayerInstance.java:175)
        at
org.qi4j.runtime.activation.ActivationDelegate.activate(ActivationDelegate.java:78)
        at
org.qi4j.runtime.activation.ActivationDelegate.activate(ActivationDelegate.java:56)
        at
org.qi4j.runtime.structure.ApplicationInstance.activate(ApplicationInstance.java:121)
        at
com.somepackage.qi4j.application.abc.bootstrap.AbcApplication.createApplication(AbcApplication.java:63)
        at com.somepackage.qi4j.application.abc.Main.setUp(Main.java:15)
        at com.somepackage.qi4j.application.abc.Main.main(Main.java:47)
Caused by: java.lang.StackOverflowError
        at java.lang.Long.valueOf(Long.java:554)
        at $Proxy36.newUnitOfWork(Unknown Source)
        at
org.qi4j.spi.entitystore.ConcurrentModificationCheckConcern.newUnitOfWork(ConcurrentModificationCheckConcern.java:49)
        at
org.qi4j.entitystore.memory.MemoryEntityStoreService.newUnitOfWork(Unknown
Source)
        at
org.qi4j.library.sql.datasource.AbstractDataSourceServiceImporterMixin.getConfiguration(AbstractDataSourceServiceImporterMixin.java:130)
        at
org.qi4j.library.sql.datasource.AbstractDataSourceServiceImporterMixin.importService(AbstractDataSourceServiceImporterMixin.java:77)
        at
org.qi4j.library.sql.datasource.AbstractDataSourceServiceImporterMixin.importService(AbstractDataSourceServiceImporterMixin.java:1)
        at
org.qi4j.library.sql.dbcp.DBCPDataSourceServiceImporter.importService(Unknown
Source)
        at
org.qi4j.api.service.importer.ServiceInstanceImporter.importService(ServiceInstanceImporter.java:48)
        at $Proxy22.notifyChanges(Unknown Source)
        at
org.qi4j.spi.entitystore.StateChangeNotificationConcern$1.commit(StateChangeNotificationConcern.java:42)
        at
org.qi4j.spi.entitystore.ConcurrentModificationCheckConcern$ConcurrentCheckingEntityStoreUnitOfWork$1.commit(ConcurrentModificationCheckConcern.java:103)
        at
org.qi4j.library.sql.datasource.AbstractDataSourceServiceImporterMixin.getConfiguration(AbstractDataSourceServiceImporterMixin.java:154)
        at
org.qi4j.library.sql.datasource.AbstractDataSourceServiceImporterMixin.importService(AbstractDataSourceServiceImporterMixin.java:77)
        at
org.qi4j.library.sql.datasource.AbstractDataSourceServiceImporterMixin.importService(AbstractDataSourceServiceImporterMixin.java:1)
        at
org.qi4j.library.sql.dbcp.DBCPDataSourceServiceImporter.importService(Unknown
Source)
        at
org.qi4j.api.service.importer.ServiceInstanceImporter.importService(ServiceInstanceImporter.java:48)
        at $Proxy22.notifyChanges(Unknown Source)

Looks like as a endless loop, but I;m not able to figure out the reason.
Here also the assembly code
that produce the above exception.

     private void assembleInfrastructureLayer( LayerAssembly
infrastructureLayer )
             throws AssemblyException
         {
        
            // 1.) SQL Indexing
             ModuleAssembly indexingModule = infrastructureLayer.module(
"INFRASTRUCTURE-Indexing" );
             indexingModule
                 .objects(
                     EntityStateSerializer.class,
                     EntityTypeSerializer.class );


             ModuleAssembly config = indexingModule.layer().module( "config"
);
             config.services( MemoryEntityStoreService.class ).visibleIn(
Visibility.module );

             // EntityStore
             indexingModule.services( MemoryEntityStoreService.class,
UuidIdentityGeneratorService.class ).visibleIn( Visibility.application );

             // DataSourceService + Index/Query's DataSource
             new DBCPDataSourceServiceAssembler(
"datasource-service-postgres",
                                                 Visibility.module,
                                                 config,
                                                 Visibility.layer ).assemble(
indexingModule );
             DataSourceAssembler dsAssembler = new DataSourceAssembler(
"datasource-service-postgres",

"datasource-postgres",

Visibility.module,

DataSources.newDataSourceCircuitBreaker() );

             // Index/Query
             new PostgreSQLAssembler( Visibility.application, dsAssembler
).assemble( indexingModule );
             config.entities( SQLConfiguration.class ).visibleIn(
Visibility.layer );

             // Always re-index because of possible different app structure
of multiple tests.
             indexingModule.services(
ReindexingStrategy.ReindexingStrategyService.class ).withMixins(
ReindexingStrategy.AlwaysNeed.class ).identifiedBy( "reindexer" );
             config.entities( ReindexerConfiguration.class ).visibleIn(
Visibility.layer );

             // 2.) In-memory Entity Store
             ModuleAssembly entityStoreModule = infrastructureLayer.module(
"INFRASTRUCTURE-EntityStore" );
             entityStoreModule
                 .services(
                     MemoryEntityStoreService.class,
                     UuidIdentityGeneratorService.class )
                 .instantiateOnStartup()
                 .visibleIn( application );

         }


I try already many combinations - without success. Would be great if one of
you guys
can give me an idea what is wrong with my code.

Thanks,

Cheers,
Jiri




--
View this message in context: 
http://qi4j-dev.23929.n6.nabble.com/SQL-Indexing-SQL-EntityStore-tp7140.html
Sent from the Qi4j-dev mailing list archive at Nabble.com.

_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev
_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev

Reply via email to