Re:VRaptor3 404 not Found - Weblogic - Resolvido

22 respostas
ramilani12

Olá
Pessoal

Estou tentando realizar um deploy de uma aplicação desenvolvida em VRaptor no Weblogic 12c mas ao realizar o deploy o Weblogic nao consegue encontrar os meus controllers e recebo 404 not found. Ok rodando no eclipse funciona perfeitamente porque ele consegue realizar o scan no meu class-path mas ao gerar o WAR ele não encontra.

O Weblogic explode WAR em um diretório conforme a sua implementação, mas aparentemente o filter do VRaptor não consegue ler o WEB-INF/classes.

O que fiz até agora adicionei esses parametros no meu web.xml

<context-param>      
         <param-name>br.com.caelum.vraptor.packages</param-name>      
         <param-value>br.com.xxx.quiz.controller</param-value>      
  </context-param>

Mas sem sucesso!
Existe um workaround para resolver isso?

22 Respostas

ramilani12

Bom encontrei o problema ao checar como weblogic explodiu o WAR na pasta WEB-INF/classes não existe nada, mas obviamente dentro do WAR as classes estão lá…

Aonde ele jogou os .class ? no limbo!

ramilani12

Pessoal estou meio travado neste problema ativei o log do vraptor e peguei essas saidas:

17:41:03,022 DEBUG [VRaptor             ] VRaptor received a new request
17:41:03,428 DEBUG [ValidatorFactoryCreator] Initializing JSR303 factory for bean validation
17:41:03,435 DEBUG [JSR303ValidatorFactory] Initializing JSR303 Validator
17:41:03,445 DEBUG [MessageInterpolatorFactory] Initializing JSR303 MessageInterpolator
17:41:03,536 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
17:41:03,536 DEBUG [DefaultResourceTranslator] trying to access /index
17:41:06,046 DEBUG [VRaptor             ] VRaptor ended the request

Aparentemente ele nao esta usando injector do spring e sim do weblogic para carregar os controllers…

ramilani12

Quando realizo o deploy da aplicação no Weblogic geram estes erros:

