FAQ

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

Table of Contents

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 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/lib, 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).

Uma solução alternativa é alterar a memória disponível para o Tomcat. Pode definir-se a variável de ambiente %CATALINA_OPTS% com, por exemplo, o seguinte valor:

CATALINA_OPTS="-Xmx512m -Xms256m -XX:MaxPermSize=128m"

Onde:

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....

Adicionalmente, devem ver a secção Workarounds da página de Apresentação das ferramentas de desenvolvimento (da disciplina de Sistemas Distribuídos) onde é fornecida uma pequena aplicação a instalar no tomcat para forçar o carregamento das bibliotecas de segurança, dado que o a JVM para Mac OS X tem um comportamento diferente dos outros SOs.

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) nem configurações individuais (ficheiros .classpath e .project do Eclipse, por exemplo).

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(20) bases de dados. Não é esperado que usemos apenas uma base de dados com toda a informação?

Têm 10(20) 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 Projecto: 2ª Entrega

6.1 No enunciado é dito que "Os diagramas e descrição de casos de uso definidos devem ser colocados num directório modelos, (…)", no entanto na estrutura de directórios fornecida já existe um directório Modelos para a aplicação de gestão de modelos de teste!

É uma gralha do enunciado e levanta problemas em sistemas de ficheiros case-insensitive. Devem colocar os diagramas e descrição de casos de uso no directório modelo como pedido na 1ª entrega.

6.2 No enunciado é dito que "Um grupo é definido pelo seu tema, (…)". Como é que se sabem os temas disponíveis?

O banco de perguntas tem de disponibilizar essa informação da mesma forma que permite saber quais as perguntas prontas a utilizar sobre um dado tema.

6.3 O que é o componente ws referido na secção 3.3 do enunciado?

O componente ws e o componente web foram integrados num único componente web_ws na estrutura de directórios agora fornecida. Este novo componente permite quer o uso de Stripes para apresentação, quer a definição de um web service. Caso não sejam alteradas as definições originais o web service não disponibiliza quaisquer operações.

6.4 No enunciado fala-se em "(…) indicar ao sistema que um teste foi utilizado", mas na aplicação de gestão de modelos não há sequer o conceito de teste!

É uma gralha do enunciado. Onde está "teste" deve ler-se "modelo".

6.5 No nosso projecto definimos um package de servicos em "/TestOMatic/Modelos/web/src/java/modelos/services" e outro em "/TestOMatic/Modelos/core/src/java/modelos/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 aplicação Modelos). 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 core.

6.6 Quero guardar registo de uma tentativa falhada de autenticação, mas quando o serviço termina lançando a excepção adequada, nada é escrito na base de dados. O que se está a passar?

Quando é lançada uma excepção de domínio dentro de um serviço, o código da framework (na classe step.framework.service.Service) aborta a transacção em curso, pelo que nada é guardado persistentemente.

Assim, para conseguirem guardar o registo de tentativa falhada, o serviço não pode lançar uma excepção.

6.7 Que aplicações necessitam de interface gráfica? E que aplicações precisam de disponibilizar funcionalidade via interface web service?

Quer o enunciado da 2ª entrega, quer a estrutura base para a 2ª entrega, dão uma indicação clara de que aplicações têm que interfaces:

6.8 A estrutura base não funciona! A aplicação Perguntas não encontra os ActionBean.

Este comportamento deve-se a uma gralha no ficheiro web.xml do componente web da aplicação Perguntas. Onde está:

<param-value>testomatic.perguntas.web.BPerguntasContext</param-value>
deve estar:
<param-value>testomatic.perguntas.web.PerguntasContext</param-value>

6.9 O meu grupo não está inscrito a Sistemas Distribuídos, como se faz a comunicação entre aplicações?

Há quatro aplicações independentes, na medida em que cada uma tem sua própria interface de login, que dá acesso às suas funcionalidades aos utilizadores com privilégios para tal (dependem de aplicação para aplicação).

Numa versão distriuída, as aplicações que necessitam de aceder remotamente a serviços de outras incluem serviços do componente ws-client da aplicação remota. Na versão não distribuída, as aplicações devem incluir os serviços do componente core da aplicação e todas as aplicações devem utilizar a mesma base de dados.

Nos ficheiros build.xml de cada um dos componentes web e web_ws das aplicações, onde está:

 <fileset ...>
     <include name="view/dist/*.jar" />
     <!--include name="core/dist/*.jar" /-->
     <include name="ws-client/dist/*.jar" />
 </fileset>
deve ficar:
 <fileset ...>
     <include name="view/dist/*.jar" />
     <include name="core/dist/*.jar" />
     <!--include name="ws-client/dist/*.jar" /-->
 </fileset> 

7 Projecto: 3ª Entrega

7.1 No enunciado para alunos não inscritos a SD são exigidos testes na secção "??". Que secção é afinal?

Foi um bug na geração das referências do documento. São exigidos testes para os serviços desenvolvidos para concretizar a secção 2.1, relativa à aplicação Perguntas.

8 Gestão de Projecto

8.1 O ficheiro scrum.xls considera um Sprint como apenas os dias úteis de uma semana. Nós temos mais disponibilidade ao fim-de-semana, como fazemos para o representar?

Podem alterar as folhas "Execução - Sprint *", para ter mais duas colunas, tendo o cuidado de garantir que as fórmulas e o gráfico são actualizados de acordo.

8.2 Como devo preencher as tabelas "Execução - Sprint *"?

A coluna "Dia 0" corresponde à estimativa inicial do esforço a ter na realização da tarefa. Diariamente devem preencher a coluna respectiva ("Dia 1", "Dia 2", etc…) com nova estimativa do esforço ainda necessário para concluir a tarefa. Reparem que este valor também pode aumentar de um dia para o outro se, por exemplo, se concluir que a estimativa da coluna anterior estava errada.

De notar que o esforço é medido em pessoa-hora. Por exemplo, uma equipa constituída pelo José e pela Maria está a fazer pair-programming e tem a incumbência de realizar a tarefa "Implementar serviço de autenticação". Estimam que deverão demorar cerca de 2h a concluir a tarefa, pelo que calculam o esforço inicial a preencher na célula relativa a esta tarefa como sendo 2 pessoas * 2h = 4h (quer o José quer a Maria gastam 2h cada do seu tempo disponível).

8.3 Como devo decompor uma história nas tarefas que a concretizam?

Uma vez que há uma arquitectura bem definida para as aplicações a desenvolver, há um conjunto típico de tarefas a ter em conta (interface web, serviços+testes, domínio), bem como as tarefas de desenho e modelação associadas (incluindo a descrição do caso de uso).

Para cada tarefa a equipa responsável pela sua realização deve atribuir uma estimativa de duração em horas. Para cada tarefa com duração:

8.4 Como devo gerir a 3ª entrega do projecto (para inscritos a SD)?

Devido ao facto de algumas histórias da 3ª entrega terem uma duração relativamente longa, esta deve ter 3 sprints:

É ainda necessário distribuir as histórias de modelação pelos 3 sprints.

Author: Corpo Docente de Engenharia de Software < >

Date: 2009/05/14 05:14:20 PM