2014-01-02 4 views
0

В WSO2 CEP 3.0.0. Я испытал некоторое запутанное поведение с атрибутами двойного типа.wso2 CEP 3.0.0: литье до двойного типа

Предположим следующий сценарий: сиддхи

define stream LongStream LongAttr1 long, LongAttr2 long; 
define stream DoubleStream DoubleAttr1 double; 

from LongStream 
select (LongAttr1/LongAttr2) as DoubleAttr1 
insert into DoubleStream; 

from DoubleStream[DoubleAttr1 > 0.75] 
... 

В этом сценарии введение DoubleAttr1 в DoubleStream работает, давая хорошо плавающее значение с запятой. Но фильтр затем поднимает исключение кастинга.

ERROR - {QuerySelector} Input event attribute type java.lang.Double cannot be cast to java.lang.Long type defined in the stream definition! 
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long at org.wso2.siddhi.core.executor.conditon.compare.greater_than_equal.GreaterThanEqualCompareConditionExecutorLongDouble.process(GreaterThanEqualCompareConditionExecutorLongDouble.java:34) 

Это довольно запутанно, кажется, что DoubleAttr1 считается длинным?

Если рассчитать DoubleAttr1 как:

convert(LongAttr1/LongAttr2, double) 
or 
(LongAttr1 * 100.0)/(LongAttr2 * 100.0) 

исключение не поднимается больше. Я нашел это поведение довольно запутанным, и я думаю, что его следует предотвратить или исправить в последующих выпусках. Что вы думаете?

Br,

Эрик

PS: Я испытал также некоторые ошибки округления с функцией новообращенного: обращенного (LogAttr1/LongAttr2 * 100), дает 99,0 как результат, если LongAttr1 = 2 и LongAttr2 = 2

ответ

0

Я только что начал изучать сиддхи на этой неделе, поэтому я не эксперт, но у меня возникла аналогичная проблема. Я пытался разделить длинный, который представлял секунды на 60, чтобы получить минуты, и я получал подобное исключение.

Я исправил это, разделив вместо этого на 60.0. Похоже, потому что я делил длинный на целое число, которое оценивал результат до длинного и вызывая исключение при попытке применить к определению моего потока.

Его, вероятно, тот же вопрос, который обсуждался здесь

Unexpected result in long/int division

Смежные вопросы