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
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:
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.
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
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