Struts 2 funciona no TOMCAT 7 e não funciona no JBOSS 7

Consegui configurar o JBOSS para rodar minhas aplicações, ajustei o persistance.xml. Agora está funcionando… Porém ,estou tendo problema com Struts2 só no JBOSS que minhas ACTIONS não estão funcionando…

Alguem me da um help ai pls.

Log do JBOSS 7

16:11:21,113 WARN  [org.apache.struts2.dispatcher.Dispatcher] (http--52.0.20.97-8080-1) Could not find action or result: There is no Action mapped for namespace / and action name testeAction. - [unknown location]
	at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:178) [xwork-core-2.1.6.jar:]
	at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) [struts2-core-2.1.8.1.jar:]
	at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) [struts2-core-2.1.8.1.jar:]
	at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47) [xwork-core-2.1.6.jar:]
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478) [struts2-core-2.1.8.1.jar:]
	at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) [struts2-core-2.1.8.1.jar:]
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) [struts2-core-2.1.8.1.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
	at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03]

Action

package action;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

@Action(value = "testeAction", results = { @Result(name = "ok", location = "index.jsp") })
public class TesteAction {

	private String status;
	
	
public String execute(){
	
	EntityManagerFactory factory = Persistence
			.createEntityManagerFactory("OracleJPA");
	EntityManager em = factory.createEntityManager();
	
	status = em.createNativeQuery("select nome from mon_job_responsavel where id=7").getResultList().get(0).toString();
	System.out.println(status);
	em.close();
	
	
	return "ok";
}

public String getStatus() {
	return status;
}

	
}


struts.xml


<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="default" extends="struts-default">
		<interceptors>
			<interceptor name="autorizador" class="interceptor.AutorizadorInterceptor"/>
			<interceptor-stack name="seguranca">
				<interceptor-ref name="autorizador" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>
		<global-results>
			<result name="naoLogado">/WEB-INF/content/acesso/formulario-login.jsp</result>
		</global-results>
		<action name="formSocio">
			<result>/WEB-INF/content/formulario-socio.jsp</result>
		</action>
		<action name="confExclusao">
			<result>/WEB-INF/content/confexclusao.jsp</result>
		</action>
		<action name="formNovoUsuario">
			<result>/WEB-INF/content/formulario-novo-usuario.jsp</result>
		</action>
	</package>
</struts>

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>MonitorJobs</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
${status}
</body>
</html>

persistance.xml


<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
	<persistence-unit name="OracleJPA"
		transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:jboss/datasources/OracleDS</jta-data-source> 
  		<properties>  		
	  	<property name="hibernate.hbm2ddl.auto" value="update" />
		<property name="hibernate.show_sql" value="false" />
		<property name="hibernate.format_sql" value="false" />
		</properties>
	</persistence-unit>
</persistence>

Libs usadas no projeto

antlr-2.7.6.jar
c3p0-0.9.1.jar
cglib-2.2.jar
commons-collections-3.1.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
freemarker-2.3.15.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-testing.jar
hibernate3.jar
infinispan-core-4.2.1.CR1.jar
javassist-3.12.0.GA.jar
jbosscache-core-3.2.1.GA.jar
jstl-api-1.2.jar
jstl-impl-1.2.jar
jta-1.1.jar
log4j-1.2.16.jar
mysql-connector-java-5.1.18-bin.jar
ognl-2.7.3.jar
ojdbc6.jar
oscache-2.1.jar
proxool-0.8.3.jar
slf4j-api-1.6.1.jar
struts2-convention-plugin-2.1.8.1.jar
struts2-core-2.1.8.1.jar
swarmcache-1.0RC2.jar
xwork-core-2.1.6.jar

Tente inserir uma barra antes.

@Action(value = "/testeAction", results = { @Result(name = "ok", location = "/index.jsp") })

Caso não funcione, remova anotação e utilize no XML, para caráter de teste.

<action name="teste"> <result>/index.jsp</result> </action>
acesse[size=11] [color=red]localhost:8080/contextWeb/teste.action[/color][/size] veja se carrega!

