Gostaria de saber para que serve cada uma dessas tags procurei na internet, mas não conseguir entende qual a utilidade e a diferença entre a tag e a tag . Desde já agradeço a ajuda de todos.
<resurce-ref> e <resource-env-ref>
2 Respostas
Segundo a teoria, a aplicação não deve nunca chamar um recurso JNDI pelo seu próprio nome (definido na criação do recurso do servidor), pois dessa forma ela ficaria “amarrada” a esse nome. Os papéis de “desenvolvedor” e “administrador/deployer” deveriam ser independentes, sendo que o deployer tem liberdade de mudar as configurações sem afetar a aplicação.
Vou colocar um exemplo disso:
(a propósito, se vc não sabe o que é JNDI, dê uma olhada nesse assunto primeiro depois volte aqui!)
Imagine que tenho um Datasource cadastrado no servidor com o seguinte nome: /jdbc/MeuBd
A aplicação então toda vez que precisar de uma conexão vai fazer um lookup JNDI pelo nome /jdbc/MeuBd
Se um dia o administrador precisar mudar o nome que está configurado no servidor *, o desenvolvedor vai precisar mexer nos fontes, recompilar, talvez voltar versão se estiver trabalhando em projeto novo, etc. etc.
[color=blue]* Não é muito frequente esse tipo de mudança, mas pode acontecer… às vezes por uma simples padronização, ou por algum motivo qualquer; um caso real que aconteceu a pouco tempo aqui: O nome do JNDI estava sem barra “/” no início, e após uma atualização na versão do JBoss ele não aceitava mais assim, precisava cadastrar o datasource com um nome iniciado por “/” - e mudar tudo na aplicação[/color]
Pois bem, as tags resource-ref e resource-env-ref servem para criar um “apelido”, ou um “nome interno” para os recursos JDBC dentro da aplicação. Assim, eu defino que as classes sempre vão chamar o datasource de “java:comp/meuDatasource”. No web.xml é que é mapeado o nome meuDatasource para o nome JNDI de verdade, /jdbc/MeuBd.
Se um dia precisar mudar, basta mudar a configuração; as classes continuam chamando pelo mesmo apelido, java:comp/meuDatasource , mas o nome real para localizar o recurso foi modificado.
O mesmo vale para outros recursos chamados via JNDI, como EJBs , filas JMS , etc.
E sobre a diferença entre as duas tags resource-ref e resource-env-ref : a única coisa é que dependendo do tipo de recurso que será acessado vc usa uma ou outra. Por exemplo, aqui (http://www.coderanch.com/t/157993/java-EJB-SCBCD/certification/Difference-between-resource-ref-resource) diz que Fábricas de Conexão são configuradas pelo resource-ref, e recursos estáticos como Filas são configuradas com a tag resource-env-ref. (explicação da própria Katy Sierra)
Nesse manual do tomcat (http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html) diz que o resource-env-ref é uma versão mais simplificada, usada em recursos que não precisam de autenticação.
Essa diferença é questão de detalhezinhos mesmo… inclusive em um fórum um cara diz que fez testes em um determinado cenário e as duas funcionaram igual. Se precisar decorar para certificação use a explicação da kathy sierra)
É mais ou menos isso… um detalhe importante sobre essa configuração é que dificilmente vc a verá sendo usada. Segundo a teoria é extremamente importante, pelo motivo que mencionei acima, mas em projetos reais mesmo eu nunca vi…
Vlwww pela Resposta eu só queria saber a diferença estou lendo e estudando livros de java web para certificação web com jee6 ai apareceu isso e não tinha entendido vlwww resolveu minha dúvida