• Nenhum resultado encontrado

6.3 Descrição dos Subsistemas de Plataforma VRServices

6.3.1 Subsistema de Produção

O subsistema de Produção, ilustrado na Figura 48, reúne as funcionalidades destinadas à criação, alteração, exclusão, busca e reuso de elementos do modelo RM-VRServices. Como foi estabelecido na arquitetura lógica de subsistemas, o subsistema de Produção possui quatro camadas de abstração: persistência, domínio, interface e serviço.

A camada de persistência do subsistema de Produção possui as classes que são responsáveis pela persistência das instâncias do modelo RM-VRServices, concentradas em quatro classes: ApplicationDAO, VirtualWorldDAO, SceneDAO e VirtualObjectDAO. A camada de persistência usa o padrão arquitetural denominado Gateway de Tabela de Dados, que estabelece que uma classe de persistência manipula uma coleção de registros da base de dados (FOWLER, 2006).

Figura 48:Subsistema de produção

Fonte: Autor (2014)

Para exemplificar a camada de persistência, será apresentada a classe SceneDAO que tem a responsabilidade de persistir e recuperar instância do conceito Scene do modelo RM-VRServices. Com o objetivo de diferenciar a instância que representa o conceito Scene das demais classes, é usado o sufixo VO (do Inglês Value Object) para denotar que é um objeto de valor usado na comunicação entre as camadas do subsistema e entre as aplicações clientes e a plataforma VRServices.

Em função do modelo RM-VRService ser representado e implementado com o uso do modelo orientado a objetos, a camada de persistência deve realizar o mapeamento objeto-relacional (WAZLAWICK, 2004), persistindo e recuperando as instâncias de objetos da base de dados relacional. O mapeamento objeto-relacional das instâncias é realizado por meio da Java Persistence API (JPA) (BAUER; KING, 2007). A Figura 49 ilustra um trecho de código da classe SceneVO, que apresenta as definições dos atributos da classe e suas respectivas anotações da JPA que estabelecem as informações necessárias para realizar o mapeamento objeto-relacional. As anotações da API JPA iniciam com o caractere "@".

As operações de inclusão, alteração, exclusão e recuperação das instâncias de SceneVO são realizadas pela classe SceneDAO. A Figura 50 ilustra a classe

Figura 49: Classe SceneVO representa o conceito Scene do RM-VRServices

Fonte: Autor (2014)

SceneDAO, sua relação com a superclasse GenericDAO, que serve de base para todas as classes de persistência da plataforma e a classe SceneVO, que representa a implementação do conceito Scene do RM-VRServices. A classe SceneVO é constituída por atributos simples e atributos complexos, definidos a partir de outras classes conceituais do modelo RM-VRServices, tais como: lista de objetos VirtualObject3DVO, lista de TransformationGroupVO, lista de objetos DirectionalLightVO, lista de EventVO, entre outros. O mecanismo de persistência deve armazenar a instância de SceneVO e todas as instâncias agregadas a ela, nas operações de inclusão e alteração, assim como, deve recuperar uma instância de

SceneVO e todas as instâncias associadas a ela, nas operações de seleção. As outras classes da camada de persistência seguem a mesma estrutura arquitetural.

Figura 50: Classe SceneDAO da camada de persistência

Fonte: Autor (2014)

A camada de domínio é formada pelas classes responsáveis pelas operações relacionadas à produção de aplicações RV, distribuídas em quatro classes: Application, VirtualWorld, Scene e VirtualObject. Para exemplificar a camada de domínio será apresentada a classe Scene, responsável especificamente pelas operações de domínio do conceito Scene. A Figura 51 ilustra a classe de domínio Scene e a relação com as classes SceneVO e SceneDAO. As demais classes da camada de domínio seguem a mesma estrutura arquitetural.

Figura 51: Classe Scene da camada de domínio

Fonte: Autor (2014)