Talvez o problema seja o VFS do JBoss. Ja tive problema parecido com o Spring e para ele funcionar corretamente no JBoss precisei adicionar o jar do Snowdrop.

Para te explicar o problema no Spring - a classe responsável por procurar classes anotadas com esteriótipos validos não entende o vfs(a url do arquivo começa com vfs:file:// se não me engano, e da erro) e consequentemente não acha nada.

Testa mapear a action no XML.

[quote=rafaduka]Tente inserir uma barra antes.

@Action(value = "/testeAction", results = { @Result(name = "ok", location = "/index.jsp") })

Caso não funcione, remova anotação e utilize no XML, para caráter de teste.

<action name="teste"> <result>/index.jsp</result> </action>
acesse[size=11] [color=red]localhost:8080/contextWeb/teste.action[/color][/size] veja se carrega!
[/quote]

rafaduka,

Usando XML funcionou! a Action chamou o jsp. Porém, preciso que seja feito por anotação, toda a implementação desse e de outros actions são baseados em anotação. :frowning:

[quote=lsjunior]Talvez o problema seja o VFS do JBoss. Ja tive problema parecido com o Spring e para ele funcionar corretamente no JBoss precisei adicionar o jar do Snowdrop.

Para te explicar o problema no Spring - a classe responsável por procurar classes anotadas com esteriótipos validos não entende o vfs(a url do arquivo começa com vfs:file:// se não me engano, e da erro) e consequentemente não acha nada.

Testa mapear a action no XML.[/quote]

lsjunior,

No XML funcionou. Porém, preciso usar anotação devido a todos os projetos existentes terem sido desenvolvidos dessa forma :frowning:

Olá, para resolver os problemas incialmente utilize o Tattletale. JBoss TattleTale é um projeto iniciado em jboss.org que gera relatórios sobre as classes e dependências de um jar/war/ear e é utilizando em grande escala no mundo “enterprise” JBoss.

Veja o tutorial abaixo:

http://www.mastertheboss.com/jboss-application-server/216-jboss-client-jar.html

[]s

Tente inserir esta anotação:

@ResultPath("/WEB-INF/jsps")

[size=10]The ResultPath annotation allows applications to change the location where results are stored.[/size]
Anotação @ResultPath permite que as aplicações troquem o local onde os results são armazenados.

[quote=rafaduka]Tente inserir esta anotação:

@ResultPath("/WEB-INF/jsps")

[size=10]The ResultPath annotation allows applications to change the location where results are stored.[/size]
Anotação @ResultPath permite que as aplicações troquem o local onde os results são armazenados.

[/quote]

rafaduka

Sobre essa anotação, onde devo colocar? No meu Action não funciona, pois o mesmo nem é carregado usando anotação (NO JBOSS).


type Status report

message There is no Action mapped for namespace / and action name testeAction.

description The requested resource (There is no Action mapped for namespace / and action name testeAction.) is not available.

Lembrando que, no Tomcat 7 essa mesma configuração funciona redondinha…

[quote=jmag]Olá, para resolver os problemas incialmente utilize o Tattletale. JBoss TattleTale é um projeto iniciado em jboss.org que gera relatórios sobre as classes e dependências de um jar/war/ear e é utilizando em grande escala no mundo “enterprise” JBoss.

Veja o tutorial abaixo:

http://www.mastertheboss.com/jboss-application-server/216-jboss-client-jar.html

[]s[/quote]

jmag

Tentei usar o Tattletale, mas não consegui entender direito sobre a configuração dele junto ao JBOSS 7… Teria como você tentar me explicar ?

Muito Obrigado

Devido ao tempo estar curto para que possa pesquisar sobre o assunto, resolvi migrar tudo para XML.

Se por acaso alguem souber o que precisa ser feito para anotação funcionar no JBOSS 7, posta aqui, ou me whispa… sei la… fala comigo, por favor!

VLW

Iai amigo

você conseguiu resolver esse problema?

comigo ta acontecendo o mesmo :frowning:

Com annotation não rolou, precisei migrar tudo para XML.

entendi…