2014-10-16 71 views
0

我试图用Esper运行一个简单的测试(第14章,http://dl.e-book-free.com/2013/07/activiti_in_action.pdf)。该代码非常简单:Esper:EPL“选择”失败du验证错误

public class EventLengthWindowTest { 
    public class LoanRequestEvent { 
    public int amount =2; 

    public LoanRequestEvent(int a){ 
     amount += a; 
    } 
} 

private int sumAmount = 0; 

@Test 
public void testEventLengthWindow() { 
    Configuration configuration = new Configuration(); 
    configuration.addEventType(LoanRequestEvent.class); 

    EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(configuration); 
    EPAdministrator admin = epService.getEPAdministrator(); 
    EPStatement epStatement = admin.createEPL("select sum(amount) as sumAmount from LoanRequestEvent.win:length(2)"); 

    ... 
} 

我得到关于EPL部分的错误消息:

"select sum(amount) as sumAmount from LoanRequestEvent.win:length(2)" 

它说:

com.espertech.esper.client.EPStatementException: Error starting statement: Failed to validate select-clause expression 'sum(amount)': Property named 'amount' is not valid in any stream [select sum(amount) as sumAmount from LoanRequestEvent.win:length(2)] 

任何想法,为什么出现这种情况?

回答

2

如果您希望Esper读取和/或写入它们,您需要为事件类中的事件属性提供JavaBean getter和setter。对于你的例子工作,你需要添加一个像这样的吸气:

public class LoanRequestEvent { 
    public int amount =2; 

    public LoanRequestEvent(int a){ 
     amount += a; 
    } 

    public int getAmount() { 
     return amount; 
    } 
} 
+0

太好了,非常感谢! – KayJ 2014-10-17 07:40:05