>Ok, that looks good.

>Are you using JUnit (like AbstractQi4jTest) to run your code? And if
>so, do you have the "create" and "lookup" in separate methods?
>That would be explain it, since these stores (and indexing) will drop
>the result between tests.

>Cheers
>Niclas

Yes, I use AbstractQi4jTest but I use this methods in one test.


That the full code:


public class CompanyServiceTest extends AbstractQi4jTest
{
    private CompanyService companyService;

    @Before
    public void setUp() throws Exception
    {
        super.setUp();
        final ServiceReference<CompanyService> service =
serviceLocator.findService(CompanyService.class);
        companyService = service.get();
    }

    @Test
    public void createCompany()
    {
        companyService.addCompany("Company 1");
    }

    @Test
    public void findCompanies()
    {
        companyService.addCompany("Company 1");
        companyService.addCompany("Company 2");
        Assert.assertEquals(2,companyService.findAll().count());
    }

    @Override
    public void assemble(ModuleAssembly module) throws AssemblyException
    {
        new RdfMemoryStoreAssembler().assemble(module);

        // Entity store
        module.addServices( MemoryEntityStoreService.class,
UuidIdentityGeneratorService.class )
            .visibleIn(Visibility.application )
            .instantiateOnStartup();


        module.addEntities(Company.class);
        module.addServices(
                CompanyService.class);

    }
}


And the service code(without clean up. Also I guess uow.complete is
unnecessary in the findAll, but I tried different variants):

@Mixins(CompanyService.CompanyServiceMixin.class)
public interface CompanyService extends ServiceComposite
{
    void addCompany(String name);

    Query<Company> findAll();

    @Concerns(UnitOfWorkConcern.class)
    abstract class CompanyServiceMixin implements CompanyService
    {
        private final UnitOfWorkFactory unitOfWorkFactory;

        private final QueryBuilderFactory qbf;

        public CompanyServiceMixin(@Structure UnitOfWorkFactory
unitOfWorkFactory, @Structure QueryBuilderFactory qbf)
        {
            this.unitOfWorkFactory = unitOfWorkFactory;
            this.qbf = qbf;
        }

        @UnitOfWorkPropagation
        @Override
        public void addCompany(String name)
        {
            final UnitOfWork uow = unitOfWorkFactory.newUnitOfWork();
            try
            {
                final EntityBuilder<Company> builder =
uow.newEntityBuilder(Company.class);
                final Company prototype = builder.instance();
                prototype.name().set(name);

                final Company company = builder.instance();
                uow.complete();
            }
            catch (Exception e)
            {
                uow.discard();
            }
        }

        @UnitOfWorkPropagation
        @Override
        public Query<Company> findAll()
        {
            final UnitOfWork uow = unitOfWorkFactory.newUnitOfWork();
            try{
                final Query<Company> companies =
qbf.newQueryBuilder(Company.class).newQuery(uow);

while(qbf.newQueryBuilder(Company.class).newQuery(uow).iterator().hasNext())
                {

System.out.println(qbf.newQueryBuilder(Company.class).newQuery(uow).iterator().next().name());
                }
                uow.complete();
                return companies;
            }catch (Exception e)
            {

            }
            return null;
        }
    }
}


Best regards,


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

Reply via email to