Repository: flex-blazeds Updated Branches: refs/heads/develop 1a1dba1dd -> de985b1e4
- Continued implementing the Spring-Boot starter (This version is actually able to start and configure a BlazeDS instance using Spring-Boot and auto-detect servies marked with the "RemotingDestination" annotation) - Invoking auto detected remoting destinations from a flex client works. Project: http://git-wip-us.apache.org/repos/asf/flex-blazeds/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-blazeds/commit/de985b1e Tree: http://git-wip-us.apache.org/repos/asf/flex-blazeds/tree/de985b1e Diff: http://git-wip-us.apache.org/repos/asf/flex-blazeds/diff/de985b1e Branch: refs/heads/develop Commit: de985b1e4306468d88bdb80b901cc1e9ac070cdc Parents: 1a1dba1 Author: Christofer Dutz <christofer.d...@codecentric.de> Authored: Sat Mar 26 10:59:39 2016 +0100 Committer: Christofer Dutz <christofer.d...@codecentric.de> Committed: Sat Mar 26 10:59:39 2016 +0100 ---------------------------------------------------------------------- opt/blazeds-spring-boot-starter/pom.xml | 29 +++++---- .../spring/BlazeDsAutoConfiguration.java | 68 ++++++++++++++++++-- 2 files changed, 80 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/de985b1e/opt/blazeds-spring-boot-starter/pom.xml ---------------------------------------------------------------------- diff --git a/opt/blazeds-spring-boot-starter/pom.xml b/opt/blazeds-spring-boot-starter/pom.xml index 9a49f03..eb93b3b 100644 --- a/opt/blazeds-spring-boot-starter/pom.xml +++ b/opt/blazeds-spring-boot-starter/pom.xml @@ -34,6 +34,23 @@ limitations under the License. <artifactId>spring-boot-autoconfigure</artifactId> <version>1.3.3.RELEASE</version> </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + <version>4.2.3.RELEASE</version> + </dependency> + + <!-- + A s we rely on the Web layer being configured, + we can also take care of providing it. This way + all you need is a dependency to blazeds-spring-boot-starter + and you have all you need. + --> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + <version>1.3.3.RELEASE</version> + </dependency> <!-- Add a reference to Apache Flex BlazeDS --> <dependency> @@ -84,18 +101,6 @@ limitations under the License. </exclusion> </exclusions> </dependency> - - <!-- - As we rely on the Web layer being configured, - we can also take care of providing it. This way - all you need is a dependency to blazeds-spring-boot-starter - and you have all you need. - --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - <version>1.3.3.RELEASE</version> - </dependency> </dependencies> </project> http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/de985b1e/opt/blazeds-spring-boot-starter/src/main/java/org/apache/flex/blazeds/spring/BlazeDsAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/opt/blazeds-spring-boot-starter/src/main/java/org/apache/flex/blazeds/spring/BlazeDsAutoConfiguration.java b/opt/blazeds-spring-boot-starter/src/main/java/org/apache/flex/blazeds/spring/BlazeDsAutoConfiguration.java index 3d5ad46..140a457 100644 --- a/opt/blazeds-spring-boot-starter/src/main/java/org/apache/flex/blazeds/spring/BlazeDsAutoConfiguration.java +++ b/opt/blazeds-spring-boot-starter/src/main/java/org/apache/flex/blazeds/spring/BlazeDsAutoConfiguration.java @@ -26,16 +26,23 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat import org.springframework.context.annotation.Bean; import org.springframework.boot.autoconfigure.condition.ConditionalOnResource; import org.springframework.core.io.ResourceLoader; +import org.springframework.flex.config.RemotingAnnotationPostProcessor; import org.springframework.flex.core.MessageBrokerFactoryBean; +import org.springframework.flex.servlet.MessageBrokerHandlerAdapter; +import org.springframework.web.context.support.ServletContextAwareProcessor; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; +import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import javax.servlet.ServletContext; +import java.util.Properties; /** * Created by christoferdutz on 21.03.16. */ @ConditionalOnWebApplication @ConditionalOnResource(resources = BlazeDsAutoConfiguration.SERVICES_CONFIG_PATH) -public class BlazeDsAutoConfiguration { +public class BlazeDsAutoConfiguration extends WebMvcConfigurationSupport { public static final String SERVICES_CONFIG_PATH = "classpath:/META-INF/flex/services-config.xml"; @@ -46,10 +53,8 @@ public class BlazeDsAutoConfiguration { private ResourceLoader resourceLoader; @Bean - public MessageBroker messageBroker() throws Exception { - // We'll use the Spring-Flex-Integration factories. + public MessageBrokerFactoryBean messageBrokerFactoryBean() throws Exception { MessageBrokerFactoryBean factoryBean = new MessageBrokerFactoryBean(); - // TODO: Do all the special configuration magic here ... //factoryBean.setConfigProcessors(null); //factoryBean.setConfigurationManager(null); @@ -62,10 +67,63 @@ public class BlazeDsAutoConfiguration { factoryBean.setServicesConfigPath(SERVICES_CONFIG_PATH); // This actually internally creates and configures the message broker. - factoryBean.afterPropertiesSet(); + //factoryBean.afterPropertiesSet(); + + return factoryBean; + } + /** + * Create and configure an instance of the MessageBroker. + * + * @return MessageBroker instance. + * @throws Exception in case anything went wrong. + */ + @Bean + public MessageBroker _messageBroker(MessageBrokerFactoryBean factoryBean) throws Exception { // Return the instance. return factoryBean.getObject(); } + /** + * The MessageBrokerHandlerAdapter intercepts any requests to the + * MVC Servlet, detects the ones that match valid BlazeDS endpoints + * and redirects them to the matching endpoint implementation. + * + * @return MessageBrokerHandlerAdapter instance + */ + @Bean + public MessageBrokerHandlerAdapter messageBrokerHandlerAdapter() { + return new MessageBrokerHandlerAdapter(); + } + + /** + * Tell the Dispatcher Servlet to redirect any requests in the + * "/messagebroker/" context to the BlazeDS MessageBroker. + * + * @return SimpleUrlHandlerMapping instance. + */ + @Bean + public SimpleUrlHandlerMapping sampleServletMapping() { + SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); + mapping.setOrder(Integer.MAX_VALUE - 2); + + Properties urlProperties = new Properties(); + urlProperties.put("/messagebroker/*", "_messageBroker"); + + mapping.setMappings(urlProperties); + return mapping; + } + + /** + * Post processor that automatically scans all created beans for + * ones annotated with @RemotingDestination and automatically adds + * these to the list of destinations at the MessageBroker. + * + * @return RemotingAnnotationPostProcessor instance. + */ + @Bean + public RemotingAnnotationPostProcessor remotingAnnotationPostProcessor() { + return new RemotingAnnotationPostProcessor(); + } + }