Pessoal,
Estou com dificuldades de criar um ear que contenha um war , sar (serviço do hibernate) , um jar (com os session beans) e as bibliotecas utilizadas por eles.
Vários paus ja rolaram na tela… application.xml not found (quando este tá lá … /META-INF/application.xml) ou não encotra as bibliotecas jars. etc.
Será que eu não estou sabendo fazer o manifest??? Eu pensei que fosse apenas acrescentar o class-path no final do manifest.
E ae, alguém tem alguma dica ???
Rodrigo,
não há complicações em criar um pacote EAR levando em considerações alguns aspectos descritos na especificação J2EE como:
- seguir a estrutura de diretorios para cada tipo de pacote (war, jar e ear);
- seguir o padrão de montagem dos arquivos XML (application.xml, web.xml e ej-jar.xml);
De resto apenas utilizo o comando "Jar" disponivel no J2SDK para realizar o empacotamento (WAR, JAR e EAR).
Crie diretorios separados para cada pacote. Crie a estrutura de diretorios para cada um dos 3 pacotes. Em seguida mova os arquivos especificos(.jsp, .class, .tld, .xml, etc...) para os seus respectivos diretorios.
Crie os pacotes seperadamente e depois juntes os dois pacotes(WAR e JAR) no diretorio do EAR, junto com o application.xml e torne a gerar o arquivo EAR.
Uma dica é vc utilizar o ANT (disponivel no site do Jakarta Project) para realizar todas as tarefas referentes a todos os pacotes. Uma vez desenvolvido o script (build.xml), vc não terá mais problemas com montagem de pacotes.
Boa Sorte !
Não é bem assim abetencourt.
Gerar um ear com war, sar e jar é fácil.
O problema é colocar bibliotecas extras como hibernate2.jar dentro deste mesmo ear.
Já que falou do ant:
Gostaria de usar do ant para gerar um manifest descent, com classpath e tudo. O problema que o ant gospe um classpaht com o caminho absoluto. Eu tentei usar o pathConvert mas parece que ele não está funcionando de nada.
<target name="ear" depends="jar, sar, war">
<mkdir dir="${build.deploy.dir}" />
<copy todir="${build.deploy.dir}" overwrite="true">
<fileset dir="${source.jboss.dir}" includes="**/*.*" />
</copy>
<path id="dsinfra-jars">
<fileset dir="${build.deploy.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<!-- Create pseudo Infra's JAR(s) with appropriate
Class-Path: attribute in its manifest to avoid
command line limitations with long classpath -->
<pathconvert property="dsinfra-classpath"
refid="dsinfra-jars"
pathsep=" "
dirsep="/">
<map from="${build.deploy.dir}" to="l" />
</pathconvert>
<ear jarfile="${build.dir}/${Name}.ear"
appxml="${build.deploy.dir}/META-INF/application.xml">
<manifest>
<attribute name="Class-Path" value="${dsinfra-classpath}"/>
</manifest>
<fileset dir="${build.deploy.dir}">
<include name="**/*.*" />
</fileset>
</ear>
<copy todir="${jboss.deploy}" overwrite="true"
file="${build.dir}/${Name}.ear" />
</target>
E voltando ao problema de verdade…
Bom… tem que especificar os arquivos do class-path no application.xml ???
Alguém já fez alguma coisa parecida ???
Olha só:
acho q vc esta com problemas de classpath dentro do context da sua aplicação, e acho q o Manifest não tem nada a ver com isso.
Vc tem q adicionar o hibernate2.jar no diretorio “lib” do container Web.
Mas caso o container EJB utilize alguma classe desse jar, vc precisará descompactar o hibernate2.jar e coloca-lo junto com a suas classes EJB.
A necessidade de adicionar as classes do hibernate2.jar junto com as dos seus EJB no pacote JAR, é pelo motivo do container EJB não dar suporte a nenhum diretorio Lib e não utilizar o lib do container Web. Já tive esse problema e consegui resolver desse modo.
Existe um comando no Ant que adiciona arquivos .jar (lib) dentro no pacote WAR, de uma procurada.
Boa Sorte