log4j:WARN Continuable parsing error 27 and column 13 log4j:WARN The content of element type "appender" must match "(errorHandler?,param*,rollingPolicy?,triggeringPolicy?,connectionSource?,layout?,filter*,appender-ref*)". 19:20:07,702 INFO [QuizFilter ] ClassPath SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/bea12c/modules/org.slf4j.jdk14_1.6.1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [zip:C:/bea12c/user_projects/domains/base_domain_qa/servers/AdminServer/tmp/_WL_user/GvtWebQuiz/yegphw/war/WEB-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 19:20:07,723 INFO [BasicConfiguration ] Using class br.com.caelum.vraptor.util.hibernate.HibernateCustomProvider as Container Provider 19:20:07,734 INFO [DefaultSpringLocator] No application context found 19:20:07,756 INFO [WebAppBootstrapFactory] No static WebAppBootstrap found. 19:20:07,757 INFO [BasicConfiguration ] br.com.caelum.vraptor.scanning = null <10/02/2012 19h20min07s BRST> <Error> <HTTP> <BEA-101388> <The ServletContext was passed to the ServletContextListener.contextInitialized method of a ServletContextListener that was neither declared in web.xml or web-fragment.xml, nor annotated with javax.servlet.annotation.WebListener.> <10/02/2012 19h20min07s BRST> <Error> <HTTP> <BEA-101165> <Could not load user defined filter in web.xml: br.com.caelum.vraptor.VRaptor. java.lang.UnsupportedOperationException: [HTTP:101388]The ServletContext was passed to the ServletContextListener.contextInitialized method of a ServletContextListener that was neither declared in web.xml or web-fragment.xml, nor annotated with javax.servlet.annotation.WebListener. at weblogic.servlet.internal.WebAppServletContext.checkNotifyDynamicContext(WebAppServletContext.java:3834) at weblogic.servlet.internal.WebAppServletContext.getClassLoader(WebAppServletContext.java:3634) at br.com.caelum.vraptor.scan.WebBasedClasspathResolver.getClassLoader(WebBasedClasspathResolver.java:43) at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scanPackage(ScannotationComponentScanner.java:96) at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scanBasePackages(ScannotationComponentScanner.java:83) Truncated. see log file for complete stacktrace >

Lucas_Cavalcanti

se vc descompacta o war ele tá com as classes lá dentro mesmo?

vc tá fazendo o deploy via war? ou ear?

ramilani12

Sim as classes estão no war pelo q entendi o weblogic explode o
War em dois diretórios um q contem os .class e outro q não estão e o vraptor
lê deste filesystem q não tem os class
Já fiz um teste copiando os class para o fs e funcionou
Talvez tenho q criar um CustomProvider para injetar as classes.

Lucas_Cavalcanti

registrar o base package da sua aplicação não funcionou, neh?

ramilani12

Olá
Lucas

Tentei isso tbm e não funcionou.

A idéia do custom provider seria o ideal?

Lucas_Cavalcanti

a idéia seria não precisar criar o custom provider…

como vc gerou o war? vc incluiu as entradas de diretório?

ramilani12

Bom gerei o WAR pelo eclipse mesmo. Não inlcui as entradas de diretório.

Lucas_Cavalcanti

tente incluir (em inglês é include directory entries)

ramilani12

Não sei isso resolveria, prq o weblogic explode o war em dois filesystems, mas vou tentar.
Uma alternativa não muito agradavel é gerar um jar dos pacotes e jogar no WEB-INF/lib.

Lucas_Cavalcanti

uma outra solução seria o static scanning…

http://vraptor.caelum.com.br/cookbook/usando-o-static-scanning-no-gae-j/

assim o vraptor não precisa scanear nada, daí não importa como o weblogic explode o war

ramilani12

Olá
Lucas

Adicionei o static scanning mas aparentemente ele nao encontra meu WEB-INF/classes

vraptor-scanning: [java] Starting VRaptor's static classpath scanning [java] Exception in thread "main" br.com.caelum.vraptor.scan.ScannerException: Could not determine WEB-INF/classes location [java] at br.com.caelum.vraptor.scan.StandaloneClasspathResolver.findWebInfClassesLocation(StandaloneClasspathResolver.java:76) [java] at br.com.caelum.vraptor.scan.ScannotationComponentScanner.scan(ScannotationComponentScanner.java:52) [java] at br.com.caelum.vraptor.scan.VRaptorStaticScanning.start(VRaptorStaticScanning.java:48) [java] at br.com.caelum.vraptor.scan.VRaptorStaticScanning.main(VRaptorStaticScanning.java:33) [java] Initiating the scanning... [java] Java Result: 1

Como declarei meu static scanning

<target name="vraptor-scanning" depends="compile"> <path id="compile.classpath"> <fileset dir="WebContent/WEB-INF/lib" includes="*.jar" /> </path> <java classpathref="compile.classpath" classname="br.com.caelum.vraptor.scan.VRaptorStaticScanning" fork="true"> <arg value="WebContent/WEB-INF/web.xml" /> <classpath refid="compile.classpath" /> <classpath path="build/classes" /> </java> </target>

Lucas_Cavalcanti

o seu compile está jogando as classes pra WEB-INF/classes?

ramilani12

O meu compile está jogando para build/classes

veja:

<target name="compile" depends="init" >
		<javac destdir="build/classes" debug="true" srcdir="src">
			<classpath refid="compile.classpath"/>
		</javac>
	</target>
Lucas_Cavalcanti

então troque pra WebContent/WEB-INF/classes

o static scanning só funciona se as classes estiverem aí.

ramilani12

É normal ele gerar .class redundantes ? ou é essa forma que static scanning funciona?

ramilani12

Acredito que isto resolva o problema, mas agora ele não encontra meu hibernate.cfg.xml outro ponto eu preciso ler um arquivo xml em um filesystem, mas ele lê do meu classpath estranho porque a ordem para ler este arquivo deveria ser primeiro no filesystem depois no class-path.

ramilani12

Ops, desconsidere meu ultimo post.

ramilani12

Olá
Lucas,

Não sei prq diabos meu ant está gerando os .class e .xmls duplicados no meu WAR encontrei outros problemas gerando pelo ANT que não entendi, mas consegui resolver o problema de outra forma.
Criei a classe na aplicação br.com.caelum.vraptor.generated.StaticProjectBootstrap exportei o WAR pelo eclipse e voilá funcionou.

Queria entender como vraptor realiza o scan das classes para injetar ele busca no WEB-INF/classes ou src do projeto somente neste dois?

Lucas_Cavalcanti

o problema é que a task war do ant copia as classes do classpath pro WEB-INF/classes, mas como vc já tem as classes lá ele coloca duas vezes no war.

dá pra mandar excluir o que está em WEB-INF/classes dentro da task war.

ramilani12

É verdade corrigi aqui agora e funcionou, gerando pacote pelo ANT

Criado 10 de fevereiro de 2012
Ultima resposta 13 de fev. de 2012
Respostas 22
Participantes 2