/** * Copyright 2016 Nikita Koksharov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.redisson.spring.support; import org.springframework.beans.factory.xml.NamespaceHandlerSupport; /** * * @author Rui Gu (https://github.com/jackygurui) */ public class RedissonNamespaceHandlerSupport extends NamespaceHandlerSupport { @Override public void init() { RedissonNamespaceParserSupport helper = new RedissonNamespaceParserSupport(); RedissonGenericObjectDefinitionParser defaultParser = new RedissonGenericObjectDefinitionParser(helper); RedissonReadAndWriteLockDefinitionParser readAndWriteLockParser = new RedissonReadAndWriteLockDefinitionParser(helper); RedissonMultiLockDefinitionParser nestedParser = new RedissonMultiLockDefinitionParser(helper); RedissonNestedElementAwareDecorator readWriteLockDecorator = new RedissonNestedElementAwareDecorator( new String[]{ RedissonNamespaceParserSupport.READ_LOCK_ELEMENT, RedissonNamespaceParserSupport.WRITE_LOCK_ELEMENT }, RedissonNamespaceParserSupport.READ_WRITE_LOCK_REF_ATTRIBUTE); RedissonGenericObjectDefinitionParser readWriteLockParser = new RedissonGenericObjectDefinitionParser(helper, readWriteLockDecorator); RedissonNestedElementAwareDecorator remoteServiceDecorator = new RedissonNestedElementAwareDecorator( new String[]{ RedissonNamespaceParserSupport.RPC_SERVER_ELEMENT, RedissonNamespaceParserSupport.RPC_CLIENT_ELEMENT }, RedissonNamespaceParserSupport.REMOTE_SERVICE_REF_ATTRIBUTE); RedissonGenericObjectDefinitionParser remoteServiceParser = new RedissonGenericObjectDefinitionParser(helper, remoteServiceDecorator); RedissonNestedElementAwareDecorator liveObjectServiceDecorator = new RedissonNestedElementAwareDecorator( new String[]{ RedissonNamespaceParserSupport.LIVE_OBJECT_ELEMENT, RedissonNamespaceParserSupport.LIVE_OBJECT_REGISTRATION_ELEMENT }, RedissonNamespaceParserSupport.LIVE_OBJECT_SERVICE_REF_ATTRIBUTE); RedissonGenericObjectDefinitionParser liveObjectServiceParser = new RedissonGenericObjectDefinitionParser(helper, liveObjectServiceDecorator); //root beans registerBeanDefinitionParser("client", new RedissonDefinitionParser(helper)); registerBeanDefinitionParser("redis", new RedisDefinitionParser(helper)); //object parsers registerBeanDefinitionParser("binary-stream", defaultParser); registerBeanDefinitionParser("geo", defaultParser); registerBeanDefinitionParser("set-cache", defaultParser); registerBeanDefinitionParser("map-cache", defaultParser); registerBeanDefinitionParser("bucket", defaultParser); registerBeanDefinitionParser("buckets", defaultParser); registerBeanDefinitionParser("hyper-log-log", defaultParser); registerBeanDefinitionParser("list", defaultParser); registerBeanDefinitionParser("list-multimap", defaultParser); registerBeanDefinitionParser("list-multimap-cache", defaultParser); registerBeanDefinitionParser("local-cached-map", new RedissonGenericObjectDefinitionParser(helper, new LocalCachedMapOptionsDecorator())); registerBeanDefinitionParser("map", defaultParser); registerBeanDefinitionParser("set-multimap", defaultParser); registerBeanDefinitionParser("set-multimap-cache", defaultParser); registerBeanDefinitionParser("semaphore", defaultParser); registerBeanDefinitionParser("permit-expirable-semaphore", defaultParser); registerBeanDefinitionParser("lock", defaultParser); registerBeanDefinitionParser("fair-lock", defaultParser); registerBeanDefinitionParser("read-write-lock",readWriteLockParser); registerBeanDefinitionParser("read-lock", readAndWriteLockParser); registerBeanDefinitionParser("write-lock", readAndWriteLockParser); registerBeanDefinitionParser("multi-lock", nestedParser); registerBeanDefinitionParser("red-lock", nestedParser); registerBeanDefinitionParser("set", defaultParser); registerBeanDefinitionParser("sorted-set", defaultParser); registerBeanDefinitionParser("scored-sorted-set", defaultParser); registerBeanDefinitionParser("lex-sorted-set", defaultParser); registerBeanDefinitionParser("topic", defaultParser); registerBeanDefinitionParser("pattern-topic", defaultParser); registerBeanDefinitionParser("blocking-fair-queue", defaultParser); registerBeanDefinitionParser("queue", defaultParser); registerBeanDefinitionParser("delayed-queue", new RedissonGenericObjectDefinitionParser(helper, new DelayedQueueDecorator())); registerBeanDefinitionParser("priority-queue", defaultParser); registerBeanDefinitionParser("priority-deque", defaultParser); registerBeanDefinitionParser("blocking-queue", defaultParser); registerBeanDefinitionParser("bounded-blocking-queue", defaultParser); registerBeanDefinitionParser("deque", defaultParser); registerBeanDefinitionParser("blocking-deque", defaultParser); registerBeanDefinitionParser("atomic-long", defaultParser); registerBeanDefinitionParser("atomic-double", defaultParser); registerBeanDefinitionParser("count-down-latch", defaultParser); registerBeanDefinitionParser("bit-set", defaultParser); registerBeanDefinitionParser("bloom-filter", defaultParser); registerBeanDefinitionParser("script", defaultParser); registerBeanDefinitionParser("executor-service", defaultParser);//nested unfinished registerBeanDefinitionParser("remote-service", remoteServiceParser); registerBeanDefinitionParser("rpc-server", new RedissonRPCServerDefinitionParser(helper)); registerBeanDefinitionParser("rpc-client", new RedissonRPCClientDefinitionParser(helper, new RemoteInvocationOptionDecorator())); registerBeanDefinitionParser("keys", defaultParser); registerBeanDefinitionParser("live-object-service", liveObjectServiceParser); registerBeanDefinitionParser("live-object", new RedissonLiveObjectDefinitionParser(helper)); registerBeanDefinitionParser("live-object-registration", new RedissonLiveObjectRegistrationDefinitionParser(helper)); } }