Pourquoi le service ExpressionLanguageScope dans DBCPConnectionPool est limité à ‘VARIABLE_REGISTRY’ et non à ‘FLOWFILE_ATTRIBUTES’?

Le DBCPConnectionPool Service nécessite 5 parameters de connexion pour établir la connexion à une firebase database, comme illustré ci-dessous [Jaune marqué] entrer la description de l'image ici

J’ai utilisé UpdateAtsortingbute Processor pour append manuellement ces 5 parameters de connexion et leur donner leurs valeurs respectives comme indiqué dans l’image ci-dessous [Jaune marqué] entrer la description de l'image ici

Maintenant, lorsque j’essayais de lire les valeurs des parameters de connexion dans DBCPConnectionPool Service via ces atsortingbuts ( DBCPConnectionPool Service ci -dessous) , je n’ai pas pu les lire. entrer la description de l'image ici

Pour connaître la raison pour laquelle le DBCPConnectionPool Service n’a pas pu lire les atsortingbuts Flowfile, je suis allé de l’avant pour vérifier le code source du DBCPConnectionPool Service UpdateAtsortingbute Processor et UpdateAtsortingbute Processor .

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/ Apache / nifi / dbcp / DBCPConnectionPool.java

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-update-atsortingbute-bundle/nifi-update-atsortingbute-processor/src/main/java/org/apache/nifi/ processeurs / atsortingbuts / UpdateAtsortingbute.java

Code DBCPConnectionPool Service pour le DBCPConnectionPool Service : entrer la description de l'image ici

Code UpdateAtsortingbute Processor pour le UpdateAtsortingbute Processor : entrer la description de l'image ici

Ainsi, j’ai appris la raison pour laquelle il était impossible de lire les valeurs des atsortingbuts FlowFile. Cela est dû au fait que ExpressionLanguageScope est limité à VARIABLE_REGISTRY et non à FLOWFILE_ATTRIBUTES .

Maintenant, ma question est la suivante: pourquoi le service ExpressionLanguageScope pour DBCPConnectionPool Service est limité à VARIABLE_REGISTRY . Quelle est la raison de cette limitation? La raison pour laquelle je pose cette question est que je veux lire les valeurs des parameters de connexion via les atsortingbuts FlowFile.

Pour la même question posée dans la liste de diffusion de NiFi dev , Andy y avait répondu de la meilleure façon possible. La raison pour DBCPConnectionPool services DBCPConnectionPool ou tout service de contrôleur à cet égard, utilisant ExpressionLanguageScope.VARIABLE_REGISTRY est que les services du contrôleur n’ont pas access aux fichiers de stream, de sorte qu’il ne lira pas les atsortingbuts des fichiers de stream. Et pour la question, pourquoi il ne supporte que VARIABLE_REGISTRY est:

  • Le fait de ne pas lire les atsortingbuts du fichier de stream ne signifie pas qu’il ne doit pas utiliser d’atsortingbuts d’ailleurs.
  • L’une des principales raisons pour lesquelles VARIABLE_REGISTRY été introduit était d’éviter d’exposer les valeurs sensibles, ce qui est le cas lorsque nous transmettons des valeurs telles que les atsortingbuts flowfile. Les services de contrôleur correspondent à ce cas, car beaucoup d’entre eux utilisent des propriétés sensibles telles que le Password .

Et si vous supposez que vous pouvez le faire fonctionner simplement en changeant la scope de ces propriétés en ExpressionLanguageScope.FLOWFILE_ATTRIBUTES , vous vous trompez. Les changer n’a aucun sens et ne fonctionne pas, la raison en est que les services du contrôleur n’ont jamais access aux fichiers de stream.

S’il existe une exigence spécifique pour vous dans laquelle vous devez utiliser différentes valeurs de propriété pour différents fichiers de stream, Andy dans le processus de développement d’origine a partagé certains liens que je posterai à nouveau: