2010-10-20 2 views
3

Pour un couple de reaons nous avons un projet-commons.jar situé dans le répertoire lib de notre oreille.L'authentificateur SEAM peut-il résider dans le dossier lib du fichier ear?

project.ear 
    project-web.war 
    project-ejb.jar 
    lib 
    project-commons.jar 

Actuellement, si j'annoter une classe qui est placé dans le projet-commons.jar comme

@Name("authenticator") 
@Scope(ScopeType.APPLICATION) 

SEAM rapporte une trace de pile (ci-dessous). Si je place l'authentificateur dans le projet-web.war ou le projet-ejb.jar SEAM trouve et utilise l'authentificateur très bien. Pour être clair, project-commons est 'trouvé' à partir d'une perspective de classpath (beaucoup de code dans project-web et project-ejb.jar en tirer parti.) Ce problème semble spécifique à la façon dont components.xml résout l'entrée:

<security:identity 
    authenticate-method="#{authenticator.authenticate}" 
    remember-me="true"/> 

Voici la trace de la pile:.

2010-10-20 10:25:44,554 WARN [org.jboss.seam.security.jaas.SeamLoginModule] (http-127.0.0.1-8080-2) Error invoking login method 
javax.el.PropertyNotFoundException: Target Unreachable, identifier 'authenticator' resolved to null 
    at org.jboss.el.parser.AstValue.getTarget(AstValue.java:38) 
    at org.jboss.el.parser.AstValue.invoke(AstValue.java:95) 
    at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:175) 
    at org.jboss.seam.security.jaas.SeamLoginModule.login(SeamLoginModule.java:109) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769) 
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186) 
    at javax.security.auth.login.LoginContext$5.run(LoginContext.java:706) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.login.LoginContext.invokeCreatorPriv(LoginContext.java:703) 
    at javax.security.auth.login.LoginContext.login(LoginContext.java:575) 
    at org.jboss.seam.security.Identity.authenticate(Identity.java:344) 
    at org.jboss.seam.security.Identity.authenticate(Identity.java:332) 
    at org.jboss.seam.security.Identity.login(Identity.java:259) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:335) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:348) 
    at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58) 
    at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) 
    at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:387) 
    at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329) 
    at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304) 
    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261) 
    at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:474) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:530) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) 
    at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) 
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) 
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) 
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) 
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53) 
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) 
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:905) 
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:592) 
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:2036) 
    at java.lang.Thread.run(Thread.java:619) 

Répondre

4

Essayez d'ajouter un fichier seam.properties vide dans votre projet-commons.jar. Ceci est utilisé comme un fichier marqueur qui indique à Seam qu'il y a des composants dans l'archive.

Le problème est que Seam doit "découvrir" les composants annotés avec @Name, entre autres choses. Cependant, l'analyse de l'ensemble du chemin des classes peut être très coûteuse. C'est pourquoi Seam analyse seulement les archives qui ont un fichier seam.properties (ou components.xml).

+0

Merci qui a fait l'affaire. –

0

Il n'y a rien dans Seam appelé @Authenticator Vous devez créer votre propre composant authentificateur

Votre message d'erreur dit Seam ne peut pas trouver un tel composant, donc cela signifie que vous avez aucun composant avec @Name("authenticator")

Voici un exemple link de la façon de créer un authentificateur

MISE À JOUR

On dirait J'avais tort quand il s'agissait de découvrir des composants.

+0

Oui, c'est ce que j'ai (@Name ("authenticator") J'aurais dû être plus précis dans ma question J'ai la syntaxe d'annotation correcte pour identifier l'authentificateur Si vous lisez ma question, vous verrez que j'ai déjà La fonctionnalité d'authentification fonctionne La question est de savoir si les composants peuvent résider dans le répertoire lib d'un fichier EAR C'est seulement quand je place le composant dans EAR/lib que le composant d'authentification n'est plus trouvé. dans EAR/lib –

+0

Je vous remercie pour la mise à jour de votre réponse.A ce stade, j'ai le traitement des composants seam dans le fichier \ lib \ project-commons.jar du fichier EAR, qui sont ensuite utilisés/accédés dans le projet-web. guerre Voulez-vous que je publie un journal ou plus de détails? –

Questions connexes