Sunteți pe pagina 1din 45

Primavera Integrao BlazeDS Guia de Referncia

Autores
Jeremy Grelle

Verso 1.5.0.RC1
Cpias deste documento podem ser feitas para o seu uso prprio e para distribuio para outras pessoas, desde que voc no cobrar qualquer taxa para cpias e ainda desde que cada cpia contenha este Aviso de direitos autorais, distribudos na forma impressa ou eletronicamente.

Junho 2011
1. Viso geral de integrao Primavera BlazeDS 1.1. Fundo 1.2. Mnimo maior dependncia verses Primavera Integrao BlazeDS 1.5 requer para executar 1.3. Mnimo principais verses de dependncia exigido por recursos opcionais 1.4. Onde obter suporte 2. Configurando e usando o BlazeDS MessageBroker com Spring 2.1. Introduo 2.2. Configurando o DispatcherServlet Primavera 2.3. Configurando o MessageBroker na Primavera 2.4. Solicitaes de mapeamento para o MessageBroker 2.5. Usando clientes Flex ao lado de controladores Spring MVC 2.6. Usando Spring Destinos de gesto do cliente Flex 2.7. Personalizao MessageBroker avanados 2.8. Usando Tradutores exceo personalizada 2.9. Usando personalizado Mensagem Interceptors 2.9.1. Tratamento personalizado com recursos Mensagem Interceptors 2.9.2. Personalizao da Cadeia Interceptor Mensagem 2.10. Fornecendo adaptadores Servio Personalizado 3. Exportao Beans da Primavera para Flex Remoting 3.1. Introduo 3.2. Configurando o servio de Remoting 3.3. Usando o remoting destino Tag 3.4. Feijo para exportao Remoting com @ RemotingDestination 3.4.1. Fornecendo exteriorizada Canal Ids 4. Comunicar-se com pontos de extremidade RESTful Spring MVC usando AMF 4.1. Introduo 4.2. Usando AmfView 4.3. Usando AmfHttpMessageConverter 4.4. Interagindo com pontos de extremidade RESTful AMF do Cliente Flex 5. Suporte aprimorado AMF 5.1. Personalizando AMF Converso 5.1.1. Configurando AMF Converso de tipo 5.1.1.1. Usando mapeamento de campo direto 5.1.1.2. Desserializar objetos imutveis com @ AmfCreator 5.1.1.3. Ignorando Propriedades Durante AMF Converso 5.1.1.4. Fornecimento de conversores personalizados 5.2. Trabalhando com Hibernate 5.2.1. Configurando o Hibernate Entity suporte de serializao / desserializao 5.3. De utilizar a Digitalizao Classpath para AMF Configurao

6. Protegendo Destinos BlazeDS com Spring Security 6.1. Introduo 6.1.1. A simples configurao do Spring Security 3 6.1.2. Permitindo a Primavera cadeia de filtros de segurana no web.xml 6.2. Configurando a Integrao Spring Security 6.2.1. Usando um LoginCommand personalizado 6.2.2. Acessando Detalhes do Usurio 6.2.3. Traduo de segurana Exception 6.2.4. garantiu atributos de configurao 6.3. Configurando o Endpoint e Segurana Destino 6.3.1. Assegurar canais especficos BlazeDS 6.3.2. Protegendo Canais BlazeDS pelo Caminho URL Endpoint 6.3.3. Protegendo exportou servios Primavera 7. Integrao com o servio de mensagens BlazeDS 7.1. Introduo 7.2. Configurando o Servio de Mensagem 7.3. Usando Destinos Mensagem AMF 7.4. Usando Destinos Mensagem JMS 7.5. Usando Destinos Primavera Mensagem Integrao 7.6. Envio de mensagens com a AMF MessageTemplate 8. Criando e executando o Primavera exemplos de integrao BlazeDS 8.1. Introduo 8.1.1. Maven Setup 8.1.2. Criando e executando o Test Drive 8.1.3. Usando BlazeDS 4 com Maven 8.1.4. Baixar o Test Drive pr-embalados 8.1.5. Importao e executando o Test Drive no Eclipse 9. Trabalhando com o Addon Flex para a Primavera de Roo 9.1. Introduo 9.1.1. Requisitos mnimos para o Addon Flex para a Primavera de Roo 9.1.2. Instalar o Addon Flex para a Primavera de Roo 9.1.3. Flex Addon para a Primavera de Roo Features 9.1.4. Comandos Flex 9.1.4.1. Flex configurao 9.1.4.2. Flex remoting andaime 9.1.4.3. Flex remoting todos 9.1.5. Construindo e executando um projeto Addon Flex 9.1.5.1. Construindo e executando um projeto Addon Flex com Maven 9.1.5.2. Importando um Projeto Addon Flex em SpringSource Tool Suite e Flash Builder 9.1.6. Executando o exemplo Roo Script 9.1.7. Problemas conhecidos

Captulo 1. Viso geral de integrao Primavera BlazeDS 1.1. Fundo


Primavera sempre procurou ser agnstico s tecnologias cliente que est sendo usado para acessar servios de seu ncleo, deixando intencionalmente opes em aberto e deixando a comunidade impulsionar a demanda por quaisquer novas solues de integrao de primeira classe a ser adicionada ao portflio de projetos da Primavera.Primavera Integrao BlazeDS uma resposta demanda COMUNITRIO para uma soluo de alto nvel para a construo de

Primavera-powered Rich Internet Applications usando o Adobe Flex para a tecnologia do lado do cliente. BlazeDS um projeto open source da Adobe que oferece o remoting eo fundamento de mensagens para conectar um Flex baseado em front-end para Java servios back-end. Embora tenha sido possvel utilizar o BlazeDS para se conectar a Primavera de gesto de servios, no foi de uma forma que se sente "natural" para um desenvolvedor Spring, exigindo a carga extra de ter que manter uma configurao separada BlazeDS xml. Primavera Integrao BlazeDS vira o jogo, tornando o MessageBroker BlazeDS uma mola de gesto objeto, abrindo os caminhos para uma integrao mais ampla que se segue "o caminho da Primavera".

1.2. Mnimo maior dependncia verses Primavera Integrao BlazeDS 1.5 requer para executar
Java 5 Spring 3.0 Adobe BlazeDS 4,0

1.3. Mnimo principais verses de dependncia exigido por recursos opcionais


Primavera Security 3.0 Primavera Integrao 1,0 Hibernate 3,5 Spring Roo 1.1M1

1.4. Onde obter suporte


Apoio da-fonte-profissional na Primavera Integrao BlazeDS est disponvel a partir SpringSource , empresa por trs da Primavera.

Captulo 2. Configurando e usando o BlazeDS MessageBroker com Spring 2.1. Introduo


O componente central que deve ser configurado para usar a Integrao Primavera BlazeDS o MessageBroker . Mensagens HTTP do cliente Flex ir ser encaminhado atravs do Primavera DispatcherServlet para a Primavera de gesto MessageBroker . No h nenhuma necessidade para configurar o BlazeDS MessageBrokerServlet quando se utiliza a Primavera de gesto MessageBroker .

2.2. Configurando o DispatcherServlet Primavera


O DispatcherServlet deve ser configurado como normal no web.xml para iniciar uma WebApplicationContext Spring. Por exemplo: <! - O controlador desta aplicao Web Spring, responsvel pela manipulao de todos os pedidos de aplicao -> <servlet> <servlet-name> Primavera Dispatcher Servlet MVC </ servletname> <servlet-class> org.springframework.web.servlet.DispatcherServlet </ servlet-class> <init-param>

<param-name> contextConfigLocation </ param-name> <param-value> / WEB-INF/config/web-application-config.xml </ param-value> </ Init-param> <load-on-startup> 1 <load-on-startup /> </ Servlet>

2.3. Configurando o MessageBroker na Primavera


A configurao simplificada Primavera namespace XML fornecido para configurar o MessageBroker na sua WebApplicationContext. Para usar o suporte namespace voc deve adicionar o local do esquema na sua Primavera arquivos de configurao XML. A configurao tpica ser algo parecido com o seguinte: <? Xml version = "1.0" encoding = "UTF-8"?> <Feijo xmlns = "http://www.springframework.org/schema/beans" xmlns: flex = "http://www.springframework.org/schema/flex" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation = " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springbeans-2.5.xsd http://www.springframework.org/schema/flex http://www.springframework.org/schema/flex/spring-flex1.0.xsd "> ... </ Beans>

Isso faz com que o BlazeDS Primavera Integrao marcas de configurao disponvel sob a flexvel namespace em seus arquivos de configurao. A configurao acima ser assumido para o resto dos exemplos de configurao a seguir. Para todos os detalhes de cada atributo e tag disponvel no namespace de configurao, certifique-se de se referir a primavera-flex-1.0.xsd como cada elemento e atributo est totalmente documentado l. Usando um XSD-aware editor XML, como o de Eclipse devem trazer a documentao automaticamente enquanto voc digita. No mnimo, o MessageBrokerFactoryBean deve ser configurado como um bean na sua Primavera WebApplicationContext em ordem para iniciar o MessageBroker , juntamente com uma MessageBrokerHandlerAdapter e uma adequada HandlerMapping (geralmente um SimpleUrlHandlerMapping ) para rotear solicitaes de entrada para a Primavera de gesto MessageBroker . Esses gros sero registrados automaticamente usando o fornecido mensagem broker- tag no seu arquivo de definio de feijo. Por exemplo, em sua forma mais simples: <flex:message-broker/> Isto ir configurar o MessageBroker e infraestruturas de apoio necessrias, usando padres sensveis. Os padres podem ser sobrepostos usando os atributos fornecidos da mensagem broker- tag e seus elementos filho associados. Por exemplo, o local padro do arquivo de configurao XML BlazeDS (/ WEB-INF/flex/services-config.xml) pode ser substitudo usando

o servios-config path- atributo. O MessageBrokerFactoryBean usa Spring ResourceLoader abstrao, de modo que os caminhos de recurso tpico da Primavera podem ser usadas. Por exemplo, para carregar a configurao do classpath da aplicao: <Flex: mensagem de corretor de servios-config-path = "classpath *: services-config.xml" O equivalente MessageBrokerFactoryBean definio usando configurao do Spring baunilha seria: <-! Bootstraps e expe a MessageBroker BlazeDS -> <bean id="_messageBroker" class="org.springframework.flex.core.MessageBrokerFactoryBean"> <property name="servicesConfigPath" value="classpath*:servicesconfig.xml" /> <Feijo /> Note-se especialmente que, com a mensagem de corretor de tag, no necessrio atribuir um id personalizado para o MessageBroker, e de fato desanimado para que voc no ter que se continuamente de referncia mais tarde. A nica razo que voc poderia precisar para fornecer um ID de costume se voc estivesse bootstrapping mais de um MessageBroker na WebApplicationContext mesmo.

2.4. Solicitaes de mapeamento para o MessageBroker


Adequadamente aos pedidos de rotas de entrada para o Primavera managedMessageBroker mapeamento pedido, deve ser configurado em trs locais:
DispatcherServlet mapeamento no web.xml HandlerMapping na WebApplicationContext Primavera

Definies canal no BlazeDS services-config.xml

O cenrio mais simples mapeamento pedido quando o Flex front-end o tipo de cliente apenas para a aplicao. Neste caso, voc pode simplesmente mapa / MessageBroker como o caminho de nvel superior para os pedidos. O mapeamento no web.xml seria: <- Mapear todos os pedidos / messagbroker ao DispatcherServlet para lidar com -> <servlet-mapping> <servlet-name> Primavera Dispatcher Servlet MVC </ servletname> <url-pattern> / MessageBroker / * </ url-pattern> </ Servlet-mapping> Quando se utiliza a mensagem de corretor de tag de configurao, um SimpleUrlHandlerMapping que est instalado por padro, todos os mapas de entrada DispatcherServletsolicitaes para a Primavera de gesto MessageBroker usando um / * padro caminho. O mapeamento padro pode ser substitudo pelo fornecimento de um ou maismapeamento elementos filho. Se voc quiser fornecer seu prprio HandlerMapping configurao de feijo, voc pode desativar o padro usando o disable-padro de mapeamento de atributo da mensagem broker- tag. A ordem dos

