FAQ

Consultem também a FAQ de Sistemas Distribuídos.

Índice

1 Instalação do software

1.1 Segui o guia de instalação em detalhe, mas mesmo assim tenho um problema na execução de wscompile -version e wsdeploy -version. Que pode estar mal?

Os scripts de execução do wscompile e wsdeploy dão-se muito mal com espaços. Verifique se a sua variável de ambiente PATH refere algum directório (mesmo de outros programas) com espaços. Se sim, remova ou substitua esses nomes com espaço pelos nomes curtos. Nesta notação, tipicamente Programas (ou Program Files) é abreviado para progra~1.

Adicionalmente, se mesmo assim não se resolver o problema, podem editar-se os scripts directamente (estão localizados em %JWSDP_HOME%/jaxrpc/bin) e eliminar as aspas à volta de %PATH%.

1.2 Não consigo encontrar a versão correcta do MySQL, na página só aparece a versão mais recente. Onde posso encontrar a versão pedida (5.0.45)?

Na página de Downloads do MySQL, navega até Archives, selecciona MySQL Database Server 5.0 e escolhe a versão 5.0.45 1.

1 um link directo, à altura de publicação desta resposta, é este.

1.3 Não consigo instalar o MySQL 5 (5.0.45) no pc, penso que será por ter o Windows Vista. Posso instalar uma versão mais recente?

Por norma desaconselhamos outras versões, pois pretendemos garantir que no final o vosso software vai correr sem problemas. Se usarem outras versões fazem-no por vossa conta.

As máquinas dos laboratórios são as máquinas de referência para avaliação, tendo sido configuradas de acordo com o guia de instalação de software. Na eventualidade de terem outra de versão do MySQL instalada nos vossos PCs podem sempre ir confirmando que o vosso trabalho funciona nos PCs dos laboratórios.

Para instalar o MySQL no Vista recomenda-se a leitura deste documento: http://port25.technet.com/videos/research/MySQL_Windows.pdf

1.4 Utilizo MacOS X e...

  A máquina virtual Java disponibilizada pela Apple não segue exactamente a mesma estrutura de directórios que as versões fornecidas pela Sun. Em particular, omite o directório %JAVA_HOME%/jre, colocando o seu conteúdo directamente em %JAVA_HOME%. Por este motivo o Tomcat não está a encontrar o provider de segurança da máquina virtual Java.

Para resolver este problema basta copiar o ficheiro %JAVA_HOME%/lib/ext/sunjce_provider.jar para %JWSDP_HOME%/jwsdp_shared/, garantindo assim que qualquer aplicação web lançada no Tomcat terá acesso ao provider.

2 Utilização do Tomcat

2.1 O Tomcat parou de funcionar e nos seus logs apareceu a seguinte mensagem: "java.lang.OutOfMemoryError: PermGen space". Fiz algo de errado?

Não. Infelizmente o Tomcat esgotou a memória. A solução rápida é desligar e ligar novamente o servidor (catalina stop / catalina start).

2.2 Quando tento correr o 4º exemplo do tutorial de Stripes (ex4-forms) ao submeter o formulário aparece-me uma excepção.

A framework Stripes usada na aplicação web exemplo está a usar bibliotecas de cifra no processamento de campos escondidos. Ver entrada Utilizo MacOS X e....

3 Utilização do CVS

3.1 É necessário colocar no CVS as bibliotecas (lib) e o import-ant?

Sim. No entanto, não devem colocar no CVS os ficheiros que forem gerados automaticamente (nada dentro dos directórios dist e build).

4 Utilização das bases de dados

4.1 Devemos utilizar uma base de dados para os dois domínios ou duas bases de dados distintas para cada um?

Embora os domínios sejam independentes, na primeira entrega do projecto eles executam-se na mesma máquina virtual Java. Isto implica que só existe uma instância do hibernate, pelo que só é possível aceder a uma base de dados. Assim sendo, todas as tabelas têm de ser criadas na mesma BD. Vejam o ficheiro build.xml do componente mediator/web da aplicação exemplo trip-planner.

4.2 Não compreendemos o porquê de termos acesso a 10 bases de dados. Não é esperado que usemos apenas uma base de dados com toda a informação?

Têm 10 bases de dados, porque nas próximas entregas vão executar os vários domínios de forma distribuída. Nessa altura, vão precisar de separar as coisas. Na primeira entrega, só necessitam de uma BD.

5 Utilização do DBUnit

5.1 Estou a usar herança entre classes e o alvo ant dbunit-export-data para produzir o ficheiro xml de input para os testes. Todas as classes da herança estão mapeadas na mesma tabela. No entanto ao correr os testes noto que algumas colunas de algumas sub-classes ficam sempre a NULL na BD. Qual o problema?

