Boa tarde a todos, criei o seguinte build.xml para fazer o EAR da minha aplicação utilizando o Ant:
[code]<?xml version="1.0" encoding="UTF-8"?>
<!-- principais -->
<property file="build.properties"/>
<property name="src.dir" value="${basedir}/src"/>
<property name="build.dir" value="${basedir}/build"/>
<property name="dist.dir" location="${basedir}/dist"/>
<property name="web.dir" value="${basedir}/WebContent"/>
<property name="web.inf.dir" location="${web.dir}/WEB-INF"/>
<property name="jboss.modules" location="${jboss.home}/modules"/>
<property name="jboss.deployments" location="${jboss.home}/standalone/deployments"/>
<!-- estrutura principal do .ear -->
<property name="ear.dir" value="${build.dir}/minhaaplicacao.ear"/>
<property name="war.dir" value="${ear.dir}/minhaaplicacao.war"/>
<property name="metainf.dir" value="${ear.dir}/META-INF"/>
<!-- estrutura principal do. war -->
<property name="webinf.war.dir" value="${war.dir}/WEB-INF"/>
<property name="classes.dir" location="${webinf.war.dir}/classes"/>
<path id="classpath">
<fileset dir="${web.inf.dir}/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${jboss.modules}">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- criando as estruturas do build -->
<target name="criar.estruturas">
<mkdir dir="${ear.dir}"/>
<mkdir dir="${war.dir}"/>
<mkdir dir="${metainf.dir}"/>
<mkdir dir="${war.dir}"/>
<mkdir dir="${webinf.war.dir}"/>
<mkdir dir="${classes.dir}"/>
<mkdir dir="${dist.dir}"/>
</target>
<!-- compilar classes e criar estrutura de classes para o EAR da aplicação -->
<target name="compilar.classes" depends="criar.estruturas">
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false" debug="true" includes="**/*.java">
<classpath refid="classpath"></classpath>
</javac>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<include name="META-INF/**"/>
<include name="appLinks.properties"/>
</fileset>
</copy>
</target>
<!-- criando o war da aplicação -->
<target name="criar.war" depends="compilar.classes">
<copy todir="${war.dir}">
<fileset dir="${web.dir}">
<exclude name="META-INF/**"/>
<exclude name="WEB-INF/**"/>
</fileset>
</copy>
<copy todir="${webinf.war.dir}">
<fileset dir="${web.inf.dir}">
<exclude name="lib/**"/>
<!-- <include name="**/**"/> -->
</fileset>
</copy>
</target>
<!-- criando o ear da aplicação -->
<target name="criar.ear" depends="criar.war">
<copy todir="${metainf.dir}" file="META-INF/application.xml"/>
<copy todir="${ear.dir}">
<fileset dir="${web.inf.dir}">
<exclude name="*.xml"/>
</fileset>
</copy>
<jar jarfile="${dist.dir}/minhaaplicacao.ear" basedir="${ear.dir}"/>
</target>
<!-- realizando o deploy da aplicação -->
<target name="deploy" depends="criar.ear">
<copy todir="${jboss.deployments}">
<fileset dir="${dist.dir}" includes="**/**"/>
</copy>
</target>
<!-- apagar tudo -->
<target name="limpar">
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
<delete dir="${jboss.deployments}" includes="**/**"/>
</target>
[/code]
Este xml resulta na seguinte estrutura do EAR:
minhaaplicacao.ear
|---- META-INF
|---- application.xml
|---- MANIFEST.MF
|---- minhaaplicacao.war
|---- acessos (folder que contém as páginas xhtml)
|---- imagens (folder que contém as imagens do projeto)
|---- resources (folder que contém os recursos .js e .css)
|---- WEB-INF
|---- classes
|---- folders que contém os arquivos .class do projeto, incluse os EJBs
|---- META-INF
|---- persistence.xml
|---- application.properties
|---- faces-config.xml
|---- web.xml
|---- welcome.html
|---- lib
|---- .jar que estão na pasta lib dentro de WebContent/WEB-INF/lib
Após rodar o build.xml, o arquivo minhaaplicacao.ear é criado na pasta deployments do jboss 7.1 e, quando vou subir o servidor tenho os seguintes resultados (e exception):
[code]14:37:15,554 INFO [org.jboss.modules] JBoss Modules version 1.1.1.GA
14:37:16,159 INFO [org.jboss.msc] JBoss MSC version 1.0.2.GA
14:37:16,240 INFO [org.jboss.as] JBAS015899: JBoss AS 7.1.1.Final “Brontes” starting
14:37:17,589 INFO [org.xnio] XNIO Version 3.0.3.GA
14:37:17,590 INFO [org.jboss.as.server] JBAS015888: Creating http management service using socket-binding (management-http)
14:37:17,604 INFO [org.xnio.nio] XNIO NIO Implementation Version 3.0.3.GA
14:37:17,643 INFO [org.jboss.remoting] JBoss Remoting version 3.2.3.GA
14:37:17,685 INFO [org.jboss.as.logging] JBAS011502: Removing bootstrap log handlers
14:37:17,687 INFO [org.jboss.as.configadmin] (ServerService Thread Pool – 26) JBAS016200: Activating ConfigAdmin Subsystem
14:37:17,708 INFO [org.jboss.as.security] (ServerService Thread Pool – 44) JBAS013101: Activating Security Subsystem
14:37:17,701 INFO [org.jboss.as.osgi] (ServerService Thread Pool – 39) JBAS011940: Activating OSGi Subsystem
14:37:17,698 INFO [org.jboss.as.naming] (ServerService Thread Pool – 38) JBAS011800: Activating Naming Subsystem
14:37:17,698 INFO [org.jboss.as.connector] (MSC service thread 1-8) JBAS010408: Starting JCA Subsystem (JBoss IronJacamar 1.0.9.Final)
14:37:17,692 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool – 31) JBAS010280: Activating Infinispan subsystem.
14:37:17,713 INFO [org.jboss.as.webservices] (ServerService Thread Pool – 48) JBAS015537: Activating WebServices Extension
14:37:17,849 INFO [org.jboss.as.security] (MSC service thread 1-6) JBAS013100: Current PicketBox version=4.0.7.Final
14:37:18,293 INFO [org.jboss.ws.common.management.AbstractServerConfig] (MSC service thread 1-4) JBoss Web Services - Stack CXF Server 4.0.2.GA
14:37:18,391 INFO [org.jboss.as.naming] (MSC service thread 1-4) JBAS011802: Starting Naming Service
14:37:18,393 INFO [org.jboss.as.mail.extension] (MSC service thread 1-4) JBAS015400: Bound mail session [java:jboss/mail/Default]
14:37:18,403 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool – 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
14:37:18,404 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-8) Starting Coyote HTTP/1.1 on http-localhost-127.0.0.1-8080
14:37:18,411 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool – 27) JBAS010404: Deploying non-JDBC-compliant driver class com.mysql.jdbc.Driver (version 5.1)
14:37:18,674 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-1) JBAS015012: Started FileSystemDeploymentService for directory C:\servidores\jboss-as-7.1.1.Final\standalone\deployments
14:37:18,693 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on localhost/127.0.0.1:4447
14:37:18,693 INFO [org.jboss.as.remoting] (MSC service thread 1-8) JBAS017100: Listening on /127.0.0.1:9999
14:37:18,772 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-5) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
14:37:18,777 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-8) JBAS010400: Bound data source [java:/minhaaplicacaoDS]
14:37:18,837 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876: Starting deployment of "minhaaplicacao.ear"
14:37:19,227 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876: Starting deployment of "minhaaplicacao.war"
14:37:19,284 INFO [org.jboss.as.jpa] (MSC service thread 1-2) JBAS011401: Read persistence.xml for MEU_JURIDICO
14:37:19,360 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named TesteDAO in deployment unit subdeployment “minhaaplicacao.war” of deployment “minhaaplicacao.ear” are as follows:
java:global/minhaaplicacao/minhaaplicacao/TesteDAO!br.com.minhaaplicacao.persistence.TesteDAO
java:app/minhaaplicacao/TesteDAO!br.com.minhaaplicacao.persistence.TesteDAO
java:module/TesteDAO!br.com.minhaaplicacao.persistence.TesteDAO
java:global/minhaaplicacao/minhaaplicacao/TesteDAO
java:app/minhaaplicacao/TesteDAO
java:module/TesteDAO
14:37:19,361 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named ClienteBO in deployment unit subdeployment “minhaaplicacao.war” of deployment “minhaaplicacao.ear” are as follows:
java:global/minhaaplicacao/minhaaplicacao/ClienteBO!br.com.minhaaplicacao.business.ClienteBO
java:app/minhaaplicacao/ClienteBO!br.com.minhaaplicacao.business.ClienteBO
java:module/ClienteBO!br.com.minhaaplicacao.business.ClienteBO
java:global/minhaaplicacao/minhaaplicacao/ClienteBO
java:app/minhaaplicacao/ClienteBO
java:module/ClienteBO
14:37:19,362 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named ClienteDAO in deployment unit subdeployment “minhaaplicacao.war” of deployment “minhaaplicacao.ear” are as follows:
java:global/minhaaplicacao/minhaaplicacao/ClienteDAO!br.com.minhaaplicacao.persistence.ClienteDAO
java:app/minhaaplicacao/ClienteDAO!br.com.minhaaplicacao.persistence.ClienteDAO
java:module/ClienteDAO!br.com.minhaaplicacao.persistence.ClienteDAO
java:global/minhaaplicacao/minhaaplicacao/ClienteDAO
java:app/minhaaplicacao/ClienteDAO
java:module/ClienteDAO
14:37:19,506 INFO [org.jboss.as.jpa] (MSC service thread 1-3) JBAS011402: Starting Persistence Unit Service 'minhaaplicacao.ear/minhaaplicacao.war#MEU_JURIDICO’
14:37:19,593 INFO [org.hibernate.annotations.common.Version] (MSC service thread 1-3) HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
14:37:19,596 INFO [org.hibernate.Version] (MSC service thread 1-3) HHH000412: Hibernate Core {4.0.1.Final}
14:37:19,597 INFO [org.hibernate.cfg.Environment] (MSC service thread 1-3) HHH000206: hibernate.properties not found
14:37:19,598 INFO [org.hibernate.cfg.Environment] (MSC service thread 1-3) HHH000021: Bytecode provider name : javassist
14:37:19,610 INFO [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-3) HHH000204: Processing PersistenceUnitInfo [
name: MEU_JURIDICO
…]
14:37:19,747 INFO [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (MSC service thread 1-3) HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
14:37:19,772 INFO [org.hibernate.dialect.Dialect] (MSC service thread 1-3) HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
14:37:19,777 INFO [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (MSC service thread 1-3) HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
14:37:19,782 INFO [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (MSC service thread 1-3) HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
14:37:19,785 INFO [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory] (MSC service thread 1-3) HHH000397: Using ASTQueryTranslatorFactory
14:37:19,810 INFO [org.hibernate.validator.util.Version] (MSC service thread 1-3) Hibernate Validator 4.2.0.Final
14:37:20,091 SEVERE [javax.faces] (MSC service thread 1-7) O aplicativo não foi iniciado corretamente na inicialização. Não foi possível encontrar Fábrica: javax.faces.context.FacesContextFactory. Attempting to find backup.
14:37:20,092 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/minhaaplicacao]] (MSC service thread 1-7) StandardWrapper.Throwable: java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactory.
at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1008) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:343) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.webapp.FacesServlet.init(FacesServlet.java:302) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3655) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3873) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_07]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_07]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_07]
14:37:20,120 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/minhaaplicacao]] (MSC service thread 1-7) Servlet /minhaaplicacao threw load() exception: java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactory.
at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1008) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:343) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.webapp.FacesServlet.init(FacesServlet.java:302) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3655) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3873) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_07]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_07]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_07]
14:37:20,150 INFO [org.jboss.web] (MSC service thread 1-7) JBAS018210: Registering web context: /minhaaplicacao
14:37:20,151 INFO [org.jboss.as] (MSC service thread 1-7) JBAS015951: Admin console listening on http://127.0.0.1:9990
14:37:20,152 INFO [org.jboss.as] (MSC service thread 1-7) JBAS015874: JBoss AS 7.1.1.Final “Brontes” started in 5431ms - Started 240 of 320 services (78 services are passive or on-demand)
14:37:20,351 INFO [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed “minhaaplicacao.ear”
[/code]
- Aparentemente meu ear está sendo interpretado pelo servidor corretamente conforme últimas linhas do log, porém não consigo acessar a aplicação pelo browse (localhost:8080/minhaaplicacao). Porquê?;
- A respeito da exception, pesquisei bastante a respeito dela porém não consegui chegar a uma solução. Li que pode ter relação com a falta de algum .jar da implementação do JSF e que deve ser adicionado uma nova module para ele porém no próprio jboss 7.1 tem as dependências do jsf mas eu não estou sabendo como utilizar caso o erro realmente seja por falta de lib. Como faço para que o jboss utilize os modules já configurados por ele e evitar essa exception?
Desde já agradeço pela atenção e pela ajuda!