Conteúdo


IBM Rational Modeling Extension com Microsoft Visual Studio 2008 e Suporte .NET Framework 3.0

Comments

O IBM® Rational® Modeling Extension para Microsoft® .NET permite que desenvolvedores de aplicativos .NET usem as ferramentas de modelagem Rational no design de aplicativos. Esta extensão está disponível no IBM® Rational® Software Modeler e no IBM® Rational® Software Architect Standard Edition, e inclui o suporte para modelagem de aplicativos C# e geração de código subsequente.

O Rational Modeling Extension para Microsoft .NET fornece uma forma na qual é possível trabalhar com projetos do Microsoft® Visual Studio® dentro do Rational Software Architect Standard Edition (ou Rational Software Modeler). Ao usar esta extensão, é possível projetar visualmente seus aplicativos .NET em Linguagem de Modelagem Unificada (UML) e, em seguida, usar transformações para gerar o código nos projetos do Visual Studio. Uma solução no Visual Studio é mantida como um recurso vinculado na área de trabalho do Rational Software Architect Standard Edition (ou Rational Software Modeler). Agora, esta extensão de modelagem pode ser usada com o Microsoft Visual Studio 2005 e o Microsoft Visual Studio 2008, e as soluções das ofertas Microsoft podem ser importadas para o Rational Software Architect ou o Rational Software Modeler e usadas para geração de código.

O Microsoft .NET Framework 3.0 apresenta várias novas interfaces de programação de aplicativos para construção e execução da próxima geração de aplicativos e serviços da Web em XML. Elas incluem as seguintes opções do Microsoft® Windows® :

  • Windows Presentation Foundation (WPF)
  • Windows Communications Foundation (WCF)
  • Windows Workflow Foundation (WF)

Como uma iniciativa para o suporte da estrutura .NET 3.0, o Rational Modeling Extension para Microsoft .NET permite a modelagem de serviços com conjuntos de estereótipos WCF predefinidos e a geração de código subsequente com o suporte de Round-Trip Engineering. Isso permite a modelagem de um serviço em um ambiente do Rational Software Architect e a geração do código C# implementável para os serviços.

Integração do Visual Studio 2008

A integração com o Microsoft Visual Studio 2008 significa que é possível importar soluções .NET do Visual Studio 2008 para a área de trabalho do Rational Software Architect SE como recursos vinculados e usar projetos disponíveis como um destino para a geração de código. Em síntese, é possível usar o Visual Studio 2008 da mesma forma que o Rational Modeling Extension era usado em conjunto com o Visual Studio 2005. O ambiente de desenvolvimento integrado (IDE) padrão que Rational Software Architect SE procura é o Visual Studio 2005. Conforme mostrado na Figura 1, é possível alterar a preferência para importação do Visual Studio 2008 selecionando Windows > Preferências > Modelagem > Modelagem .Net. Após o IDE designado ser configurado na página Preferências, o Rational Modeling Extension certifica-se de que uma solução desse IDE designado seja importada. Caso contrário, ele produzirá um aviso de erro.

Figura 1. Página Preferências para seleção de IDE do Visual Studio
2008 checked under "Which Visual Studio IDE?"
2008 checked under

A integração do Rational Modeling Extension para Microsoft .NET com o Visual Studio 2008 é inevitável para suportar a estrutura .NET 3.0, que define várias interfaces de programação de aplicativos para modelagem de serviços.

Esta integração fornece uma migração direta da plataforma de desenvolvimento de destino da versão 2005 para a versão 2008 do Microsoft Visual Studio. Uma solução 2005 que já está importada na área de trabalho do Rational Software Architect não precisa ser novamente importada e não há necessidade de reiniciar o software após decidir migrar do Visual Studio 2005 para 2008. Entretanto, para garantir que o Rational Modeling Extension continue a estabelecer conexão com o ambiente do Visual Studio 2008 atualizado, selecione a opção Visual Studio 2008 para “Qual IDE do Visual Studio?” em Windows > Preferências > Modelagem > Modelagem .Net, conforme mostrado anteriormente na Figura 1, após migrar a solução para o ambiente do Visual Studio 2008.

Suporte para Windows Communication Foundation

O Microsoft Windows Communication Foundation (WCF) é projetado de acordo com os princípios da Arquitetura Orientada a Serviços (SOA) para suportar a computação distribuída na qual as pessoas usam os serviços. Um serviço WCF é composto por três partes:

  • A classe de serviço que implementa o serviço a ser fornecido
  • Ambiente de host para hospedar o serviço
  • Um ou mais terminais por meio dos quais um cliente pode se conectar ao serviço

