private void loadSchedules() throws UnitOfWorkCompletionException { UnitOfWork uow = module.newUnitOfWork(); try { Schedules schedules = uow.get( Schedules.class, getSchedulesIdentity( me ) ); for( Schedule schedule : schedules.schedules() ) { dispatchForExecution( schedule ); } } catch( NoSuchEntityException e ) { // Create a new Schedules entity for keeping track of them all. uow.newEntity( Schedules.class, getSchedulesIdentity( me ) ); uow.complete(); } finally { if( uow.isOpen() ) { uow.discard(); } } }
DataSourceConfiguration configEntity = uow.get( DataSourceConfiguration.class, identity ); config = entityToValue.convert( DataSourceConfigurationValue.class, configEntity ); } catch ( NoSuchEntityException e ) { EntityBuilder<DataSourceConfiguration> configBuilder = uow.newEntityBuilder( DataSourceConfiguration.class, identity ); PropertyMapper.map( asStream, configBuilder.instance() ); } catch ( IOException e1 ) { uow.discard(); InstantiationException exception = new InstantiationException( "Could not read underlying Properties file." ); exception.initCause( e1 ); uow.complete(); } catch ( UnitOfWorkCompletionException e2 ) { InstantiationException exception = new InstantiationException( "Could not save configuration in JavaPreferences." );
UnitOfWorkApplicationEvents events = unitOfWork.metaInfo( UnitOfWorkApplicationEvents.class ); if( events == null ) unitOfWork.setMetaInfo( events ); unitOfWork.addUnitOfWorkCallback( new UnitOfWorkCallback()
@Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { UnitOfWork unitOfWork = uowf.newUnitOfWork(); try { chain.doFilter( request, response ); if( unitOfWork.isOpen() ) { unitOfWork.complete(); } } catch( Exception e ) { unitOfWork.discard(); } }
@Override public void setAttribute( Attribute attribute ) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { UnitOfWork uow = module.newUnitOfWork(); try { EntityComposite configuration = uow.get( EntityComposite.class, identity ); AssociationStateHolder state = spi.stateOf( configuration ); AccessibleObject accessor = propertyNames.get( attribute.getName() ); Property<Object> property = state.propertyFor( accessor ); property.set( attribute.getValue() ); try { uow.complete(); } catch ( UnitOfWorkCompletionException e ) { throw new ReflectionException( e ); } } finally { uow.discard(); } }
@Test public void givenEntityIsNotModifiedWhenUnitOfWorkCompletesThenDontStoreState() throws UnitOfWorkCompletionException { TestEntity testEntity; String version; { UnitOfWork unitOfWork = module.newUnitOfWork(); EntityBuilder<TestEntity> builder = unitOfWork.newEntityBuilder( TestEntity.class ); testEntity = builder.newInstance(); unitOfWork.complete(); } { UnitOfWork unitOfWork = module.newUnitOfWork(); testEntity = unitOfWork.get( testEntity ); version = spi.entityStateOf( testEntity ).version(); unitOfWork.complete(); } { UnitOfWork unitOfWork = module.newUnitOfWork(); testEntity = unitOfWork.get( testEntity ); String newVersion = spi.entityStateOf( testEntity ).version(); assertThat( "version has not changed", newVersion, equalTo( version ) ); unitOfWork.complete(); } }
@Test public void whenRemovedEntityThenCannotFindEntity() throws Exception { UnitOfWork unitOfWork = module.newUnitOfWork(); TestEntity newInstance = createEntity( unitOfWork ); String identity = newInstance.identity().get(); unitOfWork.complete(); // Remove entity unitOfWork = module.newUnitOfWork(); TestEntity instance = unitOfWork.get( newInstance ); unitOfWork.remove( instance ); unitOfWork.complete(); // Find entity unitOfWork = module.newUnitOfWork(); try { unitOfWork.get( TestEntity.class, identity ); fail( "Should not be able to find entity" ); } catch( NoSuchEntityException e ) { // Ok! } finally { unitOfWork.discard(); } }
public void updateEntity( UnitOfWork current ) { try { entity = current.get( entity ); } catch( NoSuchEntityException e ) { // Entity was deleted entity = null; } }
@Override public void save() { if( uow != null ) { try { uow.complete(); uow = null; } catch( UnitOfWorkCompletionException e ) { // Should be impossible e.printStackTrace(); } configuration = null; // Force refresh } }
public T newInstance( Module module ) { EntityBuilder<T> builder = module.currentUnitOfWork().newEntityBuilder( type ); build( builder.instance() ); return builder.newInstance(); } }
EntityBuilder<V> configBuilder = buildUow.newEntityBuilder( serviceModel.<V>configurationType(), identity ); configBuilder.newInstance(); buildUow.complete();
@Override public Object getAttribute( String name ) throws AttributeNotFoundException, MBeanException, ReflectionException { UnitOfWork uow = module.newUnitOfWork(); try { EntityComposite configuration = uow.get( EntityComposite.class, identity ); AssociationStateHolder state = spi.stateOf( configuration ); AccessibleObject accessor = propertyNames.get( name ); Property<Object> property = state.propertyFor( accessor ); return property.get(); } catch ( Exception ex ) { throw new ReflectionException( ex, "Could not get attribute " + name ); } finally { uow.discard(); } }
@After @Override public void tearDown() throws Exception { if( module != null && module.isUnitOfWorkActive() ) { while( module.isUnitOfWorkActive() ) { UnitOfWork uow = module.currentUnitOfWork(); if( uow.isOpen() ) { System.err.println( "UnitOfWork not cleaned up:" + uow.usecase().name() ); uow.discard(); } else { throw new InternalError( "I have seen a case where a UoW is on the stack, but not opened. First is: " + uow .usecase() .name() ); } } new Exception( "UnitOfWork not properly cleaned up" ).printStackTrace(); } super.tearDown(); } }
@Override public synchronized void refresh() { if( configuration != null ) { configuration = null; uow.discard(); uow = null; } }
@Test public void script36() { QueryBuilder<Person> qb = this.module.newQueryBuilder( Person.class ); Person person = templateFor( Person.class ); Account anns = unitOfWork.get( Account.class, "accountOfAnnDoe" ); Query<Person> query = unitOfWork.newQuery( qb.where( contains( person.accounts(), anns ) ) ); System.out.println( "*** script36: " + query ); verifyUnorderedResults( query, "Jack Doe", "Ann Doe" ); }
EntityComposite source = (EntityComposite) uow.get( (Class<?>) first( Qi4j.FUNCTION_DESCRIPTOR_FOR.map( entity ).types() ), identity ); EntityBuilder<EntityTraceRecordEntity> builder = uow.newEntityBuilder( EntityTraceRecordEntity.class ); EntityTraceRecordEntity state = builder.instance(); setStandardStuff( compositeType, method, args, entryTime, durationNano, state, exception ); EntityBuilder<ServiceTraceRecordEntity> builder = uow.newEntityBuilder( ServiceTraceRecordEntity.class ); ServiceTraceRecordEntity state = builder.instance(); setStandardStuff( compositeType, method, args, entryTime, durationNano, state, exception ); EntityBuilder<CompositeTraceRecordEntity> builder = uow.newEntityBuilder( CompositeTraceRecordEntity.class ); CompositeTraceRecordEntity state = builder.instance(); state.source().set( object );
@SuppressWarnings( "unchecked" ) public <V> V findConfigurationInstanceFor( ServiceComposite serviceComposite, UnitOfWork uow ) throws InstantiationException { ServiceDescriptor serviceModel = api.serviceDescriptorFor( serviceComposite ); String identity = serviceComposite.identity().get(); V configuration; try { configuration = uow.get( serviceModel.<V>configurationType(), identity ); uow.pause(); } catch( NoSuchEntityException | EntityTypeNotFoundException e ) { return (V) initializeConfigurationInstance( serviceComposite, uow, serviceModel, identity ); } return configuration; }
UoWFilesMetaInfo uowMeta = uow.metaInfo().get( UoWFilesMetaInfo.class ); if ( uowMeta != null ) { return uowMeta; uow.metaInfo().set( uowMeta ); uow.addUnitOfWorkCallback( new UnitOfWorkCallback()
@Test public void givenEntityStoredLoadedChangedWhenUnitOfWorkDiscardsThenDontStoreState() throws UnitOfWorkCompletionException { UnitOfWork unitOfWork = module.newUnitOfWork(); try { String identity = createEntity( unitOfWork ).identity().get(); unitOfWork.complete(); unitOfWork = module.newUnitOfWork(); TestEntity entity = unitOfWork.get( TestEntity.class, identity ); assertThat( entity.intValue().get(), is( 42 ) ); entity.intValue().set( 23 ); unitOfWork.discard(); unitOfWork = module.newUnitOfWork(); entity = unitOfWork.get( TestEntity.class, identity ); assertThat( entity.intValue().get(), is( 42 ) ); } finally { unitOfWork.discard(); } }