instalados SimpleUrlHandlerMapping pode ser definido (para cenrios complexos, onde vrios tipos de mapeamento de manipulador so instalados no mesmo contexto), utilizando o mapeamento de fim- atributo. O SimpleUrlHandlerMapping na WebApplicationContext Primavera mapas todos os pedidos para a Primavera de gesto MessageBroker atravs do MessageBrokerHandlerAdapter .A configurao padro instalado pela mensagem de corretor de tag de configurao equivalente s definies de feijo seguinte: <-! Caminhos pedido Mapas em / * para o MessageBroker BlazeDS -> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapp ing"> <property name="mappings"> <value> / _messageBroker *= </ Value> </ Property> <Feijo /> <-! Despachos pedidos mapeado para um MessageBroker -> <bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter "/> Definies canal no BlazeDS services-config.xml deve corresponder ao mapeamento escolhido. Por exemplo, para configurar um canal AMF tpico em BlazeDS que coincide com a estratgia de mapeamento acima: <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <Endpoint url = "http:// {server.name}: {server.port} / {} context.root / MessageBroker / amf" class = "flex.messaging.endpoints.AMFEndpoint" /> <properties> <polling-enabled> false </ pesquisa-enabled> </ Properties> </ Channel-definition> Veja a documentao do BlazeDS para mais informaes sobre como configurar os canais de comunicao no services-config.xml.

2.5. Usando clientes Flex ao lado de controladores Spring MVC


Poderia muitas vezes ser o caso de que seu aplicativo precisa servir mais do que os clientes apenas Flex-based. Por exemplo, voc pode estar construindo uma arquitetura RESTful que utilizado para servir vrios tipos de cliente. Voc poderia at mesmo ser endpoints consumindo RESTful usando o componente HTTPService Flex. Modelo Spring MVC do controlador fornece um meio simples e flexvel para criar pontos de extremidade RESTful tal. Nesses tipos de aplicao hbrida secenarios web, voc ter de considerar uma estratgia de mapeamento alternativo. A abordagem mais simples usar um contexto de aplicao hierrquica com mltiplas DispatcherServlets . Nesta abordagem, voc configura a sua

camada de aplicativo principal (servios, segurana, infraestrutura de apoio, etc) em um contexto carregado atravs do pai ContextLoaderListener e configure todos os aspectos de seus controladores Spring MVC em uma criana DispatcherServlet contexto, e todos os aspectos especficos para seu cliente Flex em uma criana separada DispatcherServletcontexto. Esta abordagem pode parecer da seguinte maneira no web.xml: <context-param> <param-name> contextConfigLocation </ param-name> <param-value> / WEB-INF/spring / *- context.xml </ Param-value> </ Context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </ ouvinte classe> <Ouvinte /> <servlet> <servlet-name> Flex </ servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </ servlet-class> <load-on-startup> 1 <load-on-startup /> </ Servlet> <servlet-mapping> <servlet-name> Flex </ servlet-name> <url-pattern> / MessageBroker / * </ url-pattern> </ Servlet-mapping> <servlet> <servlet-name> primavera-mvc </ servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </ servlet-class> <load-on-startup> 1 <load-on-startup /> </ Servlet> <servlet-mapping> <servlet-name> primavera-mvc </ servlet-name> <url-pattern> / primavera / * </ url-pattern> </ Servlet-mapping> Aqui, o contexto de aplicao pai est sendo montado a partir de um grupo de arquivos que terminam em -context.xml contidas no / WEB-INF/spring / diretrio. O contexto da criana para a configurao da Flex-especficos seriam construdos (por conveno) de / WEB-INF/flex-servlet.xml eo contexto para os controladores Spring MVC seria construda a partir de / WEBINF/spring-mvc-servlet . xml . Esta abordagem fornece uma boa separao das preocupaes e permitir Spring 2.5 + controladores anotada a trabalhar com sua configurao padro. Uma abordagem alternativa manter as coisas sob uma consolidada DispatcherServlet contexto. O lado negativo desta abordagem que ele requer uma configurao adicional manual, e voc tem que modificar a

sua abordagem de mapeamento de acordo, como o mapeamento de primavera / / * para o DispatcherServlet , mapeamentoMessageBroker / / * para a Primavera de gesto MessageBroker atravs do mapeamento XML de configurao tag namespace, e modificar qualquer canal de definies BlazeDS em conformidade. Voc poderia substituir a estratgia de mapeamento padro da mensagem broker- tag da seguinte forma: <flex:message-broker> <flex:mapping pattern="/messagebroker/*" /> </ Flex: mensagem de corretor-> e voc teria para dar conta do mapeamento / primavera / * em seu canal de definies BlazeDS. Por exemplo: <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <Endpoint url = "http:// {server.name}: {server.port} / {} context.root primavera / / MessageBroker / amf" class = "flex.messaging.endpoints.AMFEndpoint" /> <properties> <polling-enabled> false </ pesquisa-enabled> </ Properties> </ Channel-definition> Alm de definir a estratgia de mapeamento consolidado, voc tambm ter que habilitar manualmente o correto HandlerMapping e HandlerAdapter para os controladores Spring MVC , como descrito na documentao do Spring MVC , devido ao fato de que se alternam HandlerMapping e HandlerAdapter feijo so configuradas automaticamente quando se utiliza a mensagem de corretor- tag.

2.6. Usando Spring Destinos de gesto do cliente Flex


Definio explcita de canal uma exigncia quando se utiliza destinos dinmicos (ou seja, qualquer destino que adicionado programaticamente e no definidos no BlazeDS services-config.xml, ou seja, os destinos criados pelo remoting destino tag e os vrios *- mensagem de destino tags) . Veja a documentao da Adobe para obter mais detalhes. A nica maneira que voc no tem que definir explicitamente o ChannelSet no cliente se

voc estiver usando destinos explicitamente definido no servicesconfig.xml (isto , no destinos dinmico) E voc compilar o seu cliente flexvel contra aquele arquivo seu destino usando o aplicativo de largura canal padro E voc compilar o seu cliente flexvel contra aquele arquivo

Mesmo se voc no estivesse usando destinos criados dinamicamente discutvel se uma boa idia para sempre compilar o seu cliente contra services-config.xml, assim acoplamento o seu cliente para a configurao do servidor. Muitas vezes, desejvel manter o seu cliente flex e seu cdigo do lado do servidor como dois mdulos distintos, mas compilando contra servicesconfig.xml borra as fronteiras entre esses mdulos. Nossa recomendao que geralmente mais limpo para manter a configurao do lado do cliente ChannelSets explicitamente contida dentro do mdulo cliente. Uma excelente maneira de fazer isso sem ter que embutir as

URLs em seu cdigo de cliente usar um framework ActionScript DI como Spring ActionScript (a Primavera projeto Extensions, anteriormente conhecida como Prana). Se voc optar por ir a rota de compilar o seu cliente contra o servicesconfig.xml, note que voc pode pelo menos manter as informaes de URL fora do cdigo do cliente usando ServerConfig.getChannel como descrito na documentao do BlazeDS referenciados.

2.7. Personalizao MessageBroker avanados


A inicializao do MessageBroker pela MessageBrokerFactoryBean logicamente consiste em duas fases:

Analisar o BlazeDS arquivos de configurao XML e aplicar as suas configuraes para um MessageBroker recm-criado Iniciando o MessageBroker e seus servios

Um especial MessageBrokerConfigProcessor interface callback fornecido, que permite o processamento personalizado para ser feito no recm-criado MessageBroker aps cada fase, antes que seja disponibilizado para processamento do pedido. Esta interface usada internamente pelo Spring Integrao BlazeDS, mas tambm est disponvel para uso geral na introspeco programtica avanada e personalizao do MessageBroker . Um costume MessageBrokerConfigProcessor pode ser configurado como um bean Spring e depois registrado no MessageBrokerFactoryBean atravs da configurao do processador tag. Por exemplo, dada uma implementao trivial para registrar algumas informaes adicionais sobre o MessageBroker: com.example pacote; org.springframework.flex.config.MessageBrokerConfigProcessor de importao; flex.messaging.MessageBroker de importao; flex.messaging.services.RemotingService de importao; MyDestinationCountingConfigProcessor public class {MessageBrokerConfigProcessor pblica MessageBroker processAfterStartup (broker MessageBroker) { RemotingService remotingService = (RemotingService) broker.getServiceByType (RemotingService.class.getName ()); if (remotingService.isStarted ()) { System.out.println ("O servio de Remoting foi iniciado com" + RemotingService.getDestinations () size () + "Destinos")..; } retorno corretor; } pblica MessageBroker processBeforeStartup (broker MessageBroker) { retorno corretor; } }

Esta classe pode ser configurado e registrado com o MessageBroker da seguinte forma: <flex:message-broker> ref="myConfigProcessor" <flex:config-processor /> </ Flex: mensagem de corretor-> <bean id="myConfigProcessor" class="com.example.MyDestinationCountingConfigProcessor" />

2.8. Usando Tradutores exceo personalizada


A fim de propagar informaes teis para o cliente Flex quando uma exceo ocorre no servidor, a exceo original deve ser traduzido em uma instncia deflex.messaging.MessageException . Se a lgica de traduo especial no aplicado, um genrico "Server.Processing" erro se propagar para o cliente que no d ao cliente a oportunidade de raciocinar sobre a verdadeira causa do erro de tomar medidas adequadas. Tradutores exceo especial so configurados por padro para transformar excees Spring Security em um apropriado MessageException , mas poderia tambm ser til para fornecer uma traduo personalizado para o seu prprio nvel de aplicao excees. Lgica de converso de costume exceo pode ser fornecida atravs de implementaes da org.springframework.flex.core.ExceptionTranslator interface. Estas implementaes devem ser configurados como feijo Primavera e, em seguida, registrado atravs do namespace XML de configurao da seguinte forma: <-! Tradutor exceo personalizado configurado como um bean Spring -> <bean id="myExceptionTranslator" class="com.foo.app.MyBusinessExceptionTranslator"/> <flex:message-broker> ref="myExceptionTranslator"/> <flex:exception-translator </ Flex: mensagem de corretor->

2.9. Usando personalizado Mensagem Interceptors


Mensagem personalizada interceptores podem ser usados para aplicar a lgica de processamento especial para mensagens AMF de entrada e sada em sua forma de-Java serializado. Por exemplo, um interceptor pode ser usado para inspecionar o contedo da mensagem recebida, ou para adicionar informaes extras para a mensagem de sada. Lgica de processamento mensagem personalizada fornecida atravs de implementaes da org.springframework.flex.core.MessageInterceptor interface. Estas implementaes devem ser configurados como feijo Primavera e, em seguida, registrado atravs do namespace XML de configurao da seguinte forma: <-! Interceptor mensagem personalizada configurado como um bean Spring -> <bean id="myMessageInterceptor" class="com.foo.app.MyMessageInterceptor"/>

<flex:message-broker> <flex:message-interceptor ref="myMessageInterceptor"/> </ Flex: mensagem de corretor->

2.9.1. Tratamento personalizado com recursos Mensagem Interceptors


Para fins de limpeza, um adicional de org.springframework.flex.core.ResourceHandlingMessageInterceptor inte rface est disponvel para uso. Interceptores que implementam esta interface estendida receber um retorno adicional garantido aps o processamento da mensagem concluda, se o processamento foi bem sucedido ou falhou devido a uma exceo sendo lanada pela Endpoint. Isso permite que o interceptor para limpar quaisquer recursos que ela pode ter sido utilizado. Essa interface estende a bsica MessageInterceptor interface, portanto, configurado da mesma forma usando a mensagem de interceptor- tag.

2.9.2. Personalizao da Cadeia Interceptor Mensagem


O quadro instala uma srie de pr- MessageInterceptors que so configuradas automaticamente atravs da utilizao do espao de nomes de configurao. Esses interceptores so configurados em uma ordem especfica, e qualquer interceptores personalizados so adicionados por padro at o incio da cadeia, na ordem em que sua mensagem interceptor- elementos aparecem. possvel especificar uma ordem explcita atravs da posio , antes e depois de atributos. A posio atributo permite que o usurio * substituir * o quadro fornecido interceptor nessa posio, ou simplesmente para especificar que o interceptor deve ser no incio ou no final da cadeia, usando a FIRST e LAST valores, respectivamente. O antes e depois de atributos permitem especificar * * posio em relao ao quadro fornecido filtros. A ordenao e aplicao do quadro fornecido filtros mostrado na tabela abaixo. Quadro 2.1. Alias padro Interceptor e Ordenao

