2017-09-28 3 views
0

J'ai reçu NPE lors de l'utilisation de Calcite. Mon code est le suivantNPE lors de l'utilisation d'Apache Calcite avec H2 sur la base de données JIRA

@Autowired 
public CalciteBootstrap(DatasourceProvider datasourceProvider) throws SQLException { 
    this.datasource = datasourceProvider.fetchDatasource(); 
    log.debug("Datasource fetched - {}", datasource); 
    this.connection = createRootSchema(); 
    this.schema = JdbcSchema.create(connection.getRootSchema(), "PUBLIC", datasource, null, null); 

    connection.getRootSchema().add("jira", schema); 
    connection.createStatement().executeQuery("select * from jira.PROJECT_KEY"); 
} 

private CalciteConnection createRootSchema() { 
    try { 
     Class.forName("org.apache.calcite.jdbc.Driver"); 
     Properties info = new Properties(); 
     info.setProperty("lex", "JAVA"); 
     Connection connection = DriverManager.getConnection("jdbc:calcite:", info); 
     CalciteConnection calciteConnection 
        = connection.unwrap(CalciteConnection.class); 
     return calciteConnection; 
    } catch (SQLException | ClassNotFoundException ex) { 
     throw new RuntimeException(ex); 
    } 
} 

Et NPE:

[INFO] [talledLocalContainer] java.sql.SQLException: Error while executing SQL "select * from jira.PROJECT_KEY": null 
[INFO] [talledLocalContainer] at org.apache.calcite.avatica.Helper.createException(Helper.java:56) 
[INFO] [talledLocalContainer] at org.apache.calcite.avatica.Helper.createException(Helper.java:41) 
[INFO] [talledLocalContainer] at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156) 
[INFO] [talledLocalContainer] at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:218) 
[INFO] [talledLocalContainer] at com.codedoers.jira.smartql.QueryController.request(QueryController.java:23) 
... 
[INFO] [talledLocalContainer] Caused by: java.lang.NullPointerException 
[INFO] [talledLocalContainer] at Baz.bind(Unknown Source) 
[INFO] [talledLocalContainer] at org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:335) 
[INFO] [talledLocalContainer] at org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:294) 
[INFO] [talledLocalContainer] at org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:559) 
[INFO] [talledLocalContainer] at org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:550) 
[INFO] [talledLocalContainer] at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:67) 
[INFO] [talledLocalContainer] at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44) 
[INFO] [talledLocalContainer] at org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:630) 
[INFO] [talledLocalContainer] at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:607) 
[INFO] [talledLocalContainer] at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:638) 
[INFO] [talledLocalContainer] at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:149) 
[INFO] [talledLocalContainer] ... 240 more 

Je développe un addon pour JIRA, d'où le conteneur est JIRA. DB est H2. J'emprunte la source de données JIRAs pour Calcite.

Est-ce que quelqu'un voit de tels NPE pour Calcite?

Répondre

0

Après déconner avec le code, je l'ai trouvé cet extrait suivant fonctionne

this.schema = JdbcSchema.create(connection.getRootSchema(), "JIRA", datasource, null, null); 
connection.getRootSchema().add("JIRA", schema);