2017-03-14 2 views
1

EsperIO을 사용하여 데이터베이스에서 일부 정보를로드하고 다른 조건의 다른 쿼리에서 사용하려고합니다.여러 쿼리에서 esper로 스트림 재사용

ConfigurationDBRef dbConfig = new ConfigurationDBRef(); 
    dbConfig.setDriverManagerConnection("org.postgresql.Driver", 
        "jdbc:postgresql://localhost:5432/myDatabase", 
        "myUser", "myPassword"); 

    Configuration engineConfig = new Configuration(); 
    engineConfig.addDatabaseReference("myDatabase", dbConfig); 

    // Custom class 
    engineConfig.addEventType("UserFromDB", UserDB.class); 

    EPServiceProvider esperEngine = EPServiceProviderManager.getDefaultProvider(engineConfig); 

    String statement = "insert into UserFromDB " 
         + " select * from sql:myDatabase ['SELECT * from data.user']"; 

    //Install this query in the engine 
    EPStatement queryEngineObject = esperEngine.getEPAdministrator().createEPL(statement); 

    // 1. At this point I can iterate over queryEngineObject without problems getting the information sent by database 

    // This query is only a 'dummy example', the 'final queries' are more complex 
    statement = "select * from UserFromDB"; 
    EPStatement queryEngineObject2 = esperEngine.getEPAdministrator().createEPL(statement); 

    // 2. If I try to iterate over queryEngineObject2 I receive no data 

이 어떻게 다른 쿼리의 UserFromDB 저장된 정보를 다시 사용할 수 있습니다 : 나는 다음과 같은 코드를 사용하고 그것을하려면? (위의 예에서 의 queryEngineObject2)

답변

1

데이터베이스에 스트림이 없기 때문에 스트림이 없습니다. 데이터베이스 쿼리는 iterated/pulled 될 때만 행을 제공합니다. 하나의 옵션은 각 행을 통해 루프하고 "sendEvent"를 사용하여 엔진에 보내 : 당신의 대답에 대한

// create other EPL statements before iterating 
Iterator<EventBean> it = statement.iterator(); 
while(it.hasNext()) { 
    epService.getEPRuntime().sendEvent(event); 
} 
+0

감사합니다,이 경우 내 오류가 나는 "잊었다"의 결과를 관리 할 수있는 수신기를 포함하는 것입니다 두 번째 성명. 다른 for/while 루프를 사용하여 수행 할 수 없으며 두 번째 문장을 직접 반복합니다. – doctore