Executando método automaticamente: ServletContextListener[RESOLVIDO]

1 resposta
C

Ola a todos,
Estou trabalhando com JSF + JBoss + Maven. Criei um Maven Project que precisa executar um método toda vez que eu der deploy na aplicação.
Pesquisei aqui e vi que poderia fazer com ServletContextListener. Criei um projeto web normal no eclipse, pra testar, e funcionou.
Utilizei a mesma ideia pro outro projeto (configuração do WEB.XML, implementação do ServletContextListener, etc) e este não funcionou.
Recebo a seguinte saída do console:

15:38:06,223 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit.minhaAPP.war.POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit.minhaAPP.war.POST_MODULE: Failed to process phase POST_MODULE of deployment minhaAPP.war

at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.0.Final.jar:7.1.0.Final]

at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0]

at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0]

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011093: Could not load component class br.com.minhaAPP.core.minhaAPP

at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:113)

at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:54)

at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.0.Final.jar:7.1.0.Final]

 5 more

Caused by: java.lang.ClassNotFoundException: br.com.minhaAPP.core.minhaAPP from [Module deployment.minhaAPP.war:main from Service Module Loader]

at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)

at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)

at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)

at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)

at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)

at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:111)

 7 more

O que fazer?
Desde já agradeço a todos!

1 Resposta

C

Bom, de ontem pra hoje evolui um pouco.

Desisti de usar o ServletContextListener configurado no web.xml e passei a tentar usar o SystemEventListener configurado com PostConstructApplicationEvent e PreDestroyApplicationEvent no faces-config.xml

Aparentemente essa é a solução que preciso. Dai criei uma classe que implementa SystemEventListener e tudo...
Só que quando vou iniciar a aplicação ele não encontra essa minha classe.

10:49:42,759 Grave [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-2) Critical error during deployment: : com.sun.faces.config.ConfigurationException: 
  Source Document: jndi:/default-host/ifeedin/WEB-INF/faces-config.xml
  Cause: Unable to find class 'ifeedin.core.Ifeedin'

Segue minha classe:

package ifeedin.core;

import javax.faces.event.AbortProcessingException;
import javax.faces.event.PostConstructApplicationEvent;
import javax.faces.event.PreDestroyApplicationEvent;
import javax.faces.event.SystemEvent;
import javax.faces.event.SystemEventListener;

public class Ifeedin implements SystemEventListener{

	@Override
	public void processEvent(SystemEvent event) throws AbortProcessingException {
		if(event instanceof PostConstructApplicationEvent){
			System.out.println("Aplicação Construida.");
		}
		if(event instanceof PreDestroyApplicationEvent){
			System.out.println("Aplicação Destruida.");
		}	
	}
	@Override
	public boolean isListenerForSource(Object source) {
		// TODO Auto-generated method stub
		return false;
	}
}

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    
    <application>
		<!-- Aplicação é iniciada -->
    	<system-event-listener>
			<system-event-listener-class>ifeedin.core.Ifeedin</system-event-listener-class>
			<system-event-class>javax.faces.event.PostConstructApplicationEvent</system-event-class>    					
    	</system-event-listener> 	 
 
    	<!-- Antes da aplicação ser desligada -->
    	<system-event-listener>
			<system-event-listener-class>ifeedin.core.Ifeedin</system-event-listener-class>
			<system-event-class>javax.faces.event.PreDestroyApplicationEvent</system-event-class>    					
    	</system-event-listener>
	</application>

</faces-config>

Se alguém já passou por isso ae e puder me ajudar, terá minha eterna gratidão! :)

Criado 6 de agosto de 2012
Ultima resposta 7 de ago. de 2012
Respostas 1
Participantes 1