Todas as comunicações com o serviço WCF são realizadas por meio de terminais. Os terminais especificam um contrato que define quais métodos da classe de serviço estarão acessíveis por meio do terminal. Cada terminal pode expor um conjunto diferente de métodos (consulte o Microsoft Developer Network, MSDN, para obter informações adicionais sobre a implementação de serviço com base em WCF).

Esta Rational Modeling Extension suporta a modelagem de serviços WCF e a geração de código subsequente:

  • Modelagem de componentes de serviços WCF
  • Encaminhamento da transformação de WCF para C#
  • Reverso da transformação de WCF do C#

Modelagem de Serviço WCF e Geração de Código

O Rational Modeling Extension para Microsoft .NET fornece suporte de modelagem para componentes de serviços WCF, incluindo a modelagem de Contratos de Serviços, Contratos de Dados e Contratos de Mensagens. Com o perfil WCF do .NET, é possível representar construções WCF em um modelo UML (consulte a Figura 2). O perfil possui opções de representação para quase todos os atributos fornecidos pela estrutura WCF para projetar uma biblioteca de serviços WCF. Cada estereótipo fornece um conjunto de propriedades para especificação de parâmetros diferentes de um atributo WCF (Figura 3).

Figura 2. Estereótipos WCF
Apply Stereotypes view
Apply Stereotypes view
Figura 3. Propriedades do estereótipo WCF
Properties view
Properties view

O perfil WCF pode ser aplicado em conjunto com o perfil C# para especificação de propriedades específicas do C# ao lado de propriedades WCF. As subseções a seguir abordam os estereótipos individuais para modelagem de serviço WCF. Se os estereótipos WCF foram aplicados, o encaminhamento da transformação usando UML-para-C# gerará o código de forma adequada.

Contrato de Serviço

Um serviço WCF pode ser definido por uma classe ou uma interface com grupos de operações que definem as ofertas dos serviço. O Contrato de Serviço liga múltiplas operações relacionadas em uma única unidade funcional. Para criar um Contrato de Serviço, as operações são agrupadas, declarando-as dentro de uma interface marcada com o atributo ServiceContract , ou definindo-as em uma classe marcada com o mesmo atributo. Os serviços WCF definem as operações criando um método e marcando-o com o atributo OperationContract .

Para modelagem de um Contrato de Serviço, é possível aplicar o estereótipo Contrato de Serviço (Figura 4) em uma classe ou uma interface. O contrato pode definir configurações de nível de serviço, como o espaço de nomes do serviço, um contrato de retorno de chamada correspondente e outras configurações por meio de propriedades do Contrato de Serviço. Ele também define um conjunto de operações com o estereótipo Contrato de Operação (Figura 4) aplicado nelas e o conjunto de valores de parâmetros. A Lista 1 mostra a definição de serviço gerada em C# a partir do modelo na Figura 4.

Figura 4. Modelando um Contrato de Serviço
Modeling a Service Contract
Modeling a Service Contract
Lista 1. Definição de serviço gerada em C#
	// @generated
	[ServiceContract]
	public interface ICalculator
	{
	    // @generated
	    [OperationContract]
	    Int32 add(Int32 param1, Int32 param2);
	
	    // @generated
	    [OperationContract]
	    Int32 subtract(Int32 param1, Int32 param2);
	}

O comportamento de execução interna de uma implementação do Contrato de Serviço pode ser especificado com o estereótipo Comportamento de Serviço . Aplique o estereótipo Comportamento de Serviço em uma implementação de serviço para especificar o comportamento de execução em todos os serviços. Para especificar o comportamento de execução no nível do método, use o estereótipo Comportamento de Operação (Figura 5). A Lista 2 mostra o código gerado a partir do modelo do Comportamento de Serviço.

Figura 5. Atributo de Comportamento de Serviço
Service Behavior attribute
Service Behavior attribute
Lista 2. Código gerado a partir do modelo do Comportamento de Serviço
	// @generated
	[ServiceContract(Namespace="http://myservice/servicecontract")]
	
	[ServiceBehavior(AddressFilterMode=AddressFilterMode.Prefix,
	AutomaticSessionShutdown=false,InstanceContextMode=InstanceContextMode.Single)]
	public class Class1
	{
		// @generated
		[OperationContract]
		
		[OperationBehavior]
		public void Operation1()
		{
			//TODO: Auto-generated method stub
			throw new System.NotImplementedException();
		}
	}

É possível usar o estereótipo Comportamento de Retorno de Chamada para configurar ou estender o comportamento de uma implementação de contrato de retorno de chamada em um aplicativo cliente. Este atributo executa a mesma função para a classe callback como o atributo ServiceBehavior , com exceção do comportamento da instância e configurações de transação.

