@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; } }
new SuppressingCloser( e ).pushAll( BeanHolder::close, beanHolders ); throw e;
/** * Close the given {@code closeables} <strong>immediately</strong>, * swallowing any throwable in order to * {@link Throwable#addSuppressed(Throwable) add it as suppressed} to the main throwable. *<p> * See also {@link #pushAll(ClosingOperator, Object[])} * for when the objects to close do not implement {@link AutoCloseable}. * * @param closeables An array of {@link AutoCloseable}s to close. * @return {@code this}, for method chaining. */ public SuppressingCloser pushAll(AutoCloseable ... closeables) { return pushAll( AutoCloseable::close, closeables ); }
/** * Close the given {@code closeables} <strong>immediately</strong>, * swallowing any throwable in order to * {@link Throwable#addSuppressed(Throwable) add it as suppressed} to the main throwable. *<p> * See also {@link #pushAll(ClosingOperator, Object[])} * for when the objects to close do not implement {@link AutoCloseable}. * * @param closeables An iterable of {@link AutoCloseable}s to close. * @return {@code this}, for method chaining. */ public SuppressingCloser pushAll(Iterable<? extends AutoCloseable> closeables) { return pushAll( AutoCloseable::close, closeables ); }
@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 ).pushAll( BeanHolder::close, beanHolders ); throw e;
/** * Close the given {@code closeable} <strong>immediately</strong>, * swallowing any throwable in order to * {@link Throwable#addSuppressed(Throwable) add it as suppressed} to the main throwable. *<p> * See also {@link #push(ClosingOperator, Object)} * for when the object to close does not implement {@link AutoCloseable}. * * @param closeable An {@link AutoCloseable} to close. * @return {@code this}, for method chaining. */ public SuppressingCloser push(AutoCloseable closeable) { return push( AutoCloseable::close, closeable ); }
@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; } }
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; } }
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; } }
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; } } }
new SuppressingCloser( e ) .pushAll( PojoIndexingProcessor::close, immutablePropertyNodes ); 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 ); } }
new SuppressingCloser( e ) .pushAll( PojoIndexingProcessor::close, immutablePropertyNodes ); throw e;
new SuppressingCloser( e ) .push( parallelOrchestrator ) .push( serialOrchestrator ) .push( indexManager ); throw e;