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