O estereótipo Fluxo de Transação em um Contrato de Operação (Figura 6). especifica se uma operação de serviço aceita transações de entrada a partir de um cliente.

Figura 6. Estereótipo Fluxo de Transação
Transaction Flow stereotype
Transaction Flow stereotype

Estereótipo Contrato de Dados

Todos os Contratos de Serviços possuem um Contrato de Dados implícito ou explícito associado, que define os dados nos quais o serviço trabalha. Os tipos de dados que um serviço usa devem ser descritos em metadados para permitir que outros interoperem com o serviço. As descrições dos tipos de dados são conhecidas como o Contrato de Dados.

O Rational Modeling Extension permite a especificação do Contrato de Dados com a ajuda do estereótipo Contrato de Dados . Um contrato de dados pode ter múltiplos números de dados, que são especificados aplicando o estereótipo Membro de Dados em uma propriedade UML, uma propriedade C# e etc. (Figura 7). A Lista 3 mostra o código gerado para a definição do Contrato de Dados.

Figura 7. Modelando o Contrato de Dados
Modeling the Data Contract
Modeling the Data Contract
Lista 3. Código gerado para a definição do Contrato de Dados
	// @generated
	[DataContract(Namespace=”http://www.ibm.com/testService”)]
	public struct Student
	{
		// @generated
		[DataMember]
		public Object Name;
	
		// @generated
		private Int32 telephone;
	
		// @generated
		[DataMember]
		private Int32 TelephoneNumber
		{
			get	{return telephone;}
			set	{telephone = value;}
		}
	}

Os parâmetros no Contrato de Dados devem ser dos tipos que podem ser serializados. O WCF suporta um mecanismo de serialização, o XmlSerializer, que também pode ser usado para serializar parâmetros. Para alternar para o uso do XmlSerializer para uma determinada operação ou para o serviço inteiro, aplique o estereótipo XmlSerializerFormat em uma operação ou em um serviço (Figura 8). A Lista 4 mostra o segmento de código que inclui este serializador.

Figura 8. Atributo Serializador XML
XML Serializer attribute
XML Serializer attribute
Lista 4. O segmento de código que usa o XmlSerializer
	// @generated
	[XmlSerializerFormat]
	
	[ServiceContract]
	public class Class1
	{
		// @generated
		[XmlSerializerFormat(Style=OperationFormatStyle.Rpc,
		Use=OperationFormatUse.Encoded)]
		
		[OperationContract]
		public void Operation1()
		{
			//TODO: Auto-generated method stub
			throw new System.NotImplementedException();
		}
	}

Estereótipo Contrato de Mensagem

Um único tipo pode ser usado para representar a mensagem inteira. Embora seja possível usar o Contrato de Dados para este propósito, a melhor forma de fazer isso é usar um Contrato de Mensagem, pois ele evita níveis desnecessários de agrupamento no XML resultante. Além disso, os Contratos de Mensagens permitem o exercício de mais controle sobre as mensagens resultantes. Por exemplo, é possível especificar quais partes da informação devem estar no corpo da mensagem e quais devem estar nos cabeçalhos das mensagens.

Um Contrato de Mensagem descreve o formato de uma mensagem. Por exemplo, ele declara se os elementos de mensagens devem estar nos cabeçalhos em vez do corpo da mensagem (origem: Biblioteca MSDN, citada em Recursos).

O estereótipo Contrato de Mensagem pode ser aplicado na classe para descrição de uma mensagem com os estereótipos Cabeçalho de Mensagem e Membro do Corpo da Mensagem para propriedades/campos (Figura 9). A Lista 5 mostra um Contrato de Mensagem gerado.

Figura 9. Modelando o estereótipo Contrato de Mensagem
Modeling the Message Contract stereotype
Modeling the Message Contract stereotype
Lista 5. Código gerado para o Contrato de Mensagem
	// @generated
	[MessageContract]
	public class GetCustomerRequest
	{
		// @generated
		private Int32 _nID;
	
		// @generated
		[MessageHeader]
		public Int32 ID
		{
		  get	{return _nID;}
	        set	{_nID = value;}
		}
	
		[MessageBodyMember]
		public Student student;
	}

Especificando falhas

Em todos os aplicativos gerenciados, os objetos Exception representam erros de processamento. Em aplicativos WCF, métodos de serviços comunicam informações de erros de processamento usando mensagens de falhas.

Um Contrato de Falha pode ser associado a uma operação de serviço para denotar erros que podem ser retornados para o responsável pela chamada. Uma operação pode ter zero ou mais falhas associadas a ela. No Rational Modeling Extension, o estereótipo Contrato de Falha pode ser aplicado em um Contrato de Operação (Figura 10). A Lista 6 mostra como o Contrato de Falha está associado ao Contrato de Operação.

Figura 10. Capturando falhas
Capturing faults
Capturing faults
Lista 6. Contrato de Falha associado ao Contrato de Operação
	// @generated
	[OperationContract]
	
	[FaultContract]
	public void Operation1()
	{
		//TODO: Auto-generated method stub
		throw new System.NotImplementedException();
	}

Como um estereótipo pode ser aplicado apenas uma vez em um único elemento, é possível aplicar o estereótipo Contrato de Falha para uma operação apenas uma vez. Entretanto, se deseja incluir mais Contrato de Falha para uma operação, poderá digitar a cadeia de descrição de contrato de falha na propriedades de atributos do estereótipo Método CSharp.

Valores padrão para propriedades de estereótipos

As propriedades de estereótipos, que são dos tipos booleano, número inteiro e enumeração, têm designado valores padrão no perfil. A Tabela 1 lista os valores padrão para as propriedades do estereótipo Comportamento de Retorno de Chamada . Quando uma propriedade de estereótipo é configurada com o valor padrão, a transformação não gera o parâmetro denominado correspondente para o atributo WCF correspondente. Se todas as propriedades são configuradas com valores padrão, a transformação gera apenas o atributo sem qualquer parâmetro. Basicamente, isso significa que o atributo WCF usará o construtor padrão. Sempre que houver um valor para a propriedade diferente do padrão, a transformação gerará o parâmetro denominado para isso.

Tabela 1. Valores padrão para Propriedades

EstereótipoPropriedadesTipoPadrão
Retorno de Chamada
Comportamento
AutomaticSessionShutDownBooleanoTrue
ConcurrencyModeConcurrencyModeSingle
IgnoreExtensionDataObjectBooleanoFalse
IncludeExceptionDetailInFaultsBooleanoFalse
MaxItemsInObjectGraphNúmero Inteiro65536
TransactionIsolationLevelIsolationLevelNão-especificado
TransactionTimeoutCadeia---
UseSynchronizationContextBooleanoTrue
ValidateMustUnderstandBooleanoTrue

Engenharia reversa WCF

O objetivo da engenharia reversa é capturar a biblioteca de serviço WCF como modelo UML. O Rational Modeling Extension suporta Round-Trip Engineering (RTE) para modelagem de biblioteca de serviço WCF e geração de código. Enquanto engenharia reversa, a transformação C#-para-UML identifica o atributo WCF (se houver) aplicado nas construções C#. Se qualquer atributo WCF for encontrado, ele aplicará o perfil “WCF .NET” para o modelo UML temporário criado. Ele, então, analisa a cadeia do atributo e extrai todas as propriedades para o atributo WCF. O estereótipo WCF é aplicado no elemento UML correspondente, e todas as propriedades do estereótipo são configuradas.

Ao realizar a modelagem WCF, você talvez deseje aplicar múltiplos estereótipos em um único elemento. Por exemplo, um Contrato de Operação pode ter múltiplos estereótipos Contrato de Falha definidos. A UML restringe a aplicação de um estereótipo em um elemento múltiplas vezes. Portanto, se precisar aplicar Contrato de Falha múltiplas vezes em um método UML, aplique o primeiro no método UML e coloque o restante na seção de atributos do estereótipo Método CSharp .. Durante a transformação reversa, o primeiro Contrato de Falha encontrado será convertido para um estereótipo e o restante dos atributos de Contrato de Falha será armazenado na propriedade de atributos do Método CSharp. É possível aplicar os estereótipos Tipo Conhecido e Tipo Conhecido de Serviço múltiplas vezes da mesma forma.

Sumário

Para manter o Rational Modeling Extension para .NET em sincronismo com o Microsoft Visual Studio 2008, o Rational Modeling Extension fornece suporte para integração com o Visual Studio 2008. Isso proporciona aos desenvolvedores a flexibilidade para trabalhar com a versão 2005 ou 2008 dos editores Visual Studio para modelagem e geração de código ao usar o Rational Modeling Extension. Ele também fornece a modelagem de serviço e a geração de código com base no Microsoft Windows Communication Foundation definido pelo .NET Framework 3.0.


Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Rational
ArticleID=457683
ArticleTitle=IBM Rational Modeling Extension com Microsoft Visual Studio 2008 e Suporte .NET Framework 3.0
publish-date=12182009