@Override @SuppressWarnings("unchecked") // Checked using reflection public BeanHolder<T> getBean(BeanProvider beanProvider) { BeanHolder<?> beanHolder = casted.getBean( beanProvider ); try { // Just let the type throw an exception if something is wrong expectedType.cast( beanHolder.get() ); // The instance can safely be cast to the expected type, so we can safely do this return (BeanHolder<T>) beanHolder; } catch (Exception e) { new SuppressingCloser( e ).push( beanHolder ); throw e; } }
@Override @SuppressWarnings("unchecked") // Checked using reflection public BeanHolder<T> getBean(BeanProvider beanProvider) { BeanHolder<?> beanHolder = casted.getBean( beanProvider ); try { // Just let the type throw an exception if something is wrong expectedType.cast( beanHolder.get() ); // The instance can safely be cast to the expected type, so we can safely do this return (BeanHolder<T>) beanHolder; } catch (Exception e) { new SuppressingCloser( e ).push( beanHolder ); throw e; } }
public SessionFactory build() { ServiceRegistry serviceRegistry = null; MetadataSources metadataSources; SessionFactoryBuilder sessionFactoryBuilder; try { serviceRegistry = registryBuilder.build(); metadataSources = new MetadataSources( serviceRegistry ); metadataSourcesContributors.forEach( c -> c.accept( metadataSources ) ); Metadata metadata = metadataSources.buildMetadata(); sessionFactoryBuilder = metadata.getSessionFactoryBuilder(); sessionFactoryBuilderContributors.forEach( c -> c.accept( sessionFactoryBuilder ) ); return sessionFactoryBuilder.build(); } catch (RuntimeException e) { new SuppressingCloser( e ).push( ServiceRegistry::close, serviceRegistry ); throw e; } }
private Collection<PojoIndexingProcessor<? super V>> doBuild( PojoIndexingDependencyCollectorPropertyNode<?, P> parentDependencyCollector) { PojoIndexingDependencyCollectorValueNode<P, V> valueDependencyCollector = parentDependencyCollector.value( modelPath.getBoundExtractorPath() ); Collection<PojoIndexingProcessor<? super V>> immutableNestedNodes = boundBridges.isEmpty() && typeNodeBuilders.isEmpty() ? Collections.emptyList() : new ArrayList<>( boundBridges.size() + typeNodeBuilders.size() ); try { for ( BoundValueBridge<? super V, ?> boundBridge : boundBridges ) { immutableNestedNodes.add( createValueBridgeNode( boundBridge ) ); } typeNodeBuilders.stream() .map( builder -> builder.build( valueDependencyCollector.type() ) ) .filter( Optional::isPresent ) .map( Optional::get ) .forEach( immutableNestedNodes::add ); if ( !immutableNestedNodes.isEmpty() ) { valueDependencyCollector.collectDependency(); } return immutableNestedNodes; } catch (RuntimeException e) { // Close the nested processors created so far before aborting new SuppressingCloser( e ).pushAll( PojoIndexingProcessor::close, immutableNestedNodes ); throw e; } }
private Collection<PojoIndexingProcessor<? super V>> doBuild( PojoIndexingDependencyCollectorPropertyNode<?, P> parentDependencyCollector) { PojoIndexingDependencyCollectorValueNode<P, V> valueDependencyCollector = parentDependencyCollector.value( modelPath.getBoundExtractorPath() ); Collection<PojoIndexingProcessor<? super V>> immutableNestedNodes = boundBridges.isEmpty() && typeNodeBuilders.isEmpty() ? Collections.emptyList() : new ArrayList<>( boundBridges.size() + typeNodeBuilders.size() ); try { for ( BoundValueBridge<? super V, ?> boundBridge : boundBridges ) { immutableNestedNodes.add( createValueBridgeNode( boundBridge ) ); } typeNodeBuilders.stream() .map( builder -> builder.build( valueDependencyCollector.type() ) ) .filter( Optional::isPresent ) .map( Optional::get ) .forEach( immutableNestedNodes::add ); if ( !immutableNestedNodes.isEmpty() ) { valueDependencyCollector.collectDependency(); } return immutableNestedNodes; } catch (RuntimeException e) { // Close the nested processors created so far before aborting new SuppressingCloser( e ).pushAll( PojoIndexingProcessor::close, immutableNestedNodes ); throw e; } }
new SuppressingCloser( e ).pushAll( BeanHolder::close, beanHolders ); throw e;
new SuppressingCloser( e ).pushAll( BeanHolder::close, beanHolders ); throw e;
private IndexWriter createIndexWriter(LuceneIndexModel model) { IndexWriterConfig indexWriterConfig = new IndexWriterConfig( model.getScopedAnalyzer() ); try { Directory directory = indexingBackendContext.createDirectory( indexName ); try { return new IndexWriter( directory, indexWriterConfig ); } catch (RuntimeException e) { new SuppressingCloser( e ).push( directory ); throw e; } } catch (IOException | RuntimeException e) { throw log.unableToCreateIndexWriter( getEventContext(), e ); } }
public CloseableJavaBeanMapping build() { SearchIntegration integration = integrationBuilder.build(); try { JavaBeanMapping mapping = integration.getMapping( mappingKey ); /* * Since the user doesn't have access to the integration, but only to the (closeable) mapping, * make sure to close the integration whenever the mapping is closed by the user. */ JavaBeanMappingImpl mappingImpl = (JavaBeanMappingImpl) mapping; mappingImpl.onClose( integration::close ); return mappingImpl; } catch (RuntimeException e) { new SuppressingCloser( e ).push( integration ); throw e; } } }
@Override public LuceneIndexManagerImpl build() { LuceneIndexModel model = null; IndexWriter indexWriter = null; try { model = schemaRootNodeBuilder.build( indexName ); indexWriter = createIndexWriter( model ); return new LuceneIndexManagerImpl( indexingBackendContext, searchBackendContext, indexName, model, indexWriter ); } catch (RuntimeException e) { new SuppressingCloser( e ) .push( model ) .push( indexWriter ); throw e; } }
new SuppressingCloser( e ).push( ElasticsearchClientImplementor::close, client ); throw e;
new SuppressingCloser( e ).push( ElasticsearchClientImplementor::close, client ); throw e;
@Override public <T> BoundRoutingKeyBridge<T> addRoutingKeyBridge(IndexModelBindingContext bindingContext, BoundPojoModelPathTypeNode<T> modelPath, BridgeBuilder<? extends RoutingKeyBridge> builder) { BeanHolder<? extends RoutingKeyBridge> bridgeHolder = builder.build( bridgeBuildContext ); try { PojoModelTypeRootElement<T> pojoModelRootElement = new PojoModelTypeRootElement<>( modelPath, typeAdditionalMetadataProvider ); bridgeHolder.get().bind( new RoutingKeyBridgeBindingContextImpl( pojoModelRootElement ) ); bindingContext.explicitRouting(); return new BoundRoutingKeyBridge<>( bridgeHolder, pojoModelRootElement ); } catch (RuntimeException e) { new SuppressingCloser( e ) .push( holder -> holder.get().close(), bridgeHolder ) .push( BeanHolder::close, bridgeHolder ); throw e; } }
@Override public <T> BoundRoutingKeyBridge<T> addRoutingKeyBridge(IndexModelBindingContext bindingContext, BoundPojoModelPathTypeNode<T> modelPath, BridgeBuilder<? extends RoutingKeyBridge> builder) { BeanHolder<? extends RoutingKeyBridge> bridgeHolder = builder.build( bridgeBuildContext ); try { PojoModelTypeRootElement<T> pojoModelRootElement = new PojoModelTypeRootElement<>( modelPath, typeAdditionalMetadataProvider ); bridgeHolder.get().bind( new RoutingKeyBridgeBindingContextImpl( pojoModelRootElement ) ); bindingContext.explicitRouting(); return new BoundRoutingKeyBridge<>( bridgeHolder, pojoModelRootElement ); } catch (RuntimeException e) { new SuppressingCloser( e ) .push( holder -> holder.get().close(), bridgeHolder ) .push( BeanHolder::close, bridgeHolder ); throw e; } }
new SuppressingCloser( e ) .push( parallelOrchestrator ) .push( serialOrchestrator )
new SuppressingCloser( e ) .push( holder -> holder.get().close(), bridgeHolder ) .push( BeanHolder::close, bridgeHolder );
new SuppressingCloser( e ) .push( holder -> holder.get().close(), bridgeHolder ) .push( BeanHolder::close, bridgeHolder );
new SuppressingCloser( e ) .push( parallelOrchestrator ) .push( serialOrchestrator )
@Override public <I> BeanHolder<? extends IdentifierBridge<I>> addIdentifierBridge(IndexModelBindingContext bindingContext, BoundPojoModelPathPropertyNode<?, I> modelPath, BridgeBuilder<? extends IdentifierBridge<?>> builder) { PojoGenericTypeModel<I> typeModel = modelPath.valueWithoutExtractors().getTypeModel(); BridgeBuilder<? extends IdentifierBridge<?>> defaultedBuilder = builder; if ( builder == null ) { defaultedBuilder = bridgeResolver.resolveIdentifierBridgeForType( typeModel ); } /* * TODO HSEARCH-3243 check that the bridge is suitable for the given typeModel * (use introspection, similarly to what we do to detect the value bridge's field type?) */ BeanHolder<? extends IdentifierBridge<I>> bridgeHolder = (BeanHolder<IdentifierBridge<I>>) defaultedBuilder.build( bridgeBuildContext ); try { IdentifierBridge<I> bridge = bridgeHolder.get(); bridge.bind( new IdentifierBridgeBindingContextImpl<>( new PojoModelValueElement<>( typeModel ) ) ); bindingContext.idDslConverter( new PojoIdentifierBridgeToDocumentIdentifierValueConverter( bridge ) ); return bridgeHolder; } catch (RuntimeException e) { new SuppressingCloser( e ) .push( holder -> holder.get().close(), bridgeHolder ) .push( BeanHolder::close, bridgeHolder ); throw e; } }
@Override public <I> BeanHolder<? extends IdentifierBridge<I>> addIdentifierBridge(IndexModelBindingContext bindingContext, BoundPojoModelPathPropertyNode<?, I> modelPath, BridgeBuilder<? extends IdentifierBridge<?>> builder) { PojoGenericTypeModel<I> typeModel = modelPath.valueWithoutExtractors().getTypeModel(); BridgeBuilder<? extends IdentifierBridge<?>> defaultedBuilder = builder; if ( builder == null ) { defaultedBuilder = bridgeResolver.resolveIdentifierBridgeForType( typeModel ); } /* * TODO HSEARCH-3243 check that the bridge is suitable for the given typeModel * (use introspection, similarly to what we do to detect the value bridge's field type?) */ BeanHolder<? extends IdentifierBridge<I>> bridgeHolder = (BeanHolder<IdentifierBridge<I>>) defaultedBuilder.build( bridgeBuildContext ); try { IdentifierBridge<I> bridge = bridgeHolder.get(); bridge.bind( new IdentifierBridgeBindingContextImpl<>( new PojoModelValueElement<>( typeModel ) ) ); bindingContext.idDslConverter( new PojoIdentifierBridgeToDocumentIdentifierValueConverter( bridge ) ); return bridgeHolder; } catch (RuntimeException e) { new SuppressingCloser( e ) .push( holder -> holder.get().close(), bridgeHolder ) .push( BeanHolder::close, bridgeHolder ); throw e; } }