Ear

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