Je voulais convertir ma string JSON en instruction SQL en utilisant le processeur ConvertJSONtoSQL. exemple: string JSON –
{"cpuwait":"0.0","servernamee":"mywindows","cpusys":"5.3","cpuidle":"77.6","datee":"29-SEP-2016","timee":"00:01:33","cpucpuno":"CPU01","cpuuser":"17.1"}
Structure de la table en oracle db –
CREATE TABLE cpu ( datee varchar2(15) DEFAULT NULL, timee varchar2(10) DEFAULT NULL, servernamee varchar2(20) DEFAULT NULL, cpucpuno varchar2(4) DEFAULT NULL, cpuuser varchar2(5) DEFAULT NULL, cpusys varchar2(5) DEFAULT NULL, cpuwait varchar2(5) DEFAULT NULL, cpuidle varchar2(5) DEFAULT NULL );
Configuration utilisée pour la database MySQL:
URL de connection à la database: jdbc: mysql: // localhost: 3306 / testnifi
Nom de la class du pilote de database: com.mysql.jdbc.Driver
J'ai été connecté avec succès à MySQL en utilisant l'URL JDBC (pool de connection DBCP), le nom d'user et le mot de passe. Le processeur ConvertJSONtoSQL a fonctionné avec succès et j'obtiens une instruction d'insertion sql valide en sortie. Mais quand je tentais la même chose avec Oracle Database, je reçois
ERREUR [Thread de process piloté par timer] oanpstandard.ConvertJSONToSQL java.sql.SQLException: le stream a déjà été fermé
Ma configuration pour la connection Oracle db:
J'ai recherché l'erreur dans google mais j'ai trouvé que cette erreur se produira quand de longs types de données ont été employés dans des tables de database mais je ne les emploie pas. Je suis allé à travers le code source du processeur ConvertJSONtoSQL (suivi de la trace de la stack) et j'ai essayé d'implémenter la même chose dans Eclipse où je ne reçois aucune erreur, je peux me connecter à la database et faire des requêtes.
Y a-t-il une erreur dans ma configuration?
Version Nifi – 0.7.0 / 1.0 (je reçois la même erreur dans les deux)
version java – java8
Version Oracle DB – Oracle Database 11g Express Edition
Trace de stack complète:
2016-10-19 07: 10: 06,557 ERREUR [Thread Thread-6 piloté par timer] oanpstandard.ConvertJSONToSQL java.sql.SQLException: Stream a déjà été fermé à oracle.jdbc.driver.LongAccessor.getBytesInternal (LongAccessor.java:156 ) ~ [ojdbc6.jar: 11.2.0.1.0] à oracle.jdbc.driver.LongAccessor.getBytes (LongAccessor.java:126) ~ [ojdbc6.jar: 11.2.0.1.0] à oracle.jdbc.driver.LongAccessor .getSsortingng (LongAccessor.java:201) ~ [ojdbc6.jar: 11.2.0.1.0] at oracle.jdbc.driver.T4CLongAccessor.getSsortingng (T4CLongAccessor.java:427) ~ [ojdbc6.jar: 11.2.0.1.0] à oracle.jdbc.driver.OracleResultSetImpl.getSsortingng (OracleResultSetImpl.java:1251) ~ [ojdbc6.jar: 11.2.0.1.0] à oracle.jdbc.driver.OracleResultSet.getSsortingng (OracleResultSet.java:494) ~ [ojdbc6. jar: 11.2.0.1.0] à org.apache.commons.dbcp.DelegatingResultSet.getSsortingng (DelegatingResultSet.java:263) ~ [na: na] à org.apache.nifi.processors.standard.ConvertJSONToSQL $ ColumnDescription.from ( ConvertJSONToSQL.java:677) ~ [nifi-standard-processors-0.7.0.jar: 0.7.0] sur org.apache.nif i.processors.standard.ConvertJSONToSQL $ TableSchema.from (ConvertJSONToSQL.java:621) ~ [nifi-standard-processeurs-0.7.0.jar: 0.7.0] à org.apache.nifi.processors.standard.ConvertJSONToSQL.onTrigger (ConvertJSONToSQL.java:267) ~ [nifi-standard-processors-0.7.0.jar: 0.7.0] à org.apache.nifi.processor.AbstractProcessor.onTrigger (AbstractProcessor.java:27) [nifi-api-0.7 .0.jar: 0.7.0] sur org.apache.nifi.controller.StandardProcessorNode.onTrigger (StandardProcessorNode.java:1054) [nifi-framework-core-0.7.0.jar: 0.7.0] sur org.apache. nifi.controller.tasks.ContinuallyRunProcessorTask.call (ContinuallyRunProcessorTask.java:136) [nifi-framework-core-0.7.0.jar: 0.7.0] sur org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call (ContinuallyRunProcessorTask. java: 47) [nifi-framework-core-0.7.0.jar: 0.7.0] à org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent $ 1.run (TimerDrivenSchedulingAgent.java:127) [nifi-framework-core- 0.7.0.jar: 0.7.0] sur java.util.concurrent.Executors $ RunnableAdapter.call (Source inconnue) [na: 1.7.0_40] at java.util.concurrent.FutureTask.runAndReset (source inconnue) [na: 1.7.0_40] at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301 (source inconnue) [ na: 1.7.0_40] at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (source inconnue) [na: 1.7.0_40] at java.util.concurrent.ThreadPoolExecutor.runWorker (source inconnue) [na: 1.7.0_40] à java.util.concurrent.ThreadPoolExecutor $ Worker.run (source inconnue) [na: 1.7.0_40] à java.lang.Thread.run (source inconnue) [na: 1.7.0_40
Cela semble un bug dans le pilote Oracle. Voir:
L'article 2 me donne la solution de contournement. Fondamentalement append dans bootstrap.conf l'argument suivant:
java.arg.xx=-Doracle.jdbc.useFetchSizeWithLongColumn=true