O DBUnit ao ler o ficheiro de xml para popular a BD em cada teste, apenas considera as colunas que aparecem na primeira referência a uma dada tabela ignorando as restantes. Por isso, é necessário garantir que todas as colunas (mesmo que sejam irrelevantes para o objecto em causa) sejam referidas na primeira linha de cada referência a uma tabela. Por exemplo: considere-se as classes ClasseA, ClasseB e ClasseC. ClasseB e ClasseC herdam de ClasseA. Cada uma das ClasseX tem um atributoX.

O ficheiro de xml pode ter o seguinte aspecto:

 <ClasseA DTYPE="ClasseB" id="1" objVersion="0" atributoA="valor1" atributoB="valor2" atributoC="NULL"/>
 <ClasseA DTYPE="ClasseC" id="2" objVersion="0" atributoA="valor3" atributoC="valor4"/>

Ou seja, mesmo que o atributoC não seja relevante na primeira linha para a instância de C, ele deve estar na primeira linha que diz respeito à tabela para que seja considerado.

6 Utilização do Agile

6.1 Como posso alterar a estimativa de uma tarefa?

No editor da tarefa é necessário escolher o separador Planning (os separadores aparecem junto à base da janela do editor). Nesse separador é possível alterar a estimativa. Depois é necessário gravar e submeter as alterações. Atenção que gravar apenas grava localmente no workspace do eclipse; só o submit envia para a base de dados do projecto.

7 Projecto: 1ª Entrega

7.1 Podemos identificar um cliente pelo seu email?

Depende o que querem dizer por "identificar". Não devem utilizar conceitos do modelo de domínio para representar identificadores do hibernate; estes são "internos". No entanto, o email pode ser o identificador do cliente que permite à loja referi-lo no sistema de autenticação.

7.2 O cliente pode modificar o seu email?

O email não faz parte do perfil de cliente.

7.3 Estamos a pensar usar um serviço no domínio da loja para comunicar horizontalmente com o serviço de autenticação. Será esta ideia a mais correcta?

Os únicos serviços que podem fazer invocações a outros serviços são os serviços de workflow, ou seja, não podem ter um serviço que esteja no 'core' de um projecto a fazer invocações a outro serviço do 'core' de outro projecto. Nesses casos, o que devem é ter um serviço de workflow como o BookFlightService do trip-planner. São esses serviços que fazem a ligação entre domínios.

7.4 Os tipos de utilizador devem estar mapeados no domínio da loja ou do sistema de autenticação?

O Sistema de Autenticação não sabe o que são clientes nem administradores. O Sistema de Autenticação apenas tem utilizadores sem distinção entre si.

7.5 Podemos ter dependências diferentes das que existem no trip-planner? Por exemplo, um objecto do core do SAut pode ter referência a um objecto do core da Loja?

Não! Isso quebraria a independência dos domínios e impediria que mais tarde separassem o código em múltiplas aplicações cada uma a correr na sua máquina virtual.

7.6 O cliente pode modificar a sua password?

A password não faz parte do perfil de cliente.

7.7 Como é que consigo utilizar, numa classe de um componente, classes de outro componente do mesmo sub-projecto?

Quando uma classe de um componente depende de classes de outro componente, além de fazer o import da classe que se pretende utilizar é necessário garantir que durante o processo de construção da aplicação vão ser encontradas as classes do outro componente.

Por exemplo, num sub-projecto, o componente 'core' depende do componente 'view' porque (a) as classes de domínio lançam excepções (b) os serviços retornam vistas e não tratam as excepções de domínio.

No exemplo Trip Planner, para que cada sub-projecto compile correctamente, foram tidos alguns cuidados no processo de construção da aplicação. Por exemplo:

Esta filosofia é seguida no resto da aplicação exemplo para gerir as dependências entre componentes e sub-projectos (o componente 'web' do sub-projecto mediator depende dos componentes 'core' e 'view' dos sub-projectos flight e mediator).

1 flight-view é o nome do componente, tal como definido na etiqueta <project> do build.xml.

7.8 No nosso projecto definimos um package de servicos em "/LojaVirtual/Loja/web/src/java/loja/services" e outro em "LojaVirtual/Loja/core/src/java/loja/services". Quando invocamos um servico num ActionBean deveremos invocar um servico da WEB e depois esse é que chama o servico do CORE ou podemos chamar directamente o serviço do CORE?

Podem chamar directamente o serviço do core, quando esse core pertence à mesma aplicação (neste caso a Loja). Os serviços de Workflow no componente web só necessitam de ser escritos quando se pretende compôr mais que um serviço e/ou aceder a outros cores.

Autor: Corpo Docente de Engenharia de Software < >

Data: 2008/04/17 16:50:30