2015-02-06 1 views
1

Как я могу перейти от метода аннотации фильтра к фильтру DSL для интеграции Spring. как я могу вызвать метод фильтрации?spring integration dsl filter вместо аннотации метода фильтра

IntegrationFlows.from("removeSession") 
       // remove chat session from user sessions map 
       .handle("sessionLogService", "removeChatSession") 
       // continue and remove user from ehcache only if user have no more opened sessions. 
       .filter(/* what's going here? */) 
       .get(); 

вместо фильтра аннотация.

@Filter(inputChannel = "userGoOfflineFilter", outputChannel = "userGoOffline") 
    public boolean notifyOnlyIfLastConnectionClosed(SecureUser secureUser) { 
     ChatUser user = sessionUtils.getChatUser(secureUser.getId()); 
     if(user == null || user.getChatSessionIds() == null || user.getChatSessionIds().isEmpty()) 
      return true; 
     LOGGER.debug(secureUser.getFirstName()+": Offline message not sent yet"); 
     return false; 
    } 

ответ

1

Есть несколько перегружен .filter() методов на IntegrationFlowDefinition. Взгляните на javadocs, но

filter("expression"); 

принимает выражение SpEL. Это может быть ссылка боба, такие как

.filter("@myFilter.notifyOnlyIfLastConnectionClosed('payload')") 

или вы можете использовать GenericSelector ...

.filter(SecureUser.class, u -> u == null || u.getChatSessionIds() == null || u.getChatSessionIds().isEmpty()) 

(Java 8 лямбда) или

.filter(new GenericSelector<SecureUser>() { 
        @Override 
        public boolean accept(SecureUser u) { 
         return u == null || u.getChatSessionIds() == null || u.getChatSessionIds().isEmpty(); 
        } 
       }) 

(Java 6/7).

т.д.

+0

Большое спасибо это .filter ("@ myFilter.notifyOnlyIfLastConnectionClosed ('полезной нагрузки')") работают идеально, и я люблю его. :) – lubo08