A camada de interface do subsistema de produção tem o objetivo de encapsular a complexidade do subsistema e isolar as classes de domínio do restante

da plataforma. A classe ProductionManager mantém instâncias das classes de domínio e delega as operações para essas instâncias. A comunicação entre a camada de serviço, camada de interface e camada de domínio é realizada por meio de parâmetros do tipo objeto de valor, que representam as instâncias dos conceitos do modelo RM-VRServices.

A classe ProductionManager, ilustrada na Figura 52, é a única classe da camada de interface do subsistema de produção, concentrando todas as operações relacionadas com a produção de aplicações. A classe ProductionManager foi projetada com base no padrão de projeto Facade (GAMMA et al., 2007), que tem o objetivo de fazer o papel de fachada ou controlador, permitindo que sejam inseridas tarefas de controle em um nível que antecede as classes de domínio. O projeto da classe ProductionManager também facilita a implementação de serviços, pois simplifica as chamadas das operações no código fonte que implementa os serviços.

Figura 52: Classe ProductionManager da camada de interface

Fonte: Autor (2014)

Outro padrão de projeto incorporado à classe ProductionManager é o padrão Creator (LARMAN, 2007), para incorporar a responsabilidade de instanciamento de objetos. Exemplos disso são os métodos getInstanceApplication, getInstanceVirtualWorld, getInstanceScene e getInstanceVirtualObject. A necessidade da implementação de tais métodos se deve ao fato de que as instâncias geradas por esses métodos são complexas e exigem a inicialização de uma grande quantidade de informações que são agregadas como atributos. A implementação dos métodos para a criação de instâncias desonera os usuários dessas classes do conhecimento necessário para sua inicialização, principalmente o desenvolvedor

remoto que irá consumir os serviços da plataforma.

A camada de serviço do subsistema de produção é constituída pela classe ProductionManagerService, ilustrada na Figura 53, é implementada com a tecnologia de Web Services. Seu principal papel é expor as funcionalidades do subsistema de produção como serviços, que podem ser consumidos por qualquer cliente remoto que seja capaz de consumir Web Services, independente de plataforma computacional e linguagem de programação (PAPAZOGLOU et al., 2007).

Figura 53: Classe ProductionManagerService da camada de serviços

Fonte: Autor (2014)

A classe ProductionManagerService mantém uma instância da classe ProductionManager, a qual delega as operações de produção de aplicações RV. Além disso a classe ProductionManagerService contém operações específicas da camada de serviço, por exemplo: createContextWebService, getSessionID, login e logout que são operações relacionadas a identificação e autorização de usuários consumidores do serviço.

Com o objetivo de apresentar o fluxo completo de mensagens que ocorrem nas chamadas de operações do subsistema de produção, foi produzido um diagrama de sequência. O diagrama, ilustrado na Figura 54, apresenta como exemplo, a sequência de mensagens para a inclusão de um instância da classe SceneVO, que representa o conceito Scene do modelo RM-VRServices.

A sequência inicia em uma aplicação remota que representa um cliente de produção, invocando a operação login() do Web Service ProductionManagerService, que por sua vez, chama o serviço do subsistema de controle de acesso, por meio da operação login() do Web Service AccessControlServices. A necessidade de login ocorre apenas na primeira vez que uma operação é invocada pela aplicação cliente, as demais chamadas de operações irá verificar a identificação e autorização do usuário pelos dados da seção do Web Service.

Em seguida, a aplicação remota, invoca a operação insertScene() do WebService ProductionManagerService, que verifica a autorização do usuário e caso esteja autorizado irá invocar a operação insertScene() da classe ProductionManager, que irá propagar a mensagem para a classe de domínio Scene, que verifica a integridade dos dados, e caso estejam válidos, irá persistir a nova instância de SceneVO por meio da classe SceneDAO. Esse modelo arquitetural é replicado para todas as operações do serviço ProductionManagerService do subsistema de produção.

115