Transformações UML-para-JPA

A transformação UML-para-JPA gera entidades Java™ Persistence API (JPA) e código Java a partir de elementos de modelo Unified Modeling Language (UML). Você deve aplicar os estereótipos do perfil de transformação UML-para-JPA aos elementos de modelo UML para gerar enterprise beans.
Antes de utilizar essa transformação para gerar entidades JPA e classes Java, você deve instalar componentes específicos e ativar recursos específicos. Depois de executar a transformação, para customizar a saída da transformação, você deve ativar os seguintes recursos:

Geração de Artefatos Java por outras Transformações

Quando você aplica uma configuração de transformação UML-para-JPA, o serviço de transformação chama as seguintes transformações, na ordem listada abaixo:
  1. Transformação UML-para-Java
  2. Transformação UML-para-JPA
  3. Transformação UML-para-EJB 3.0
Para cada uma dessas transformações, as regras das transformações transformam quantos elementos de origem forem possíveis. Se você não aplicar os estereótipos do perfil de transformação UML-para-JPA aos elementos de modelo UML, as transformações UML-para-Java e UML-para-EJB 3.0 transformarão os elementos de modelo UML em código Java e artefatos Enterprise JavaBeans™ (EJB) 3.0, e as entidades JPA não são geradas.

Verifique a visualização Problemas para obter informações sobre os estereótipos ausentes.

Origens de Transformação Válidas

Você pode especificar os seguintes elementos como origens para a transformação UML-para-JPA:

  • Modelos UML
  • Pacotes e seu conteúdo
  • Classes não aninhadas e seu conteúdo
  • Interfaces não aninhadas e seu conteúdo
  • Enumerações não aninhadas

A transformação transforma o conteúdo de modelos, pacotes, classes e interfaces UML. Por exemplo, ao transformar uma classe, a transformação também transforma as operações e propriedades da classe.

Se você selecionar um modelo ou elementos de modelo na visualização Explorador de Projetos em vez de utilizar o editor de Configuração de Transformação, o modelo ou elementos selecionados substituirão o modelo ou elementos de origem especificados na configuração de transformação. A configuração de transformação não é afetada e a origem especificada na página Origem e Destino do editor de configuração de transformação ou no assistente de Nova Configuração de Transformação não é alterada.

Destinos de Transformação Válidos

A transformação pode gerar saída para um projeto JPA ou Java, ou uma pasta de origem em um projeto JPA ou Java. Você pode criar o projeto JPA com ou sem um projeto de cliente. A transformação gera código na primeira pasta de origem detectada do projeto JPA e na primeira pasta de origem detectada do projeto de cliente, se existir.

Descritores de Implementação e Arquivos de Persistência

É possível configurar a transformação para gerar um descritor de implementação, que consiste nos seguintes arquivos de persistência:
  • orm.xml, que contém as anotações JPA que correspondem aos elementos UML na origem da transformação
  • persistence.xml, que contém um elemento <mapping-file> que se refere a orm.xml

Ao configurar a transformação para gerar um descritor de implementação, ele gera todas as anotações JPA nos arquivos de persistência, e não gera anotações JPA no código Java.

Relacionamentos de Rastreio entre os Elementos de Modelo de Origem e a Saída da Transformação

Você pode utilizar a transformação UML-para-JPA para criar relacionamentos de rastreio das classes Java geradas com os elementos de origem UML. Depois, você pode visualizar os relacionamentos de rastreio em um diagrama de tópicos, criando e executado consultas do modelo.

A criação de relacionamentos de rastreio é útil em projetos grandes que podem conter vários modelos e várias configurações de transformação. Você também pode criar e executar consultas de rastreabilidade que exibem como a saída da transformação está relacionada às especificações de software e aos elementos de modelo.

Quando você executa uma transformação que está configurada para criar relacionamentos de rastreio, para cada elemento que suporta a tag @generated, a transformação anexa um identificador exclusivo à tag @generated. Se você renomear os elementos no modelo UML de origem, esse identificador exclusivo ativará a funcionalidade de mesclagem para refatorar e mesclar os elementos apropriados.
Nota: Se mover um elemento UML fora do escopo de sua classe de nível mais alto, quando você reexecutar a transformação, o algoritmo de mesclagem não refatorará ou mesclará o elemento renomeado porque o escopo do elemento foi alterado.

