Java 在几个查询中重用esper中的流
我试图使用从数据库中加载一些信息,并将其用于具有不同条件的其他查询中。为此,我使用以下代码:Java 在几个查询中重用esper中的流,java,esper,Java,Esper,我试图使用从数据库中加载一些信息,并将其用于具有不同条件的其他查询中。为此,我使用以下代码: ConfigurationDBRef dbConfig = new ConfigurationDBRef(); dbConfig.setDriverManagerConnection("org.postgresql.Driver", "jdbc:postgresql://localhost:5432/myDatabase",
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存储的信息?(在上面的示例中,在QueryEngineObject 2中)您没有流,因为数据库不提供流。数据库查询仅在其被迭代/拉取时提供行。 一个选项是循环每一行并使用“sendEvent”将其发送到引擎:
//在迭代之前创建其他EPL语句
迭代器it=语句。迭代器();
while(it.hasNext()){
epService.getEPRuntime().sendEvent(事件);
}
谢谢您的回答,我在本例中的错误是“忘记”包含侦听器来管理第二条语句的结果。使用另一个for/while循环并直接迭代第二个句子是不可能的。
// create other EPL statements before iterating
Iterator<EventBean> it = statement.iterator();
while(it.hasNext()) {
epService.getEPRuntime().sendEvent(event);
}