/** * Disconnects the given expression. * <p> * This can be used for dynamic expression, to remove and disconnects child * expressions. * * @param expression the expression to disconnect */ public void disconnectExpression(WriteExpression<?> expression) { WriteRecipe recipe; synchronized(lock) { recipe = recipes.remove(expression); } if (recipe == null) { log.log(Level.SEVERE, "Director was asked to disconnect expression '" + expression + "' which was not found."); } if (!recipe.getChannelWriteRecipes().isEmpty()) { try { dataSource.disconnectWrite(recipe); } catch(Exception ex) { writeExceptionCollector.writeValue(ex); } updateWriteRecipe(); } }
/** * Connects the given expression. * <p> * This can be used for dynamic expression to add and connect child expressions. * The added expression will be automatically closed when the associated * reader is closed, if it's not disconnected first. * * @param expression the expression to connect */ public void connectExpression(WriteExpression<?> expression) { WriteRecipeBuilder builder = new WriteRecipeBuilder(); expression.fillWriteRecipe(this, builder); WriteRecipe recipe = builder.build(writeExceptionCollector, writeConnCollector); synchronized(lock) { recipes.put(expression, recipe); } if (!recipe.getChannelWriteRecipes().isEmpty()) { try { dataSource.connectWrite(recipe); } catch(Exception ex) { writeExceptionCollector.writeValue(ex); } updateWriteRecipe(); } }