Quando você reexecutar a transformação, se necessário, a transformação utilizará o identificador no código-fonte para combinar os elementos correspondentes e, em seguida, alterará o código para refletir as alterações no modelo. Por exemplo, se você renomear uma operação UML no modelo de origem e reexecutar a transformação, a transformação renomeará o método Java gerado anteriormente e preservará o corpo do método, em vez de excluir o método gerado anteriormente e incluir um novo método.

A transformação Java–para-UML, ou reversa, também pode utilizar os identificadores para combinar elementos correspondentes entre o projeto Java e o modelo UML. Se aplicáveis, as alterações nos elementos do código-fonte Java serão tratadas como modificações ou como refatoração de código em vez de inclusões e exclusões no código gerado.

Para visualizar os relacionamentos entre os elementos de modelo de origem e a saída de transformação, você pode visualizar o elemento de modelo de origem em um diagrama e arrastar o elemento de código que a transformação gera nesse diagrama. A tabela a seguir lista os seguintes itens: a representação UML para um elemento de modelo de origem denominado Class1, que contém um atributo de inteiro denominado id, e uma operação denominada Operation1, sem nenhum parâmetro; o código que a transformação gera; e o diagrama de classes que mostra o relacionamento de rastreio entre os elementos.
Tabela 1.
Elemento UML Saída da Transformação Relacionamento de Rastreio em um Diagrama de Classes
A representação UML da classe denominada EntityClass, que é descrita no parágrafo anterior.
/**
 * 
 */

import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Entity;
import java.io.Serializable;

/** 
 * <!-- begin-UML-doc -->
 * <!-- end-UML-doc -->
  * @uml.annotations
 *     derived_abstraction="platform:/resource/Miscellaneous%20Models/Blank%20Package1.emx#_sQ4U4J-QEd2RedZBNurApQ"
 * @generated "sourceid:platform:/resource/Miscellaneous%20Models/Blank%20Package1.emx#_sQ4U4J-QEd2RedZBNurApQ"
 */
@Entity
@NamedQuery(name = "EntityClass.findByid", query = "select obj from EntityClass where obj.id = :id")
public class EntityClass implements Serializable {
	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @generated "sourceid:platform:/resource/Miscellaneous%20Models/Blank%20Package1.emx#_sRjDQZ-QEd2RedZBNurApQ"
	 */
	@Id
	private Integer id;

	/** 
	 * @return the id
	 * @generated "sourceid:platform:/resource/Miscellaneous%20Models/Blank%20Package1.emx#_sRjDQZ-QEd2RedZBNurApQ?GETTER"
	 */
	public Integer getId() {
		// begin-user-code
		return id;
		// end-user-code
	}

	/** 
	 * @param id the id to set
	 * @generated "sourceid:platform:/resource/Miscellaneous%20Models/Blank%20Package1.emx#_sRjDQZ-QEd2RedZBNurApQ?SETTER"
	 */
	public void setId(Integer id) {
		// begin-user-code
		this.id = id;
		// end-user-code
	}

	/** 
	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @generated "sourceid:platform:/resource/Miscellaneous%20Models/Blank%20Package1.emx#_s0NrcJ-QEd2RedZBNurApQ"
	 */
	public void Operation1() {
		// begin-user-code
		// TODO Auto-generated method stub

		// end-user-code
	}

	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @generated
	 */
	private static final long serialVersionUID = 0;

	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- end-UML-doc -->
	 * @generated
	 */
	public EntityClass() {
	}
Um relacionamento de rastreio, com o estereótipo de derivação aplicado, entre a representação UML de EntityClass e a saída da transformação.

A transformação não altera o modelo de origem quando você especifica para a transformação gerar relacionamentos de rastreio.

Integração com a Equipe de Suporte

A transformação fornece funcionalidade de integração com os sistemas de controle de versão IBM® Rational Team Concert, CVS, Rational ClearCase, e Rational ClearCase LT, que possibilita efetuar o registro de saída dos arquivos automaticamente ou incluir novos arquivos. É necessário ativar os recursos de equipe para trabalhar com os sistemas de gerenciamento de configuração.


Feedback