Pseudnimo

Classe MessageInterceptor

PER_CLIENT_AUTH_INTERCEPTOR PerClientAuthenticationInterceptor message-broker/secure

LOGIN_MESSAGE_INTERCEPTOR

LoginMessageInterceptor

message-broker/secure

ENDPOINT_INTERCEPTOR

EndpointInterceptor

message-broker/secure channel

2.10. Fornecendo adaptadores Servio Personalizado


Usando o namespace XML de configurao instala automaticamente as implementaes necessrias de flex.messaging.services.ServiceAdapter para uso com o Remoting e servios de mensagem. Adaptadores de terceiros (tais como as previstas pelos projetos dpHibernate ou Gilead) pode ser configurado atravs doorg.springframework.flex.core.ManageableComponentFactoryBean . Esta implementao de feijo fbrica capaz de processar metadados de configurao arbitrariamente complexa fornecida em formato JSON (em vez de XML arbitrariamente complexas como na configurao do BlazeDS nativo) e homenageia a semntica do ciclo de vida (como a invocao adequada do inicializar mtodo) da ManageableComponent. Esses adaptadores personalizados podem ser utilizados por Primavera de gesto Remoting e destinos Mensagem por qualquer definindo seu id como o padro para o Remoting ou servio de mensagens, ou definindo a servio do adaptadoratributo para um destino especfico (consulte os captulos Remoting e Messaging para mais detalhe). Por exemplo, para usar o adaptador especial fornecido pela dpHibernate como o adaptador padro com o servio de Remoting, a configurao seria semelhante ao seguinte: <bean id="hibernate-object" class="org.springframework.flex.core.ManageableComponentFactoryBean "> <constructor-arg value="net.digitalprimates.persistence.hibernate.HibernateAdapter"/ > <property name="properties"> <value> {"Hibernate": {"SessionFactory": {"Categoria": "net.digitalprimates.persistence.hibernate.utils.HibernateUtil", "GetCurrentSessionMethod": "getCurrentSession" } } } </ Value> </ Property> <Feijo /> <flex:message-broker> <flex:remoting-service default-adapter-id="hibernate-object" /> </ Flex: mensagem de corretor->

Captulo 3. Exportao Beans da Primavera para Flex Remoting 3.1. Introduo


Usando uma mola de gesto MessageBroker permite feijo Spring para ser facilmente exportados para chamadas remoting direta de um cliente Flex. Esta abordagem bastante semelhante que foi tomada com as tecnologias de comunicao remota outro no Spring Framework ncleo. Remoting aplicada a

Primavera de gesto existentes feijo como uma preocupao configurao externa. O MessageBroker transparente manipula o processo de serializao e desserializao entre o AMF Flex formato de dados e Java.

3.2. Configurando o servio de Remoting


O BlazeDS RemotingService tem sido tradicionalmente configurados pela incluso de um arquivo remoting-config.xml na configurao XML BlazeDS. Quando se utiliza apenas de gesto Primavera remoting destinos, este arquivo de configurao pode ser deixado de fora completamente como a incluso da mensagem broker- tag na sua configurao do Spring far com que o RemotingService ser configurado com padres sensveis, se este j no existe em tempo de inicializao. O resultado final essencialmente equivalente ao mnimo, incluindo o seguinte remoting-config.xml na sua configurao BlazeDS: <? Xml version = "1.0" encoding = "UTF-8"?> <Servio id = "remoting-service" class = "flex.messaging.services.RemotingService"> <adapters> <ID de adaptador de definio = "java-objeto" class = "flex.messaging.services.remoting.adapters.JavaAdapter" default = "true" /> </ Adaptadores> <default-channels> ref="my-amf"/> canal> </ Default-channels> </ Service> Note que isso assume que j existe um equivalente em nvel de aplicativo padro de canais de configurao. recomendvel que voc defina o desejado servio especfico canais (ver exemplo abaixo), se no contar com uma configurao padro de todo o aplicativo. Se nenhum padro de todo o aplicativo existir, uma melhor estimativa ser feita por configurar o primeiro canal disponvel a partir do MessageBroker que usa um AMFEndpoint como o padro para o RemotingService . Se voc deseja ter um controle mais explcito sobre os padres que sero definidos no RemotingService , voc pode personaliz-los atravs da comunicao remota servioelemento filho do corretor de mensagemtag. Por exemplo: <flex:message-broker> <Flex: remoting servio-default-adaptador-id = "my-defaultremoting adaptador" default-channels = "my-amf, meu seguro-amf" /> </ Flex: mensagem de corretor-> Se voc tiver um arquivo remoting-config.xml para um aplicativo de legado BlazeDS, o RemotingDestinationExporter ser capaz de trabalhar de forma transparente com isso, permitindo que voc migre gradativamente para todos os destinos de gesto Primavera remoting.

3.3. Usando o

remoting destino

Tag

O destino remoting- tag de configurao pode ser usada para exportar existentes Primavera de gesto de servios para comunicao remota direta de um cliente Flex.Dada a definio de feijo seguintes Primavera para um productService bean: <bean id="productService" class="flex.samples.product.ProductServiceImpl" /> e assumindo a existncia de uma mola de gesto MessageBroker configurado atravs da mensagem de corretor de tag, o seguinte top-level remoting destino marca ir expor o servio para comunicao remota para o cliente Flex como um destino de servio remoto chamado productService : <! - Exponha o feijo productService para comunicao remota BlazeDS -> <flex:remoting-destination ref="productService" /> Por padro, o destino de servio remoto exposto ao cliente Flex ir utilizar feijo nome do bean sendo exportado como o ID de servio do destino, mas isso pode ser substitudo com o destino id- atributo no remoting-destino tag. Uma maneira alternativa de usar o remoting destino tag como um elemento filho de uma definio de feijo de nvel superior. Isto ainda mais conciso e funciona bem se voc no tem a necessidade de manter suas definies de domnio da camada de feijo em separado das preocupaes de infra-estrutura, tais como remoting Flex. (. Tenha em mente que mant-los separados pode levar a mais fcil de testabilidade da camada de domnio core) A seguir alcana o resultado equivalente ao exemplo anterior: <bean id="productService" class="flex.samples.product.ProductServiceImpl"> <flex:remoting-destination /> <Feijo /> Os mtodos que so expostos a ser chamado pelo cliente Flex pode ser mais bem controlado atravs do uso do incluem-mtodos e excluir mtodos de atributos doremoting destino tag. Os canais BlazeDS sobre o qual o destino exposto tambm pode ser controlado usando os canais de atributo. (. Estes atributos esto disponveis se utilizar o nvel superior ou a verso aninhada) Um exemplo mais extensivamente personalizada seria algo parecido com: <Flex: remoting destino ref = "productService" incluem os mtodos = "read, update" exclude-mtodos = "criar, apagar" canais = "my-amf, meu seguro-amf" /> O destino remoting- tag transparente configurando um RemotingDestinationExporter instncia do bean para cada bean sendo exportado. A sintaxe de feijo equivalente completa sem o apoio namespace seria:

<! - Exponha o feijo productService para comunicao remota BlazeDS -> <bean id="product" class="org.springframework.flex.remoting.RemotingDestinationExporte r"> <property name="messageBroker" ref="_messageBroker"/> <property name="service" ref="productService"/> <property name="destinationId" value="productService"/> <property name="includeMethods" value="read, update"/> <property name="excludeMethods" value="create, delete"/> <property name="channels" value="my-amf, my-secure-amf"/> <Feijo />

3.4. Feijo para exportao Remoting com @ RemotingDestination


