Departamento de Tecnologia e Design Engenharia de Software Exercício Prático 3 – Ano lectivo – 2015 / 2016 – Engenharia Informática Duração: 02:00 hh:mm – Docente: Jorge Machado Exercícios com o servidor Apache Tomcat 5.5. Ficheiro: Aula3TomcatAnt.zip Notas: O Tomcat arranca como serviço ou em linha de comandos de duas maneiras possíveis o startup.bat / ou .sh o catalina.sh run Ambos os ficheiros se encontram na pasta bin do tomcat. O startup arranca o tomcat numa janela independente. O catalina.bat com o argumento run arranca na própria janela e pode ser parado com um CTRL+C. Para correr o tomcat necessita de duas variaveis de ambiente definidas o JAVA_HOME - pasta do jdk o CATALINA_HOME - pasta do Tomcat o Opcionalmente podem ser definidas variaveis de inicialização da Máquina Virtual de Java na variavel de ambiente JAVA_OPTS Necessita ainda de ter a pasta bin do jdk na PATH. O exemplo que se segue demonstra um ficheiro típico para arrancar o Tomcat em linha de comandos. A variavel JAVA_OPTS está aqui ja configurada num modo profissional de execução como se explica de seguida export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/ export CATALINA_HOME=/engsoft/aula3/jakarta-tomcat-5.5.27/ export PATH=$JAVA_HOME/bin:/usr/local/mysql/bin:$PATH export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xmx800m -Xms800m -XX:PermSize=256m XX:MaxPermSize=1024m -server -Xdebug Xrunjdwp:transport=dt_socket,address=53599,suspend=n,server=y" cd $CATALINA_HOME/bin/ ./catalina.sh run Para Windows ESTG.SA set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_67 set CATALINA_HOME=C:\Users\jmachado\Desktop\aula3\apache-tomcat-5.5.27 set PATH=%JAVA_HOME%\bin;%PATH% set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xmx800m -Xms800m XX:PermSize=256m -XX:MaxPermSize=1024m -server -Xdebug Xrunjdwp:transport=dt_socket,address=53599,suspend=n,server=y cd %CATALINA_HOME%\bin catalina.bat run JAVA_OPTS A variavel de ambiente JavaOpts é usada pelo tomcat quando executa o runtime do java. O comando "java" executa uma aplicação em java e pode receber na linha de comandos opções de ambiente como por exemplo: java -XX:PermSize=256m teste.Teste Esta opção em particular serve para definir o Heap máximo usado pelo sistema antes de atirar uma excepção OutOfMemory. Todas as opções em JAVA_OPTS vão ser colocadas pelos scripts de arranque do Tomcat no comando java que corre da seguinte forma: java $JAVA_OPTS org.apache.catalina.startup.Bootstrap Este comando não é executado por nós. Mas fica a explicação de como funcionam as JAVA_OPTS. Para ver as hipóteses possíveis na JAVA_OPTS deve consultar a documentação oficial do JAVA. Tem também algumas outras no ficheiro catalina.sh onde explicam a variavel CATALINA_OPTS que tem o mesmo objectivo do JAVA_OPTS mas apenas se aplica ao TOMCAT. Neste caso estamos a usar as seguintes: -Xmx - Memória de Heap Máxima -Xms - Memória de Heap Mínima -XX:PermSize - Memória Permanente Máxima - Variáveis que nunca saiem da memoria -server - O sistema corre configurações optimizadas para modo servidor -Xdebug -Xrunjdwp:transport=dt_socket,address=53599,suspend=n,server=y As restantes configurações foram definidas pelo modo de debug do IntelliJ. Ao colocar o Intellij em modo d debug com o tomcat é preciso dizer o porto do Tomcat e o Intellij fornece-nos estas configurações para colocarmos na JAVA_OPTS para que o tomcat arranque um porto de debug. 1.1. Configure o seu tomcat para arrancar em modo de linha de comandos como exemplifica o script acima. 1.2. Prepare o seu projecto para correr o ANT em linha de comandos > ant ESTG.SA 1.3. Se não funcionar faça download do ANT1 e defina os seguintes comandos para inicializar o ANT na janela onde se encontra. Mac ou Linux export ANT_HOME=PASTA_PARA_ANT/apache-ant-1.9.6 export PATH=PASTA_PARA_ANT/bin:$PATH Windows set ANT_HOME=PASTA_PARA_ANT/apache-ant-1.9.6 set PATH=PASTA_PARA_ANT/bin:%PATH% 1.4. O projecto aula3 vem preparado para correr a rotina "war". O nome da pasta define o ContextPath da aplicação. Se o ficheiro chama-se exercicio1.war. Se já tiver o tomcat a funcionar no momento em que corre o war, o tomcat vai descomprimir para a pasta exercicio1 e arrancar a aplicação teste que poderá ser acedida em http://localhost:8080/exercicio1/ 1.5. Altere o war para se passar a chamar o nome que está definido na variavel web.app. Tem instruções no build sobre como o fazer. Descubra um bug que ocorre porque o ant tenta ir buscar o ficheiro a build/ant/projecto.war. Onde está o projecto.war? Corrija o problema. 1.6. O ficheiro ANT vem com uma rotina para fazer deploy automático da aplicação no Tomcat em vez de usar um copy paste normal. Siga o exemplo e altere o ANT para fazer deploy. 1.7. Se tudo está a correr como esperado deverá aparecer um erro 401 de permissão negada. O Tomcat não o deixa chamar rotinas de gestão. É necessário configurar um utilizador no tomcat. Abra o ficheiro apachetomcat-5.5.27/conf/tomcat-users.xml 1.7.1. Adicione uma linha role com o valor "manager" 1.7.2. Adicione uma linha de password e username para o role manager 1.7.3. Reinicie o Tomcat, faça de novo deploy 1.8. Tente agora definir a rotina deploy context usando o material fornecido em comentário no build.xml 1.8.1. Defina a tarefa de install pois não vem no catalina.tasks 1.8.2. Crie um ficheiro de contexto manualmente 1 http://www-us.apache.org/dist//ant/binaries/apache-ant-1.9.6-bin.tar.gz ESTG.SA 1.8.3. Defina o target de deployContext copiando-o da zona de comentário 1.8.4. Corra ant tomcat.deployContext ESTG.SA