Consultem também a FAQ de Sistemas Distribuídos.
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!ws
referido na secção 3.3 do enunciado?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?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%
.
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.
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:
ms
indica o tamanho inicial do heap da JVM
mx
indica o tamanho máximo do heap da JVM
MaxPermSize
indica o tamanho máximo da zona permanent generation da JVM
(zona extra do heap que não é garbage collected) - utilizado na geração
e carregamento dinâmico de classes.
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.
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).
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.
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.
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.
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.
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.
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.
É uma gralha do enunciado. Onde está "teste" deve ler-se "modelo".
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
.
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.
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:
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>
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>
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.
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.
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).
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:
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.
Date: 2009/05/14 05:14:20 PM