O RemotingDestination @ anotao pode ser usado como uma alternativa para a tag XML remoting destino ao usar anotao baseada em configurao do Spring.RemotingDestination @ usado no nvel do tipo para indicar a classe que est sendo exportado. RemotingInclude @ e @ RemotingExclude so usados no mtodo nvel para marcar os mtodos que devem ser includos e excludos para comunicao remota. O exemplo a seguir ilustra o feijo productService configurado exclusivamente por meio de anotaes: flex.samples.product pacote; org.springframework.flex.remoting.RemotingDestination de importao; org.springframework.flex.remoting.RemotingExclude importao; org.springframework.flex.remoting.RemotingInclude importao; org.springframework.stereotype.Service de importao; @ Service ("productService") @ RemotingDestination (canais = {"my-amf", "my-secure-amf"}) public class ProductServiceImpl implementa {ProductService @ RemotingInclude pblica Produto ler (String id) { ... } @ RemotingExclude pblica Produto criar (Produto produto) { ... } @ RemotingInclude pblica Produto update (Produto produto) { ... } @ RemotingExclude public void delete (produto do produto) { ... }

3.4.1. Fornecendo exteriorizada Canal Ids


Uma desvantagem potencial do RemotingDestination @ abordagem a necessidade potencial de hard-ids cdigo AMF canal em vrias classes em toda a sua base de cdigo.A especificao dos canais propriedade opcional (se no especificado, os padres para o RemotingService ser usado), mas nos casos em que eles precisam ser especificados, no se deve precisar editar todas as instncias do RemotingDestination @ qualquer momento o canal identificadores de mudana. Para dar suporte a essa necessidade, a canais de atributo capaz de resolver valores fornecidos na ApplicationContext atravs de um PropertyPlaceholderConfigurer . Por exemplo, o exemplo anterior hardcoded poderia ser substitudo por: flex.samples.product pacote; org.springframework.flex.remoting.RemotingDestination de importao; org.springframework.flex.remoting.RemotingExclude importao; org.springframework.flex.remoting.RemotingInclude importao; org.springframework.stereotype.Service de importao; @ Service ("productService") @ RemotingDestination (canais ={"${ channel1 }","${ canal 2} "}) public class ProductServiceImpl implementa {ProductService ... } supondo que voc tenha um PropertyPlaceholderConfigurer fornecidas ao longo das linhas de: <bean class="org.springframework.beans.factory.config.PropertyPlaceholder Configurer"> <property name="properties"> <props> <prop key="channel1"> my-amf </ prop> <prop key="channel2"> my-secure-amf, my-amf </ prop> </ Props> </ Property> <Feijo />

Captulo 4. Comunicar-se com pontos de extremidade RESTful Spring MVC usando AMF 4.1. Introduo
Spring MVC 3 introduziu o suporte para a construo de servios RESTful usando o @ controlador modelo de programao. Isto permite para servir mltiplas representaes do mesmo contedo com base no que o cliente tenha solicitado. Por exemplo, uma extremidade RESTful nico pode ser configurado para servir HTML, XML ou JSON tudo a partir de um nico pedido manipulao de mtodo Java a classe Controller @. Esta abordagem permite uma implementao de servio nico para apoiar uma variedade de tipos diferentes

de clientes, fornecendo automaticamente a representao que o cliente deseja particular. No intuito de melhor apoiar Flex como um daqueles tipos de clientes, Spring BlazeDS Integrao acrescenta o apoio necessrio para ser capaz de suportar uma representao AMF de um recurso RESTful dadas.
AmfView e AmfHttpMessageConverter fornecem a base necessria a utilizao de

FMA com Spring MVC @ controladores. As implementaes so bastante semelhantes sMappingJacksonJsonView e MappingJacksonHttpMessageConverter que fornecem Spring out-of-the-box JSON. Os conceitos bsicos de configurao dessas classes so mostradas ao longo do restante deste captulo.

4.2. Usando AmfView


AmfView um Spring MVC Ver implementao que se destina a ser usado em

conjunto com o Spring MVC ContentNegotiatingViewResolver . Em particular, espera-se que ele ser configurado como um "default" de execuo vista singleton que pode tornar qualquer modelo MVC como AMF, em vez de precisar ter uma nica instncia por nome de vista lgico. O exemplo a seguir mostra uma configurao simples de ContentNegotiatingViewResolver para apoiar tanto JSON e representaes AMF: <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewR esolver"> <property name="mediaTypes"> <map> <entry key="json" value="application/json"/> <entry key="amf" value="application/x-amf"/> </ Mapa> </ Property> <property name="defaultViews"> <list> <bean class="org.springframework.web.servlet.view.json.MappingJacksonJson View" /> <bean class="org.springframework.flex.http.AmfView" /> </ List> </ Property> <Feijo />

O exemplo acima inclui definir o Mdias propriedade para mapear extenses de arquivo para tipos de mdia. Isso til para os clientes (como Flex) que nem sempre so capazes de definir um adequado Aceitar cabealho. Assim, dada a configurao acima, e um controlador simples, como o seguinte: @ Controlador @ RequestMapping ("/ contatos") public class {ContactsController @ Autowired privada IContactDAO contactDAO;

@ RequestMapping (mtodo RequestMethod.GET =) public List <contato> find () { retorno contactDAO.findAll (); } }

um HTTP GET pedido emitido para qualquer http://localhost/myapp/contacts.amf sem uma adequada Aceitar cabealho ou http://localhost/myapp/contacts com um cabealho de aceitar application / x-amf retornar a lista de contatos como uma mensagem AMF que podem ento ser serializado para um ArrayCollection de objetos ActionScript no cliente Flex.

4.3. Usando AmfHttpMessageConverter


AmfHttpMessageConverter um HttpMessageConverter aplicao que pode

converter de e para a AMF. , A fim de ser capaz de converter HTTP POST e PUT corpos mensagem de solicitao da AMF a objetos Java para ser passado como um @ RequestBody argumentos para Controlador @ mtodos, deve ser adicionado ao conversores usados por Spring MVC AnnotationMethodHandlerAdapter . , A fim de adicionar suporte AMF ao mesmo tempo, deixando o quadro do padro HttpMessageConverters no lugar, uma simples BeanPostProcessor como o exemplo a seguir pode ser usado: org.springframework.flex.samples.rest pacote; org.springframework.beans.BeansException importao; org.springframework.beans.factory.config.BeanPostProcessor de importao; org.springframework.flex.http.AmfHttpMessageConverter de importao; org.springframework.http.converter.HttpMessageConverter de importao; org.springframework.util.ObjectUtils de importao; org.springframework.web.servlet.mvc.annotation.AnnotationMethodHand lerAdapter de importao; HandlerAdapterPostProcessor public class {BeanPostProcessor postProcessBeforeInitialization public Object (Objeto de feijo, String beanName) {throws BeansException retorno de feijo; } postProcessAfterInitialization public Object (Objeto de feijo, String beanName) {throws BeansException if (feijo instanceof AnnotationMethodHandlerAdapter) { AnnotationMethodHandlerAdapter adaptador = (AnnotationMethodHandlerAdapter) de feijo; HttpMessageConverter <?>[] conversores adapter.getMessageConverters = ();

adapter.setMessageConverters ((HttpMessageConverter <?>[]) ObjectUtils.addObjectToArray (conversores, AmfHttpMessageConverter nova ())); } retorno de feijo; } }

Com essa configurao no lugar, e um controlador, tais como o seguinte: @ Controlador @ RequestMapping ("/ contatos") public class {ContactsController @ Autowired privada IContactDAO contactDAO; @ RequestMapping (mtodo RequestMethod.POST =) Fale criar pblica (@ RequestBody Contato contato) { contactDAO.create retorno (contato); } }

o cliente Flex pode enviar um HTTP POST com um pedido ActionScript Fale serializados para AMF no corpo da mensagem para http://localhost/myapp/contacts para persistir esse contato ao banco de dados.

4.4. Interagindo com pontos de extremidade RESTful AMF do Cliente Flex


Interagir efetivamente com um servio RESTful a partir do cliente Flex usando AMF geralmente uma questo de descer a algumas APIs do Flash de nvel inferior, comoflash.net.URLRequest e flash.net.URLStream . Existem algumas limitaes forma como uma aplicao Flash / Flex pode interagir com um servio REST de dentro do browser. Estas limitaes so geralmente impostas pelo navegador host, e so semelhantes s limitaes impostas em pginas HTML. Felizmente, Spring MVC j responsvel por limitaes do navegador, e fornece solues utilizvel. A primeira limitao importante que o Flash player normalmente no capaz de definir o Accept cabealho para o pedido de application / x-amf ao usar URLRequest .Primavera suporta mapeamento de extenses de arquivo para tipos de mdia como uma alternativa (veja o exemplo Seo 4.2, "Usando AmfView" configurao de como isso feito). A segunda limitao importante a incapacidade de adequadamente enviar HTTP PUT e APAGAR pedidos. Spring fornece o HiddenHttpMethodFilter para ajudar a lidar com isso. Com o filtro configurado, uma APAGAR pedido (por exemplo) pode ser simulado atravs do envio de um POST solicitao para uma URL comohttp://localhost/myapp/contacts/1.amf?_method=DELETE .

Um completo InSync repouso exemplo de interagir com um Spring MVC @ Controller agora fornecida no Test Drive . Esta amostra de duplicatas a funcionalidade completa do pedido completo InSync que foi originalmente construdo utilizando Remoting BlazeDS. Ele mostra em detalhes como contornar limitaes Flash player para uso AMF para interagir com um servio RESTful que a suporta.

Captulo 5. Suporte aprimorado AMF 5.1. Personalizando AMF Converso


Enquanto BlazeDS fornece um excelente suporte para a serializao / desserializao entre Java beans e AMF, existem algumas limitaes nos tipos de objetos que podem ser manuseados out-of-the-box. Por exemplo, objetos a ser convertido para / de AMF deve ter mtodos getter e setter e deve ter um construtor no-arg pblico. , A fim de permitir uma abordagem mais flexvel, ns fornecemos um mecanismo de extenso para facilmente personalizar a AMF processo de converso tipo atravs de configurao do Spring.

5.1.1. Configurando AMF Converso de tipo


A especial da Primavera-aware PropertyProxy (uma interface BlazeDS especficas para personalizar a serializao) fornecida que usa Spring PropertyAccessor interface para a introspeco tipo e delegados para a Primavera 3 + ConversionService para permitir lgica adicional propriedade converso para ser conectado durante a serializao / desserializao processo. Este reforo PropertyProxy opcionalmente suporta:

O acesso de campo direto para propriedades (em vez de exigir getters e setters) Uso de um construtor alternativo anotado com @ AmfCreator para desserializao (em vez de um pblico no-arg construtor) Ignorando certas propriedades durante a serializao e / ou desserializao quando marcadas com @ AmfIgnore ou AmfIgnoreField @

Para aproveitar o apoio AMF melhorada, uma instncia de SpringPropertyProxy deve ser registrado para cada tipo de indivduo que poderia ser convertido para / de AMF.Um conjunto especializado de MessageBrokerConfigProcessors so fornecidos para que tome diversas abordagens para localizar os tipos a ser registrado: Tabela 5.1. Manuseio MessageBrokerConfigProcessors AMF

Classe

org.springframework.flex.core.io.HibernateConfigProcessor

U m e "T

org.springframework.flex.core.io.JpaHibernateConfigProcessor

U ti e

Classe

"T

U org.springframework.flex.core.io.ClassPathScanningAmfConversionServiceConfigProcessor p C

Configurao explcita de uma dessas classes feita da mesma forma com qualquer outro MessageBrokerConfigProcessor , definindo a aplicao desejada, como feijo e fiao-lo no MessageBroker usando a configurao do processador tag namespace. 5.1.1.1. Usando mapeamento de campo direto Por padro, o SpringPropertyProxy ir ler e gravar valores de propriedade durante a AMF converso usando JavaBean padro obter e definir mtodos, assim como o padro BlazeDS BeanProxy faz. Alternativamente, voc muitas configur-lo para acessar campos diretamente. Isso til em casos como quando voc tem uma classe que no expe getter pblico ou mtodos setter, como as seguintes: @ Entity public class {PackagePrivatePerson @ Id @ GeneratedValue (strategy = GenerationType.AUTO) Integer id; @ Version @ Column (name = "verso") Verso inteiro; String nome; }

, A fim de ser capaz de converter uma classe de / para a AMF, voc deve configurar o useDirectFieldAccess propriedade de um dos processadores de configurao fornecido AMF. Por exemplo: <flex:message-broker> ref="myJpaConfigProcessor" <flex:config-processor /> </ Flex: mensagem de corretor-> <bean id="myJpaConfigProcessor" class="org.springframework.flex.core.io.JpaConfigProcessor"> <property name="useDirectFieldAccess" value="true" />

<Feijo />

5.1.1.2. Desserializar objetos imutveis com @ AmfCreator Por padro, o SpringPropertyProxy tentar instanciar tipos usando um construtor no-arg pblico durante o processo de desserializao AMF. Tipos que no tm um construtor no-arg deve fornecer um construtor alternativo anotado com org.springframework.flex.core.io.AmfCreator , cujas propriedades so, por sua vez anotado comorg.springframework.flex.core.io.AmfProperty , a fim para ser elegvel para a converso AMF. Por exemplo: public class {ImmutableValueObject final String foo; zoo Integer final; @ AmfCreator pblica ImmutableValueObject (@ AmfProperty ("foo") String foo, @ AmfProperty ("zoo") Integer zoo) { this.foo = foo; this.zoo = zoo; } public String getFoo () { retorno this.foo; } pblica Integer getZoo () { retorno this.zoo; } }

5.1.1.3. Ignorando Propriedades Durante AMF Converso s vezes desejvel ignorar certas propriedades durante a serializao e / ou a desserializao. Por exemplo, pode haver uma propriedade em seu objeto de Java que voc no deseja sempre enviar para o cliente Flex. SpringPropertyProxy fornece um meio de conseguir isso adicionando algumas anotaes adicionais para seus objetos Java. A anotao org.springframework.flex.core.io.AmfIgnore podem ser usados em mtodos getter e setter. Anotar um mtodo getter com @ AmfIgnore far com que a propriedade a ser ignorados durante a serializao para AMF, e anotar um mtodo setter com @ AmfIgnore far com que a propriedade a ser ignorados durante a desserializao da AMF. Por exemplo: public class {IgnorablePropsObject / / Vai ser ignorado em ambos serializao e desserializao private String foo; / / Vai ser ignorado apenas na serializao

bar private String; / / Vai ser ignorado apenas na desserializao private String baz; @ AmfIgnore public String getFoo () { retorno foo; } @ AmfIgnore public void setFoo (String foo) { this.foo = foo; } @ AmfIgnore getBar public String () { retorno bar; } public void setBar (String bar) { this.bar = bar; } public String getBaz () { baz retorno; } @ AmfIgnore public void setBaz (String baz) { this.baz = baz; } }

Ao usar mapeamento de campo direto, a anotao org.springframework.flex.core.io.AmfIgnoreField pode ser usado em campos para obter uma funcionalidade equivalente.Por exemplo: public class {IgnorableFieldsObject / / Vai ser ignorado em ambos serializao e desserializao @ AmfIgnoreField private String foo; / / Vai ser ignorado apenas na serializao @ AmfIgnoreField (onDeserialization = false) bar private String; / / Vai ser ignorado apenas na desserializao @ AmfIgnoreField (onSerialization = false) private String baz; }

5.1.1.4. Fornecimento de conversores personalizados Personalizar o modo como os objetos Java so convertidos de / para AMF uma questo de fornecimento de Primavera do tipo 3 Conversores e registrlos com oConversionService . Os processadores de configurao desde AMF todos se estendem desde org.springframework.flex.core.io.AbstractAmfConversionServiceConf igProcessor , que fornece um mtodo modelo para registrar conversores adicionais. Um tal uso para este seria se voc quisesse usar a digitalizao classpath para localizar AMF-elegveis tipos, mas ainda queria registrar o Hibernate especializados conversores. O exemplo a seguir ilustra isso: Primeiro, vamos configurar o ClassPathScanningAmfConversionServiceConfigProcessor usando o Spring 3 estilo Configurao @: pacote com.foo.config; org.springframework.context.annotation.Bean importao; org.springframework.context.annotation.Configuration de importao; org.springframework.core.convert.converter.ConverterRegistry de importao; org.springframework.flex.core.io.ClassPathScanningAmfConversionServ iceConfigProcessor de importao; org.springframework.flex.core.io.HibernateProxyConverter de importao; org.springframework.flex.core.io.PersistentCollectionConverterFacto ry importao; @ Configurao CustomConverterConfiguration public class { @ Bean myConfigProcessor ClassPathScanningAmfConversionServiceConfigProcessor pblica () { retorno ClassPathScanningAmfConversionServiceConfigProcessor novo ("com.foo.domain") { @ Override protegidos configureConverters void (ConverterRegistry registro) { registry.addConverter (HibernateProxyConverter new ()); registry.addConverterFactory (novo PersistentCollectionConverterFactory ()); } }; } }

Ento, ns simplesmente fazer referncia que o processador de configurao, como de costume em nossa MessageBroker configurao:

<flex:message-broker> ref="myConfigProcessor" <flex:config-processor /> </ Flex: mensagem de corretor->

5.2. Trabalhando com Hibernate


Usando o Hibernate para lidar com preocupaes de persistncia muito comum em aplicaes Spring. Um problema comum surge, porm, ao tentar usar diretamente Hibernate-carregado entidades em mensagens AMF com BlazeDS. Em essncia, o mecanismo padro de serializao BlazeDS tenta andar o grfico inteiro objeto, forando a inicializao de quaisquer associaes preguiosamente carregados que podem ser encontrados. Isso geralmente leva a erros ou LazyInitialization, ou (se estiver usando uma soluo como Spring OpenSessionInViewFilter ) o indesejvel n +1 seleciona cenrio. O outro problema que se coloca quando as associaes so avidamente carregado, mas ainda envolto em uma coleo Hibernate especficos ou proxy, o que pode causar resultados inesperados no caminho da associao serializado. Primavera Integrao BlazeDS fornece uma soluo simples que permitir o uso direto de entidades Hibernate em mensagens AMF. Alguns especiais Hibernateawareconversores so instalados automaticamente que entender a maneira correta de converter Hibernate tipos especficos quando eles so encontrados.

5.2.1. Configurando o Hibernate Entity suporte de serializao / desserializao


O Hibernate suporte de serializao / desserializao ser automaticamente configurado com um padro ConversionService na inicializao do aplicativo se Hibernate detectado no classpath. Este apoio concedido sob a forma de dois diferentes MessageBrokerConfigProcessors - um para "nativo" Hibernate e um para o uso do Hibernate como um provedor JPA. O correto ser configurado com base na presena do api JPA no classpath. O comportamento padro do SpringPropertyProxy (no caso de ambos os "nativos" Hibernate e JPA), quando esse apoio configurado como segue:

Verifique cada propriedade do bean para ver se ele um Proxy contm Hibernate especficos ou Recolha Se o Proxy / Collection inicializado, desembrulhe o valor subjacente para serializao Se o Proxy / Collection inicializado, o retorno nulo para o valor a ser serializado

Na hora da inicializao, API do Hibernate Os metadados so usados para determinar quais os tipos de registrar com BlazeDS usar o especializado SpringPropetyProxy . O comportamento padro pode ser prorrogado / substitudos por implantar manualmente ou o HibernateConfigProcessor , JpaHibernateConfigProcessor , ou alguma outra extenso personalizada de AbstractAmfConversionServiceConfigProcessor como um bean Spring e fiao-lo no MessageBroker atravs da configurao de processador tag

namespace XML, como mostrado na Seo 5.1.1, "Converso de tipo Configurando AMF" .

5.3. De utilizar a Digitalizao Classpath para AMF Configurao


Como uma alternativa ao uso da API Hibernate Metadados para encontrar tipos em que o SpringPropertyProxy deve ser aplicado, um processador de configurao mais geral fornecido como uma alternativa que, ao contrrio, encontrar tipos usando o suporte do Spring varredura interna classpath. A implementao scans recursivamente a partir de um pacote de base, e todas as classes encontradas no scan ser registrado para ter o SpringPropertyProxy aplicada a eles para a converso AMF. O processo de digitalizao podem ser personalizadas mais configurar org.springframework.core.type.filter.TypeFilter implementae s para incluir ou excluir tipos de correspondncia. Por exemplo, Spring fornece out-of-the-box baseado em RegEx e anotao baseada TypeFilter implementaes. A maneira mais fcil de configurar esta aplicao usando o suporte de configurao Java desde da Primavera de 3 +, como no exemplo a seguir: pacote com.foo.config; org.springframework.context.annotation.Bean importao; org.springframework.context.annotation.Configuration de importao; org.springframework.core.convert.converter.Converter de importao; org.springframework.core.convert.converter.ConverterRegistry de importao; org.springframework.core.type.filter.AnnotationTypeFilter importao; org.springframework.flex.core.io.ClassPathScanningAmfConversionServ iceConfigProcessor de importao; org.springframework.flex.core.io.HibernateProxyConverter de importao; org.springframework.flex.core.io.PersistentCollectionConverterFacto ry importao; @ Configurao ApplicationConfig public class { @ Bean amfConfigProcessor ClassPathScanningAmfConversionServiceConfigProcessor pblica () { ConfigProcessor ClassPathScanningAmfConversionServiceConfigProcessor = ClassPathScanningAmfConversionServiceConfigProcessor novo ("com.foo.domain") { @ Override protegidos configureConverters void (ConverterRegistry registro) { registry.addConverter (HibernateProxyConverter new ()); registry.addConverterFactory (novo PersistentCollectionConverterFactory ()); registry.addConverter (MyCustomConverter new ());

} }; configProcessor.addIncludeFilter (novo AnnotationTypeFilter (MyCustomAmfAnnotation.class)); retorno configProcessor; } }

<flex:message-broker> ref="amfConfigProcessor" <flex:config-processor /> </ Flex: mensagem de corretor->

Captulo 6. Protegendo Destinos BlazeDS com Spring Security 6.1. Introduo


Spring Security fornece uma alternativa extremamente flexvel para o recipiente de base de apoio de segurana desde out-of-the-box com BlazeDS. Primavera Integrao BlazeDS fornece suporte integrao explcita para incorporar Spring Security suavemente em sua aplicao Flex / BlazeDS. Spring Security oferece uma riqueza de diferentes opes de configurao, mas ao invs de ir para as muitas combinaes diferentes aqui, vamos deixar a maioria de que a documentao do Spring Security.

6.1.1. A simples configurao do Spring Security 3


Aqui est uma configurao de segurana simples Primavera de partida para uso em conjunto com os recursos de integrao explcita fornecida pelo Spring BlazeDS integrao que deve ser um ponto de partida para garantir uma aplicao Flex tpico: <Feijo: feijo xmlns = "http://www.springframework.org/schema/security" xmlns: feijo = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security3.0.xsd "> <http entry-point-ref="entryPoint"> enabled="false"/> <anonymous </ Http> <beans:bean id="entryPoint" class="org.springframework.flex.security3.FlexAuthenticationEntryPo int"/>

<authentication-manager> <authentication-provider> <user-service> <user name="john" password="john" authorities="ROLE_USER" /> <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /> <user name="guest" password="guest" authorities="ROLE_GUEST" /> </ User-service> </ Autenticao do provedor> </ Autenticao gerente-> </ Feijo: feijo> Com uma aplicao Flex tpicas, esta abordagem preferido ao uso de configurao do Spring Security auto-config. Auto-config configura um nmero de caractersticas que normalmente no so necessrios com uma aplicao Flex. Por exemplo, auto-config estabelece um padro interceptar urlentrada que requer autenticao para todos os caminhos URL dentro do aplicativo. O FlexAuthenticationEntryPoint retornar uma resposta de erro adequada AMF quando tal URL so hit via normal de processamento de comunicao Flex, mas chamada geralmente deve ser considerado um ltimo recurso. Maior parte do processamento de autenticao do tempo, e autorizao deve acontecer mais profundas dentro do processo de manipulao BlazeDS pedido, onde h oportunidades para fornecer informaes mais teis para o cliente. (Veja Protegendo Canais BlazeDS pelo Caminho URL Endpoint de uma alternativa para interceptar url- que gera respostas AMF adequada para o cliente Flex.) Recomenda-se comear pelo mais simples, como neste exemplo, e adicionar os recursos adicionais, conforme necessrio.

6.1.2. Permitindo a Primavera cadeia de filtros de segurana no web.xml


Para uma configurao tpica com Spring Security, fundamental lembrar-se de permitir que a cadeia de Spring Security filtro adicionando a entrada apropriada para web.xml: <filter> <filter-name> springSecurityFilterChain </ filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </ filterclass> </ Filter> <filter-mapping> <filter-name> springSecurityFilterChain </ filter-name> <url-pattern> / * </ url-pattern> </ Filter-mapping>

Vamos assumir a configurao acima est no lugar para o restante dos exemplos neste captulo. Para detalhes adicionais sobre as muitas opes disponveis na configurao e uso do Spring Security, consulte o projeto de documentao .

6.2. Configurando a Integrao Spring Security


Primavera de integrao de segurana ativado atravs do seguro elemento filho do corretor de mensagem- tag. A configurao mais simples possvel seria: <flex:message-broker> <flex:secured /> </ Flex: mensagem de corretor-> Isso permite que as caractersticas bsicas de segurana. Um especial BlazeDS LoginCommand implementao automaticamente instalado que permite que as solicitaes ChannelSet.login ChannelSet.logout e se integrar com Spring Security mecanismos de Autorizao. Alm disso, o especial LoginCommand permite s autoridades Spring Security concedido a ser referenciado em restries BlazeDS XML segurana. Por exemplo, se estivssemos usando um BlazeDS tradicionais remoting destino definido no remoting-config.xml, poderamos ter algo como o seguinte: id="productService"> <destination ... <security> <security-constraint> <auth-method> personalizada </ auth-method> <roles> <role> role_user </ role> </ Papis> </ Security-constraint> </ Security> <Destino /> Como voc pode ver, estamos fazendo referncia ao "role_user" autoridade da nossa configurao simples Spring Security. A invocao deste destino remoto faria com que o fornecido LoginCommand a ser invocado para tanto verificar se o usurio est logado e verificar se eles tm o papel apropriado. Violao de qualquer resultar em uma exceo sendo lanada pela Spring Security. Fornecidas LoginCommand imita tanto quanto possvel, a funcionalidade do Spring Security AbstractAuthenticationProcessingFilter incluindo a tomar as medidas necessrias para coordenar os recursos adicionais Spring Security, tais como, Remember Me , Proteo fixao de sesso , e Gerenciamento de Sesses simultneas no momento do incio do processo de autenticao. Alm disso, ele ir invocar qualquer configurado LogoutHandlers como parte do processo de logout, incluindo tanto os auto-configurado pelo Spring Security, e qualquer que possa ser fornecida pelo desenvolvedor do aplicativo.

6.2.1. Usando um LoginCommand personalizado


Enquanto o fornecido LoginCommand abrange muitos dos cenrios mais comuns de configurao de segurana, s vezes pode ser til para fornecer sua prpria implementao que tanto se estende SpringSecurityLoginCommand , durante a utilizao do container Spring para fio em todas as dependncias necessrias. Um costumeLoginCommand podem ser fornecidos atravs do comando de login- atributo do seguro tag da seguinte forma: <flex:message-broker>

login-command="myLoginCommand"/> <flex:secured </ Flex: mensagem de corretor-> <bean id="myLoginCommand" class="com.foo.app.security.CustomLoginCommand"/> Se o seu costume LoginCommand estende SpringSecurityLoginCommand , as seguintes propriedades sero autowired pelo continer, se possvel:

rememberMeServices sessionAuthenticationStrategy logoutHandlers

6.2.2. Acessando Detalhes do Usurio


Ao usar o ChannelSet.login chamada de API do cliente Flex com o Spring integrao de segurana ativado, o ResponseEvent resultando disparados do lado do cliente aps a concluso ir conter informaes adicionais que podem ser inspecionados sobre o usurio atual. O nome e as autoridades sero extrados do objeto de autenticao e adicionado ao corpo da mensagem de resposta. Esta informao, por exemplo, pode ento ser usado para exibir condicionalmente diferentes partes da interface do usurio com base na identidade do usurio e papis concedida: var token: = AsyncToken myChannelSet.login ("jeremy", "Atlanta"); token.addResponder ( nova AsyncResponder ( function (event: ResultEvent, token: Object = null): void { if (event.result.authorities.indexOf ("ROLE_ADMIN")> = 0) { displayAdminPanel (event.result.name); Else {} displayUserPanel (event.result.name); } }, function (event: FaultEvent, token: Object = null): void { displayErrorMessage ("Falha no login:" + event.fault.faultString); } ) );

6.2.3. Traduo de segurana Exception


Outra caracterstica que instalado automaticamente quando o seguro tag utilizada a traduo automtica de qualquer exceo SpringSecurityException jogado ao SecurityException BlazeDS adequada. As excees so capturados e convertidos o prprio ponto na cadeia de execuo de tal forma que ele ir resultar na mensagem de erro adequada AMF sendo serializado e enviado de volta para o cliente. Esta alternativa para o comportamento normal Spring Security, onde um filtro na cadeia de captura a exceo e envia de volta um cdigo de status HTTP correspondente. O problema com o envio de volta cdigos de status HTTP diferente de 200 que isto faz com que o cliente Flex para lanar uma exceo genrica e um tanto intil, e muitas vezes o cdigo de status no pode ser determinado a partir do cliente Flex. Enviando mensagens de erro especficas

AMF vez provoca umaFaultEvent para ser jogado do lado do cliente que contm o cdigo de falha de segurana adequado que pode ser fundamentado sobre as medidas adequadas possam ser tomadas. Este comportamento equivalente ao do out-of-the-box recipiente baseado em mecanismos de segurana fornecidos com BlazeDS, de modo que o modelo de programao do lado do cliente permanece a mesma.

6.2.4. garantiu atributos de configurao


O seguro tag tem diversos atributos adicionais que permitem uma maior personalizao. Se voc no estiver usando ids Segurana Spring bean padro para o AuthenticationManager ou AccessDecisionManager , voc pode especificar suas referncias de feijo personalizado usando a correspondente autenticao-gerente e de acesso deciso gerenteatributos, respectivamente, sobre o seguro tag. A configurao da verso fornecida LoginCommand pode ainda ser controlado atravs do seguro tag. A sesso de flex-invalidar atributo controla se a sesso Flex atual invalidado quando o logout () mtodo chamado no LoginCommand , eo padro "true" se no especificado. A per-clientautenticao atributo transforma o modo de autenticao do BlazeDS por cliente quando verdadeiro, eo padro "false" se no especificado. Permitindo por cliente de autenticao far com que o contexto de segurana para no mais ser armazenado na sesso entre os pedidos e, assim, evitar o uso de quaisquer filtros Spring Security que dependem do contexto de segurana que esto disponveis na sesso, mas a integrao de autenticao e autorizao caso contrrio funcionar como esperado. (Veja os documentos BlazeDS para mais informaes sobre a diferena entre por sesso e por cliente de autenticao.)

6.3. Configurando o Endpoint e Segurana Destino


A integrao do Spring Security permite controle flexvel sobre como voc proteger seu aplicativo. Voc pode proteger endpoints BlazeDS de uma maneira semelhante segurana do Spring Security URL tradicional, e voc pode proteger os seus servios de Primavera usando o objeto existente muitos mecanismos de segurana do Spring Security como se voc estivesse escrevendo uma aplicao web tradicional.

6.3.1. Assegurar canais especficos BlazeDS


Voc pode definir restries de segurana em canais especficos BlazeDS usando o canal garantiu elemento filho do seguro tag. Por exemplo: <flex:message-broker> <flex:secured> <flex:secured-channel channel="my-amf" access="ROLE_USER" /> </ Flex: seguro> </ Flex: mensagem de corretor-> Isso resulta em qualquer pedido a ser encaminhado para o "meu-amf" canal para exigir que o usurio estar logado e ter a "role_user" autoridade. Se qualquer um deles violado, uma FaultEvent ser sinalizado no cliente.

6.3.2. Protegendo Canais BlazeDS pelo Caminho URL Endpoint

Voc pode definir restries de segurana em mltiplos canais BlazeDS de uma s vez utilizando o seguro-endpoint caminho- elemento filho do seguro tag. Neste caso, voc especificar um padro de URL a ser protegido em vez de uma ID de canal especfico. Por exemplo: <flex:message-broker> <flex:secured> <flex:secured-endpoint-path pattern="**/messagebroker/**" access="ROLE_USER" /> </ Flex: seguro> </ Flex: mensagem de corretor-> Isso resulta em qualquer pedido a ser encaminhado a qualquer canal cujo ponto de extremidade de URL contm "MessageBroker / /" no caminho para exigir que o usurio estar logado e ter a "role_user" autoridade. Se qualquer um deles violado, uma FaultEvent ser sinalizado no cliente.

6.3.3. Protegendo exportou servios Primavera


Anteriormente neste captulo, voc viu um exemplo do uso do BlazeDS de configurao XML para assegurar um destino BlazeDS de gesto. Uma vez que na maioria das vezes voc vai ser em vez definindo os destinos de feijo Primavera exportao usando o remoting destino tag, uma abordagem alternativa para garantir destinos necessrio. Este o lugar onde Spring Security que chega, como todos os seus mecanismos de autorizao existentes devem "simplesmente funcionar" quando a integrao de segurana ativado, usando o seguro tag.

Nota
Ao fixar destinos como nos exemplos abaixo, importante ter em mente que este recurso do Spring Security est usando Spring AOP. Por padro, Spring AOP utiliza proxies JDK dinmico. Como tal, se voc tiver necessidade de garantir mtodos em uma classe que no fazem parte de uma interface que a classe implementa, ento ter de ter o fator esses mtodos para fora em uma interface, ou configurar o Spring para uso CGLIB baseado proxies vez. Veja as referncias Primavera seguinte documentao para obter mais orientaes:

Proxies AOP Mecanismos de proxy

Um dos principais pontos fortes do Spring Security a vrios nveis de granularidade que lhe fornece ao proteger os seus servios de Primavera. Voc pode ir de proteger a sua camada de servio toda em uma declarao concisa: <global-method-security> <protect-pointcut expression="execution(* com.mycompany.*Service.*(..))" access="ROLE_USER"/> </ Global-mtodo de segurana-> para controlar o acesso de uma forma mais refinada na camada de mtodo usando XML: <bean id="myService" class="com.mycompany.myapp.MyService"> <flex:remoting-destination/> <security:intercept-methods> <security:protect method="set*" access="ROLE_ADMIN" />

<security:protect method="get*" access="ROLE_ADMIN,ROLE_USER" /> <security:protect method="doSomething" access="ROLE_USER" /> </ Segurana: interceptar os mtodos> <Feijo /> ao uso de uma combinao de XML e anotaes: <security:global-method-security jsr250-annotations="enabled"/> secured-annotations="enabled" ... <flex:remoting-destination ref="myBankServiceImpl" />

BankService interface pblica { @ Secured ("IS_AUTHENTICATED_ANONYMOUSLY") pblica Conta readAccount (Long id); @ Secured ("IS_AUTHENTICATED_ANONYMOUSLY") Conta pblico [] findAccounts (); @ Secured ("ROLE_TELLER") ps Conta pblica (conta Conta, dobro); }

at mesmo mais refinado ACL baseada em permisses de objeto de domnio. Para mais detalhes sobre as opes disponveis, consulte a documentao do Spring Security.

Captulo 7. Integrao com o servio de mensagens BlazeDS 7.1. Introduo


O BlazeDS MessageService fornece uma abstrao comum para a comunicao assncrona de mensagens estilo que em ltima anlise, agnstico com o protocolo de mensagens a ser utilizado no lado do servidor. As mensagens podem ser passadas exclusivamente entre clientes Flex, a partir de POJOs Java para clientes subscrito Flex, Flex para clientes de manipuladores de mensagem POJO, ou entre praticamente qualquer combinao. Usando a Primavera de gesto MessageBroker habilita o suporte para o uso BlazeDS nativos AMF de mensagens, sistema de mensagens JMS baseado em abstraes comprovada e simples Spring JMS, ou mensagens atravs de Integrao do Spring MessageChannel abstrao, tudo a partir de um modelo de programao comum. O mesmo do Consumidor e Produtor APIs so usados para interagir com destinos mensagem do cliente Flex, independentemente de qual protocolo de mensagens subjacentes est a ser usado no servidor. Como tal, este captulo se concentrar principalmente em configurar e usar os tipos de destino vrias mensagens no lado do servidor. Para mais detalhes sobre como usar o Consumer e Producer APIs no cliente, consulte a documentao do BlazeDS.

7.2. Configurando o Servio de Mensagem


O BlazeDS MessageService tem sido tradicionalmente configurados pela incluso de um arquivo de mensagens-config.xml na configurao XML BlazeDS. Quando se utiliza apenas de gesto Primavera destinos mensagem, este arquivo de configurao pode ser deixado de fora completamente como a incluso da mensagem broker- tag na sua configurao do Spring far com que o MessageService ser configurado com padres sensveis, se este j no existe em tempo de inicializao. O resultado final essencialmente equivalente ao mnimo, incluindo a seguinte mensagem-config.xml na sua configurao BlazeDS: <? Xml version = "1.0" encoding = "UTF-8"?> <Servio id = "mensagem de servio" class = "flex.messaging.services.MessageService"> <adapters> <Adaptador definio id = "actionscript" class = "flex.messaging.services.messaging.adapters.ActionScriptAdapter" default = "true" /> </ Adaptadores> <default-channels> ref="my-polling-amf"/> canal> </ Default-channels> </ Service> Note que isso assume que j existe um equivalente em nvel de aplicativo padro de canais de configurao. recomendvel que voc defina o desejado servio especfico canais (ver exemplo abaixo), se no contar com uma configurao padro de todo o aplicativo. Se nenhum padro de todo o aplicativo existir, uma melhor estimativa ser feita por configurar o primeiro canal disponvel a partir do MessageBroker que usa um AMFEndpoint com polling habilitado como padro para o MessageService . Se voc deseja ter um controle mais explcito sobre os padres que sero definidos no MessageService , voc pode personaliz-los atravs do servio de mensagem-elemento filho do corretor de mensagem- tag. Por exemplo: <flex:message-broker> <Flex: mensagem de servio-default-adaptador-id = "my-padro de mensagens adaptador" default-channels = "my-polling amf" /> </ Flex: mensagem de corretor-> Se voc tiver um arquivo de mensagens-config.xml para um aplicativo de legado BlazeDS, o MessageDestinationFactory ser capaz de trabalhar de forma transparente com isso, permitindo que voc migre gradativamente para todos os destinos Primavera de gesto de mensagens.

7.3. Usando Destinos Mensagem AMF


Para as necessidades de mensagens simples, onde no h requisitos para a durabilidade de mensagens, suporte a transaes, ou lgica de roteamento

avanado, o BlazeDS nativos destino da mensagem AMF-base a escolha ideal. Estes destinos podem ser totalmente configurado em um contexto de aplicao Primavera usando amensagem de destino tag namespace XML. Por exemplo, supondo que uma mola de gesto MessageBroker foi configurado, tudo que necessrio para criar um destino bsico chamado "evento-bus" com as configuraes padro o seguinte: <flex:message-destination id="event-bus" /> Isso configura um destino para usar o BlazeDS ActionScriptAdapter para lidar com as mensagens recebidas. As configuraes do destino pode ser ainda mais personalizado atravs de vrios atributos do destino mensagem tag. Aqui est um exemplo do "evento-bus" destino configurado com a maioria dos atributos disponveis: <Flex: mensagem de destino id = "evento-bus" mensagem corretor = "messageServiceBroker" canais = "my-voto-amf, meu seguro-amf" allow-subtpicos = "true" cluster-roteamento de mensagens = "broadcast" mensagem de tempo-para-viver = "1" enviar segurana restrio = "fooConstraint" inscrever-security-constraint = "barConstraint" assinatura-timeout minutos = "1" subtpico-separador = "/" acelerador-inbound-max-frequency = "500" acelerador-inbound poltica = "ERRO" acelerador de sada-max-frequncia = "500" acelerador de sada poltica = "IGNORE" /> A mensagem de broker- atributo uma referncia para o id de uma mola de gesto MessageBroker . Os canais de atributo permite que voc especifique uma lista delimitada por vrgula dos canais BlazeDS a ser utilizado (em ordem de preferncia) para este destino. Os atributos restantes correspondem s opes disponveis atravs da rede eservidor de configuraes quando a configurao de um destino de mensagem no BlazeDS XML especfico. Cada um desses atributos adicionais documentada no XSD para prestar assistncia de concluso de cdigo ao vivo. Para detalhes adicionais sobre seu uso, consulte a documentao do BlazeDS. A mensagem de destino tag serve como base para o jms-mensagem de destino e integrao de mensagens de destino tags de modo que as opes de configurao esto disponveis mesmo, no importa o tipo de subjacentes MessagingAdapter . O nico atributo disponveis na mensagem de destino tag que no est disponvel no JMS e implementaes de Integrao da Primavera o servio do adaptador- atributo, que pode ser usado para fornecer um costume ServiceAdapter atravs de uma referncia a uma ManageableComponentFactoryBean . Isto pode ser usado para fornecer a integrao com protocolos de mensagens adicionais no suportados diretamente pelo Spring Integrao BlazeDS. Ver Fornecer Adaptadores servio personalizado para obter informaes adicionais sobre como usar o ManageableComponentFactoryBean .

7.4. Usando Destinos Mensagem JMS

Para integrao com JMS, um especial JmsAdapter , desde que internamente faz uso de Spring JmsTemplate , DestinationResolver , DefaultMessageListenerContaine r e outras abstraes tais JMS para a interao simplificada com recursos JMS. A mensagem de jms-destino tag namespace XML usada para expor destinos como destinos JMS mensagem BlazeDS. Os atributos mnimos que devem ser especificados so o destino id e exatamente um dos jmsdestino , fila de nome , ou nome-topic . A JMSConnectionFactory de referncia tambm necessria, mas no precisa ser explicitamente especificado se j existe um configurado no contexto do aplicativo atual com um id "ConnectionFactory". Por exemplo, para configurar um destino da mensagem BlazeDS chamado "Chatin" que usa uma mola de gesto ActiveMQ fila JMS com uma instalao ActiveMQ local: <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616"/> <Feijo /> <bean id="chatInQueue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="queue.flex.chat.in"/> <Feijo /> <flex:jms-message-destination id="chatIn" jmsdestination="chatInQueue" /> Usando fila de nome ou tpico de nome far com que o destino a ser resolvido com uma mola DestinationResolver . O destino resolver, mensagem de conversor , e -manager transao atributos podem ser usados para definir referncias personalizado a uma Primavera managedDestinationResolver , MessageConverter , ou TransactionManagerrespectivamente.

7.5. Usando Destinos Primavera Mensagem Integrao


Para roteamento de mensagens com Integrao Spring, um especial IntegrationAdapter fornecido que capaz de enviar / receber mensagens atravs de umMessageChannel . Isto especialmente til quando voc tem mais complexas necessidades de roteamento de mensagens, como a ligao aos terminais e-mail ou FTP. Aintegrao de mensagens de destino tag namespace XML usada para expor um Integrao Primavera MessageChannel como um destino da mensagem BlazeDS. Por exemplo, para configurar um destino da mensagem BlazeDS chamado "chatOut" que usa uma mola de Integrao PublishSubscribeChannel : <integration:publish-subscribe-channel id="chatOutPubSubChannel" /> <flex:integration-message-destination id="chatOut" messagechannel="chatOutPubSubChannel" />

7.6. Envio de mensagens com a AMF MessageTemplate


Um conveniente MessageTemplate classe auxiliar fornecida que lhe permite enviar mensagens para qualquer BlazeDS MessageDestination a partir de um

POJO simples. Isso fornece uma abstrao agradvel sobre estilo de mensagens push que esconde os detalhes do protocolo de mensagens subjacentes. Seja usando um destino AMF simples baseado ou full-blown JMS, etc, o uso do MessageTemplate permanece o mesmo. A nica coisa que o MessageTemplate exige uma referncia a uma mola de gestoMessageBroker . Se o MessageTemplate configurado como um bean Spring, ele ir tentar auto detectar a MessageBroker de seu contexto de aplicao. Como um exemplo de como o MessageTemplate poderia ser usado, suponha que temos uma aplicao RESTful viagens que tem um console de administrao baseada em Flex, mas tambm expe uma API atravs de HTTP. Para dar o console de administrao uma viso "ao vivo" dos dados, ns queremos fazer atualizaes a qualquer momento para uma reserva de hotel novo criado. Dada a seguinte configurao em nosso contexto de aplicao: <flex:message-broker /> <bean id="defaultMessageTemplate" class="org.springframework.flex.messaging.MessageTemplate" /> <flex:message-destination id="bookingUpdates" /> e supondo que o cliente Flex est inscrito para o "bookingUpdates" destino, isto poderia ser alcanado com o cdigo do controlador seguinte: @ Controlador public class {BookingController modelo MessageTemplate privado; bookingService BookingService privado; @ RequestMapping (value = "/ reservas", method = RequestMethod.POST) createBooking public String (reserva Reserva) { = bookingService.saveBooking reserva (reserva); template.send ("bookingUpdates", da reserva); return "redirect: / reservas /" + booking.getId (); } @ Autowired public void setTemplate (MessageTemplate template) { this.template = modelo; } @ Autowired setBookingService public void (BookingService bookingService) { this.bookingService = bookingService; } }

Captulo 8. Criando e executando o Primavera exemplos de integrao BlazeDS 8.1. Introduo

Includo na distribuio do projeto uma coleo de amostras chamado BlazeDS Primavera Test Drive de Integrao. Este projeto amostras est configurado para ser construdo com Maven e quer executar via uma instncia Tomcat embutido usando o plugin do Maven Tomcat, ou ento importado para o Eclipse para rodar via WTP.

8.1.1. Maven Setup


A amostra construir requer Maven 2.2.0 ou superior. Porque a compilao compila vrios projectos diferentes Flex e AIR, ele pode exigir a definio da MAVEN_OPTS varivel para o seu ambiente para alocar mais memria do que o padro. A configurao encontramos funciona bem : MAVEN_OPTS = "-Xms256m-Xmx512m-XX: PermSize = 128m-XX: MaxPermSize = 256m"

8.1.2. Criando e executando o Test Drive


Uma vez que seu ambiente Maven configurado corretamente, cd para {raiz} projeto de distribuio / samples / Primavera-flex-testdrive e execute: mvn clean install

Primeiro sero construdos todos os projetos individuais Flex e finalmente montar o "testdrive" projeto WAR. Depois de construir com sucesso, se voc gostaria de executar o aplicativo a partir da linha de comando com uma instncia Tomcat embutido, execute: mvn tomcat: run

Uma vez que o aplicativo foi iniciado com sucesso, voc pode acessar as amostras atravs de walk- http://localhost:8080/testdrive/index.html

8.1.3. Usando BlazeDS 4 com Maven


Primavera Integrao BlazeDS BlazeDS 1.5 requer 4, mas como esta escrito o BlazeDS quatro artefatos ainda no foram publicados para Maven central. Os artefatos foram publicados na Primavera repositrio maven externo (como exigido para as compilaes de Integrao Primavera BlazeDS automatizado). O Test Drive j est configurado para usar este repositrio, mas para usar BlazeDS 4 em seus projetos Maven prpria, adicione a entrada seguinte repositrio (tanto para settings.xml ou pom.xml do projeto): <repository> <id> mola externa </ id> <name> Repositrio Primavera Externo </ name> <url> http://maven.springframework.org/external </ url> <releases> <enabled> true </ habilitada> </ Releases> <snapshots> <enabled> false </ habilitada> </ Snapshots> <Repositrio />

8.1.4. Baixar o Test Drive pr-embalados


Como uma convenincia para quem est adversos ao uso de Maven e s quer tirar o Test Drive instalado e funcionando rapidamente em Eclipse, prembalados compilaes do Test Drive pode ser baixado diretamente atravs dos links a seguir:

Primavera BlazeDS Test Drive Integrao com Spring 3.0

Descompacte o download e siga as instrues abaixo para importar para Eclipse, substituindo o diretrio descompactado no lugar do {raiz distribuio projeto} / path spring-flex-samples/spring-flex-testdrive.

8.1.5. Importao e executando o Test Drive no Eclipse


Os projetos individuais de unidade de teste so pr-configurado para ser importado no Eclipse e correr com WTP. (H uma srie de projetos individuais, assim voc pode querer considerar a criao de um espao de trabalho novo, ou pelo menos criar um novo conjunto de trabalho para gerenciar os projetos.) Recomendamos o uso do livre SpringSource Tool Suite para trabalhar com as amostras para que voc possa tirar o mximo partido do seu apoio Primavera extensa, mas qualquer verso do Eclipse 3.5 + WTP com deve funcionar. Para importar as amostras, selecione Arquivo-> Import ...-> Geral-> Existing Projects into Workspace e navegue at a raiz {} distribuio projeto / diretrio spring-flex-samples/spring-flex-testdrive e importar todos os projetos encontrado. H um projeto individual para cada amostra Flex, e um projeto WTP para o "testdrive" WAR. Uma vez que os projetos tenham sido importados, voc pode iniciar a aplicao web, selecionando o "testdrive" do projeto, boto direito do mouse e selecionar Run As-> Run on Server. As amostras foram mais exaustivamente testado no Tomcat 6.0, mas deve rodar em qualquer container Servlet 2.4 que suporta WTP. Uma vez que o aplicativo foi iniciado com sucesso, voc pode acessar as amostras atravs de walkhttp://localhost:8080/testdrive/index.html (Se executando em um servidor diferente do Tomcat, altere o nmero da porta conforme necessrio.)

Captulo 9. Trabalhando com o Addon Flex para a Primavera de Roo 9.1. Introduo
Spring Roo traz traz um novo nvel de produtividade para construo de aplicaes Java. A partir da Primavera de Roo Guia de Referncia: " Spring Roo um fcil de usar ferramenta de produtividade para a construo rpida de aplicativos corporativos na linguagem de programao Java. Ele permite que voc construa de alta qualidade, alto desempenho, aplicaes de lock-in livre empresa em poucos minutos. O melhor de tudo , Roo trabalha juntamente com o seu conhecimento em Java j existentes, habilidades e experincia. Voc provavelmente no vai precisar aprender nada de novo para usar Roo, como no h nenhuma nova linguagem ou plataforma de runtime necessrio. Voc programa simplesmente na sua forma normal e Java Roo simplesmente funciona, sentado no fundo cuidando das coisas que voc no quer se preocupar. " Para saber mais sobre Spring Roo si mesmo, voc encontrar inmeros recursos da pgina do projeto na http://www.springsource.org/roo

O Addon Flex para a Primavera de Roo tem como objetivo elevar o nvel de produtividade do desenvolvedor na construo de RIAs baseadas em Primavera com um cliente Flex atravs do cumprimento dos seguintes objetivos:

Oferecer a maneira mais rpida de obter um projeto Primavera configurado para usar BlazeDS Primavera Integrao configurado e funcionando. Eliminar a necessidade de executar manualmente tarefas repetitivas, tais como manter ActionScript e objetos de domnio Java em sincronia. Automatizar todo o tropeo de gerao de cdigo de artefatos Flex com foco em deixar os desenvolvedores fazem o que fazem melhor escrever cdigo.

9.1.1. Requisitos mnimos para o Addon Flex para a Primavera de Roo


Java 5 + Maven 2.2.0 + Spring Roo 1.1.0.M1

9.1.2. Instalar o Addon Flex para a Primavera de Roo


A verso atualmente lanada do Addon Flex para a Primavera de Roo 1.0.0.M1. O addon foi includo na distribuio Integrao Primavera BlazeDS 1.5.0.M1 e tambm est disponvel a partir da Primavera Repositrio Maven Milestones em http://maven.springframework.org/milestone sob o ID de grupo org.springframework.flex.roo.addon e id artefato org.springframework.flex.roo.addon .

Nota
O addon est atualmente sob forte desenvolvimento e uma verso atualizada 1.0.0.M2 devem estar disponveis no futuro prximo. Esta prxima verso estar disponvel via recurso Descoberta Addon of Spring Roo 1.1 +. 1.5.0.M1 conhecido por ser incompatvel com Roo 1.1 e acima. Veja a Primavera Flex fruns de suporte da comunidade, se voc estiver interessado em seguir junto com o desenvolvimento e experimentar o instantneo nightly builds. Em primeiro lugar, garantir que voc tenha Spring Roo 1.1.0.M1 configurado corretamente seguindo os passos encontrados aqui . Se voc no tiver feito isso, faa o download da Primavera Integrao BlazeDS 1.5.0.M1 distribuio projeto . Uma vez que voc tem um trabalho Primavera instalao Roo, voc pode instalar o Addon Flex simplesmente copiando-a {} spring_blazeds_dist / org.springframework.flex.roo.addon-1.0.0.M1.jar no $ ROO_HOME / bundle diretrio. Para verificar se o Addon Flex foi pego e ativados, comece Spring Roo partir de um diretrio limpo e executar o comando osgi lista scr . Voc dever verorg.springframework.flex.roo.addon.FlexCommands listados com um status de ativo .

9.1.3. Flex Addon para a Primavera de Roo Features


O Addon Flex para a Primavera de Roo fornece as seguintes funcionalidades de alto nvel:

Configurao automtica da Primavera necessrio, Maven, Eclipse e configurao de um padro de projeto Integrao Primavera BlazeDS. Gerao de Primavera Integrao BlazeDS @ RemotingDestination servios com recursos completos CRUD para uma determinada entidade. Sincronizao contnua de mudanas entre o ActionScript e as classes de domnio Java para comunicao remota AMF. Gerao de UI andaime que continuamente atualizado quando ocorrem alteraes nas classes correspondentes ActionScript ou Java. Client-side Flex gerao validador correspondente s anotaes Bean Validation no modelo Java.

9.1.4. Comandos Flex


O Addon Flex fornece sua funcionalidade atravs de apenas alguns comandos simples. 9.1.4.1. Flex configurao Uma vez que um projeto bsico Spring Roo foi criado, o Addon Flex fornece uma nica configurao flexvel de comando para adicionar a Primavera necessrio, Maven, Eclipse e configurao de um projeto Flex apoiado por Primavera Integrao BlazeDS. Sua execuo to simples como: org.example.rootunes roo> configurao flexvel Criado SRC_MAIN_WEBAPP / WEB-INF / flex Criado SRC_MAIN_WEBAPP / WEB-INF / flex / services-config.xml Criado SRC_MAIN_WEBAPP / WEB-INF / Primavera Criado SRC_MAIN_WEBAPP / WEB-INF / primavera / flex-config.xml Criado SRC_MAIN_WEBAPP / WEB-INF / primavera / webmvc-config.xml Criado SRC_MAIN_WEBAPP / WEB-INF / web.xml Criado SRC_MAIN_WEBAPP / WEB-INF / urlrewrite.xml Managed SRC_MAIN_WEBAPP / WEB-INF / web.xml ... Assim que tiver o projeto bsico de infra-estrutura Flex no lugar, voc pode comear a gerar destinos remoting e andaimes. 9.1.4.2. Flex remoting andaime O Flex Remoting andaime comando ir criar uma mola de gesto RemotingDestination @ Flex e andaimes UI para uma determinada entidade de domnio Java. Ela exige uma - nome opo que especifica o nome do RemotingDestination @ classe a ser criado, e um - entidade opo que vai ser inferida a partir do contexto atual comando Roo se no for especificado explicitamente. . ~ Domain.Artist roo> Flex remoting andaime -. service.ArtistService nome ~ Criado SRC_MAIN_JAVA / org / example / rootunes SRC_MAIN_JAVA criado / org / example / rootunes ArtistService.java Criado ROOT / src / main / flex / org / example domnio Criado ROOT / src / main / flex / org / example domnio / Artist.as SRC_MAIN_JAVA criado / org / example / rootunes ArtistService_Roo_Service.aj

/ servio / service / / rootunes / / rootunes / / service /

Managed ROOT / src / main / flex / rootunes_scaffold.mxml Managed ROOT / src / main / flex / rootunes_scaffold-config.xml Criado ROOT / src / main / flex / org / example / rootunes / apresentao / artista Criado ROOT / src / main / flex / org / example / rootunes / apresentao / artista / ArtistEvent.as Criado ROOT / src / main / flex / org / example / rootunes / apresentao / artista / ArtistView.mxml Criado ROOT / src / main / flex / org / example / rootunes / apresentao / artista / ArtistForm.mxml Como mostrado na listagem acima, o comando faz com que o seguinte a ser gerado:

A RemotingDestination @ que fornece operaes de persistncia para a determinada entidade. Uma classe ActionScript que espelha a entidade Java. Se houvesse qualquer relacionamento JPA na entidade Java, classes adicionais ActionScript seriam gerados em conformidade. Uma vez que esta ligao estabelecida entre uma classe Java e ActionScript, o addon automaticamente manter os dois em sincronia e propagar as alteraes feitas aos campos tanto no ActionScript ou classe Java, se essas alteraes so feitas manualmente no cdigo, ou com o ajuda de um comando Roo. Flex UI andaimes para a realizao de operao CRUD na entidade. Qualquer momento os campos so adicionados classe ActionScript, as atualizaes necessrias sero feitas para o bom. Artefatos mxml para refletir os novos campos. (Nota - Neste momento, o addon Flex no vai apagar os campos da mxml uma vez eles foram adicionados As capacidades de sincronizao ser ampliado em novas libertaes...)

O RemotingDestination @ que ser gerado (neste exemplo, org.example.rootunes.ArtistService ), ser automaticamente fornecer funcionalidade CRUD bsicos para a dadaArtista entidade. Os mtodos gerados que fornecem essa funcionalidade so os seguintes:

Assinatura do mtodo

Artista pblico criar (artista Artista ){..}

O mtodo de criar uma instncia ir p

Artista pblica mostram (Long id) {} ..

O mtodo show vai retornar uma inst

public List <Artist> lista () {} ..

O mtodo de lista retornar uma lista

public List <Artist> listPaged (pgina Integer,

O mtodo listPaged retornar uma lis

Assinatura do mtodo
Integer tamanho) {} ..

acordo com a pgina fornecida e par

Artista pblica atualizao (artista Artista ){..}

O mtodo de atualizao ir atualizar persistente.

public void excluir (id longo ){..}

O mtodo delete ir remover uma ins

9.1.4.3. Flex remoting todos O Flex Remoting todos os comandos uma variao conveniente de flexionar remoting andaime que vai criar uma mola de gesto RemotingDestination @ Flex e andaimes UI para todas as entidades de domnio Java em um dado - pacote se ele no existir. Seu uso mostrada abaixo: roo> Flex remoting todos - Pacote ~ servio. Criado SRC_MAIN_JAVA / org / example / rootunes / servio SRC_MAIN_JAVA criado / org / example / rootunes / service / ArtistService.java Criado ROOT / src / main / flex / org / example / rootunes / domnio Criado ROOT / src / main / flex / org / example / rootunes / domnio / Artist.as Criado ROOT / src / main / flex / org / example / rootunes / domnio / Album.as SRC_MAIN_JAVA criado / org / example / rootunes / service / AlbumService.java SRC_MAIN_JAVA criado / org / example / rootunes / service / ArtistService_Roo_Service.aj Managed ROOT / src / main / flex / rootunes_scaffold.mxml Managed ROOT / src / main / flex / rootunes_scaffold-config.xml Criado ROOT / src / main / flex / org / example / rootunes / apresentao / artista Criado ROOT / src / main / flex / org / example / rootunes / apresentao / artista / ArtistEvent.as Criado ROOT / src / main / flex / org / example / rootunes / apresentao / artista / ArtistView.mxml Criado ROOT / src / main / flex / org / example / rootunes / apresentao / artista / ArtistForm.mxml SRC_MAIN_JAVA criado / org / example / rootunes / service / AlbumService_Roo_Service.aj Managed ROOT / src / main / flex / rootunes_scaffold.mxml Managed ROOT / src / main / flex / rootunes_scaffold-config.xml Criado ROOT / src / main / flex / org / example / rootunes / apresentao / lbum Criado ROOT / src / main / flex / org / example / rootunes / apresentao / lbum / AlbumEvent.as

Criado ROOT / src / main / flex / org / example / rootunes / apresentao / lbum / AlbumView.mxml Criado ROOT / src / main / flex / org / example / rootunes / apresentao / lbum / AlbumForm.mxml

9.1.5. Construindo e executando um projeto Addon Flex


A configurao do projeto fornecido pela configurao flexvel de comando prepara o projeto para em execuo e construo da linha de comando, via Maven, ou correr como um projeto Flex e WTP no SpringSource Tool Suite com o plugin Flash Builder v4 instalado. 9.1.5.1. Construindo e executando um projeto Addon Flex com Maven Com a configurao necessria para que a Java e Flex fonte j criado, para construir o projeto to simples como: mvn install Da mesma forma, a execuo do projeto da linha de comando atravs do plugin do Tomcat j est configurado Maven to simples como: mvn tomcat: run (Nota - A primeira vez que voc executar esses comandos com um cache Maven despovoada, vai demorar alguns minutos para baixar as dependncias necessrias No se preocupe, depois que voc fez isso uma vez, os comandos executar muito mais rpido..) Uma vez que a inicializao do servidor completo, voc deve ser capaz de acessar o scaffold Flex UI em http://localhost:8080/ {project_name} / {} project_name _scaffold.html - por exemplo, no exemplo de script Roo Primavera junto com a distribuio ( e nos exemplos acima), criamos um projeto chamado "rootunes". Uma vez que o servidor iniciado, a UI Flex pode ser acessado em:

http://localhost:8080/rootunes/rootunes_scaffold.html

9.1.5.2. Importando um Projeto Addon Flex em SpringSource Tool Suite e Flash Builder Para gerar os metadados Eclipse necessrios para o projeto, a partir da raiz do projeto voc deve executar mvn eclipse: eclipse Uma vez feito isto, o projeto pode ser importado para SpringSource Tool Suite e executados em um servidor via WTP. Para importar o projeto, selecione Arquivo-> Import ...-> Geral-> Existing Projects into Workspace e navegar para o diretrio raiz do projeto e importar o projeto Eclipse encontrados l. Se voc criou o projeto fora da sua rea de trabalho Eclipse, voc deve marcar a opo "Copiar projetos no espao de trabalho", durante o dilogo de importao para que os metadados gerados Builder Flash para funcionar corretamente.

9.1.6. Executando o exemplo Roo Script

Uma amostra Primavera roteiro Roo, que gera um projeto de amostra completa Flex est includo na distribuio Integrao Primavera BlazeDS. O script pode ser encontrado em {} project_distribution_root / samples / rootunes.roo O script pode ser executado usando Spring Roo do roteiro de comando. Crie um diretrio novo projeto, e depois iniciar o shell Roo. De l, voc pode apontar o script decomando no local do rootunes.roo script. Por exemplo, se voc descompactou a distribuio em seu diretrio home, o comando seria: roo script> - arquivo ~ / spring-flex-1.5.0.M1/samples/rootunes.roo Uma vez que o script for concluda, voc pode construir e executar o exemplo usando as etapas descritas acima.

9.1.7. Problemas conhecidos


Como esta apenas uma verso M1, h uma srie de problemas conhecidos e funcionalidade planejada ainda para ser concluda. Alguns dos mais gritantes so:

O andaime no geram atualmente os campos do formulrio para edio relaes ONE_TO_MANY ou MANY_TO_MANY, embora ele no gerar os tipos de campo correta para o relacionamento na classe ActionScript, ento voc livre para adicionar o cdigo restante para a edio de tais relaes manualmente. As entidades ActionScript gerado atualmente ignorar qualquer superclasses ou interfaces que o tipo de Java pode declarar. O analisador ActionScript estamos usando no capaz de gerar getters e setters de propriedade, embora ele ainda deve analis-los sem erro. O analisador ActionScript no nos d controle sobre a localizao exata de campos no ActionScript, em vez de adicion-los sempre na parte inferior da declarao de classe. Est, obviamente, livre para mover a declaraes de campo em torno a seu gosto, sem quaisquer efeitos adversos. A ida e volta fuso funcionalidade para tags em artefatos. Mxml incompleta. Atualmente, pode adicionar novos campos, mas no atualizar ou remover os j existentes. Isso vai ser sanado atravs de uma abordagem semelhante Roo 1.1 usa para artefatos. Jspx, s vamos usar Flex meta-tags em vez de atributos da marca adicional. A ida e volta atualizao do script de blocos em arquivos. mxml destrutivo, o que significa que ir substituir as alteraes. Isso vai ser sanado, no futuro, aplicando o mesmo no destrutivos da camada de metadados ActionScript que usamos para o. Como arquivos.

S-ar putea să vă placă și