Commit f7a18fbf416e9b010f685c7bf0a22f43cc482460
1 parent
97dc65cc
Exists in
master
[FWK-234] Removido FacesContextProxy, introduzido FacesContextProducer e
foram tomadas medidas para disparar erros caso o desenvolvedor tente injetar referências de FacesContext em atributos de classes serializáveis (nesse caso o atributo deve ser transient).
Showing
8 changed files
with
151 additions
and
245 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Beans.java
| @@ -77,6 +77,30 @@ public final class Beans { | @@ -77,6 +77,30 @@ public final class Beans { | ||
| 77 | return beanManager; | 77 | return beanManager; |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | + /** | ||
| 81 | + * Obtains a injectble instance of a bean, which have the given EL name and are available for injection in the point | ||
| 82 | + * where this method was call. | ||
| 83 | + * | ||
| 84 | + * @param beanName | ||
| 85 | + * the EL name for the requested bean. | ||
| 86 | + * @return Type a instace of the injected beanClass. | ||
| 87 | + * @throws DemoiselleException | ||
| 88 | + * if no bean are avaliable to be injected for the given bean name. | ||
| 89 | + */ | ||
| 90 | + public static <T> T getReference(String beanName) { | ||
| 91 | + T instance; | ||
| 92 | + | ||
| 93 | + try { | ||
| 94 | + instance = (T) createReference(getBeanManager().getBeans(beanName), (Class<T>) null); | ||
| 95 | + | ||
| 96 | + } catch (NoSuchElementException cause) { | ||
| 97 | + String message = getBundle().getString("bean-not-found", beanName); | ||
| 98 | + throw new DemoiselleException(message, cause); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + return instance; | ||
| 102 | + } | ||
| 103 | + | ||
| 80 | public static <T> T getReference(final Class<T> beanClass) { | 104 | public static <T> T getReference(final Class<T> beanClass) { |
| 81 | return getReference(beanClass, (Annotation[]) null); | 105 | return getReference(beanClass, (Annotation[]) null); |
| 82 | } | 106 | } |
| @@ -104,7 +128,7 @@ public final class Beans { | @@ -104,7 +128,7 @@ public final class Beans { | ||
| 104 | beans = getBeanManager().getBeans(beanClass, qualifiers); | 128 | beans = getBeanManager().getBeans(beanClass, qualifiers); |
| 105 | } | 129 | } |
| 106 | 130 | ||
| 107 | - instance = (T) getReference(beans, beanClass, qualifiers); | 131 | + instance = (T) createReference(beans, beanClass, qualifiers); |
| 108 | 132 | ||
| 109 | } catch (NoSuchElementException cause) { | 133 | } catch (NoSuchElementException cause) { |
| 110 | StringBuffer buffer = new StringBuffer(); | 134 | StringBuffer buffer = new StringBuffer(); |
| @@ -124,33 +148,8 @@ public final class Beans { | @@ -124,33 +148,8 @@ public final class Beans { | ||
| 124 | return instance; | 148 | return instance; |
| 125 | } | 149 | } |
| 126 | 150 | ||
| 127 | - /** | ||
| 128 | - * Obtains a injectble instance of a bean, which have the given EL name and are available for injection in the point | ||
| 129 | - * where this method was call. | ||
| 130 | - * | ||
| 131 | - * @param beanName | ||
| 132 | - * the EL name for the requested bean. | ||
| 133 | - * @return Type a instace of the injected beanClass. | ||
| 134 | - * @throws DemoiselleException | ||
| 135 | - * if no bean are avaliable to be injected for the given bean name. | ||
| 136 | - */ | ||
| 137 | - @SuppressWarnings("unchecked") | ||
| 138 | - public static <T> T getReference(String beanName) { | ||
| 139 | - T instance; | ||
| 140 | - | ||
| 141 | - try { | ||
| 142 | - instance = (T) getReference(getBeanManager().getBeans(beanName)); | ||
| 143 | - | ||
| 144 | - } catch (NoSuchElementException cause) { | ||
| 145 | - String message = getBundle().getString("bean-not-found", beanName); | ||
| 146 | - throw new DemoiselleException(message, cause); | ||
| 147 | - } | ||
| 148 | - | ||
| 149 | - return instance; | ||
| 150 | - } | ||
| 151 | - | ||
| 152 | @SuppressWarnings("unchecked") | 151 | @SuppressWarnings("unchecked") |
| 153 | - private static <T> T getReference(Set<Bean<?>> beans, Class<T> beanClass, Annotation... qualifiers) { | 152 | + private static <T> T createReference(Set<Bean<?>> beans, Class<T> beanClass, Annotation... qualifiers) { |
| 154 | if (beans.size() > 1) { | 153 | if (beans.size() > 1) { |
| 155 | String message = getBundle().getString("ambiguous-bean-resolution", beanClass.getName(), beans.toString()); | 154 | String message = getBundle().getString("ambiguous-bean-resolution", beanClass.getName(), beans.toString()); |
| 156 | throw new DemoiselleException(message, new AmbiguousResolutionException()); | 155 | throw new DemoiselleException(message, new AmbiguousResolutionException()); |
| @@ -162,23 +161,42 @@ public final class Beans { | @@ -162,23 +161,42 @@ public final class Beans { | ||
| 162 | InjectionPoint injectionPoint; | 161 | InjectionPoint injectionPoint; |
| 163 | 162 | ||
| 164 | if (qualifiers == null) { | 163 | if (qualifiers == null) { |
| 165 | - injectionPoint = new CustomInjectionPoint(bean, beanType); | 164 | + injectionPoint = new ProgramaticInjectionPoint(bean, beanType); |
| 166 | } else { | 165 | } else { |
| 167 | - injectionPoint = new CustomInjectionPoint(bean, beanType, qualifiers); | 166 | + injectionPoint = new ProgramaticInjectionPoint(bean, beanType, qualifiers); |
| 168 | } | 167 | } |
| 169 | 168 | ||
| 170 | return (T) getBeanManager().getInjectableReference(injectionPoint, context); | 169 | return (T) getBeanManager().getInjectableReference(injectionPoint, context); |
| 171 | } | 170 | } |
| 172 | 171 | ||
| 173 | - private static <T> T getReference(Set<Bean<?>> beans) { | ||
| 174 | - return getReference(beans, (Class<T>) null); | ||
| 175 | - } | 172 | + /* |
| 173 | + * private static <T> T getReference(Set<Bean<?>> beans) { return getReference(beans, (Class<T>) null, (Member) | ||
| 174 | + * null); } | ||
| 175 | + */ | ||
| 176 | 176 | ||
| 177 | private static ResourceBundle getBundle() { | 177 | private static ResourceBundle getBundle() { |
| 178 | return Beans.getReference(ResourceBundle.class, new NameQualifier("demoiselle-core-bundle")); | 178 | return Beans.getReference(ResourceBundle.class, new NameQualifier("demoiselle-core-bundle")); |
| 179 | } | 179 | } |
| 180 | 180 | ||
| 181 | - static class CustomInjectionPoint implements InjectionPoint { | 181 | + /** |
| 182 | + * <p> | ||
| 183 | + * A dummy injection point created when getting a new bean through one of the {@link Beans#getReference} methods. | ||
| 184 | + * </p> | ||
| 185 | + * <p> | ||
| 186 | + * This dummy injection point returns valid values for {@link #getBean()}, {@link #getType()} and | ||
| 187 | + * {@link #getQualifiers()} methods, but it always returns <code>null</code> for {@link #getMember()} as there is no | ||
| 188 | + * real class member where the bean was injected. | ||
| 189 | + * </p> | ||
| 190 | + * <p> | ||
| 191 | + * This injection point also always return <code>false</code> for {@link #isDelegate()} and {@link #isTransient()}. | ||
| 192 | + * In the case of {@link #isTransient()} there is no real way to know if the field receiving the value of | ||
| 193 | + * {@link Beans#getReference} is transient, so take special care when assigning non-serializable beans into | ||
| 194 | + * non-transient fields of serializable classes. | ||
| 195 | + * </p> | ||
| 196 | + * | ||
| 197 | + * @author SERPRO | ||
| 198 | + */ | ||
| 199 | + public static final class ProgramaticInjectionPoint implements InjectionPoint { | ||
| 182 | 200 | ||
| 183 | private final Bean<?> bean; | 201 | private final Bean<?> bean; |
| 184 | 202 | ||
| @@ -186,7 +204,7 @@ public final class Beans { | @@ -186,7 +204,7 @@ public final class Beans { | ||
| 186 | 204 | ||
| 187 | private final Set<Annotation> qualifiers; | 205 | private final Set<Annotation> qualifiers; |
| 188 | 206 | ||
| 189 | - public CustomInjectionPoint(Bean<?> bean, Type beanType, Annotation... qualifiers) { | 207 | + public ProgramaticInjectionPoint(Bean<?> bean, Type beanType, Annotation... qualifiers) { |
| 190 | this.bean = bean; | 208 | this.bean = bean; |
| 191 | this.beanType = beanType; | 209 | this.beanType = beanType; |
| 192 | this.qualifiers = new HashSet<Annotation>(Arrays.asList(qualifiers)); | 210 | this.qualifiers = new HashSet<Annotation>(Arrays.asList(qualifiers)); |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/procuder/FacesContextProducer.java
0 → 100644
| @@ -0,0 +1,93 @@ | @@ -0,0 +1,93 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +/* | ||
| 38 | + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the | ||
| 39 | + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE | ||
| 40 | + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is | ||
| 41 | + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part | ||
| 42 | + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the | ||
| 43 | + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework | ||
| 44 | + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 45 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You | ||
| 46 | + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see | ||
| 47 | + * <http://www.gnu.org/licenses/>. | ||
| 48 | + */ | ||
| 49 | +package br.gov.frameworkdemoiselle.internal.procuder; | ||
| 50 | + | ||
| 51 | +import java.io.NotSerializableException; | ||
| 52 | +import java.io.Serializable; | ||
| 53 | +import java.lang.reflect.Member; | ||
| 54 | +import java.util.logging.Logger; | ||
| 55 | + | ||
| 56 | +import javax.enterprise.context.ContextNotActiveException; | ||
| 57 | +import javax.enterprise.context.Dependent; | ||
| 58 | +import javax.enterprise.inject.Produces; | ||
| 59 | +import javax.enterprise.inject.spi.InjectionPoint; | ||
| 60 | +import javax.faces.context.FacesContext; | ||
| 61 | + | ||
| 62 | +import br.gov.frameworkdemoiselle.DemoiselleException; | ||
| 63 | +import br.gov.frameworkdemoiselle.annotation.Name; | ||
| 64 | +import br.gov.frameworkdemoiselle.util.Beans.ProgramaticInjectionPoint; | ||
| 65 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | ||
| 66 | + | ||
| 67 | +public class FacesContextProducer { | ||
| 68 | + | ||
| 69 | + @Produces | ||
| 70 | + @Dependent | ||
| 71 | + public FacesContext create(InjectionPoint ip, @Name("demoiselle-jsf-bundle") ResourceBundle bundle, Logger logger) { | ||
| 72 | + if (ip != null && !ip.isTransient()) { | ||
| 73 | + final Member member = ip.getMember(); | ||
| 74 | + if (member != null) { | ||
| 75 | + Class<?> declaringClass = member.getDeclaringClass(); | ||
| 76 | + if (Serializable.class.isAssignableFrom(declaringClass)) { | ||
| 77 | + throw new DemoiselleException(bundle.getString("faces-context-not-passivable", member.getName(), | ||
| 78 | + declaringClass.getCanonicalName()), new NotSerializableException( | ||
| 79 | + FacesContext.class.getCanonicalName())); | ||
| 80 | + } | ||
| 81 | + } else if (ProgramaticInjectionPoint.class.isInstance(ip)) { | ||
| 82 | + logger.fine(bundle.getString("faces-context-passivation-warning")); | ||
| 83 | + } | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + FacesContext context = FacesContext.getCurrentInstance(); | ||
| 87 | + if (context == null) { | ||
| 88 | + throw new ContextNotActiveException(bundle.getString("faces-context-not-available")); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + return context; | ||
| 92 | + } | ||
| 93 | +} |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/proxy/FacesContextProxy.java
| @@ -1,205 +0,0 @@ | @@ -1,205 +0,0 @@ | ||
| 1 | -package br.gov.frameworkdemoiselle.internal.proxy; | ||
| 2 | - | ||
| 3 | -import java.io.Serializable; | ||
| 4 | -import java.util.Iterator; | ||
| 5 | -import java.util.List; | ||
| 6 | -import java.util.Map; | ||
| 7 | - | ||
| 8 | -import javax.annotation.PostConstruct; | ||
| 9 | -import javax.el.ELContext; | ||
| 10 | -import javax.enterprise.context.ContextNotActiveException; | ||
| 11 | -import javax.enterprise.inject.Default; | ||
| 12 | -import javax.faces.application.Application; | ||
| 13 | -import javax.faces.application.FacesMessage; | ||
| 14 | -import javax.faces.application.FacesMessage.Severity; | ||
| 15 | -import javax.faces.application.ProjectStage; | ||
| 16 | -import javax.faces.component.UIViewRoot; | ||
| 17 | -import javax.faces.context.ExceptionHandler; | ||
| 18 | -import javax.faces.context.ExternalContext; | ||
| 19 | -import javax.faces.context.FacesContext; | ||
| 20 | -import javax.faces.context.PartialViewContext; | ||
| 21 | -import javax.faces.context.ResponseStream; | ||
| 22 | -import javax.faces.context.ResponseWriter; | ||
| 23 | -import javax.faces.event.PhaseId; | ||
| 24 | -import javax.faces.render.RenderKit; | ||
| 25 | -import javax.inject.Inject; | ||
| 26 | - | ||
| 27 | -import br.gov.frameworkdemoiselle.annotation.Name; | ||
| 28 | -import br.gov.frameworkdemoiselle.util.ResourceBundle; | ||
| 29 | - | ||
| 30 | -@Default | ||
| 31 | -public class FacesContextProxy extends FacesContext implements Serializable { | ||
| 32 | - | ||
| 33 | - private static final long serialVersionUID = 1L; | ||
| 34 | - | ||
| 35 | - @Inject | ||
| 36 | - @Name("demoiselle-jsf-bundle") | ||
| 37 | - private ResourceBundle bundle; | ||
| 38 | - | ||
| 39 | - @PostConstruct | ||
| 40 | - protected void initialize() { | ||
| 41 | - getDelegate(); | ||
| 42 | - } | ||
| 43 | - | ||
| 44 | - public FacesContext getDelegate() { | ||
| 45 | - FacesContext facesContext = FacesContext.getCurrentInstance(); | ||
| 46 | - | ||
| 47 | - if (facesContext == null) { | ||
| 48 | - throw new ContextNotActiveException(bundle.getString("faces-context-not-available")); | ||
| 49 | - } | ||
| 50 | - | ||
| 51 | - return facesContext; | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - public int hashCode() { | ||
| 55 | - return getDelegate().hashCode(); | ||
| 56 | - } | ||
| 57 | - | ||
| 58 | - public boolean equals(Object obj) { | ||
| 59 | - return getDelegate().equals(obj); | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - public Application getApplication() { | ||
| 63 | - return getDelegate().getApplication(); | ||
| 64 | - } | ||
| 65 | - | ||
| 66 | - public Map<Object, Object> getAttributes() { | ||
| 67 | - return getDelegate().getAttributes(); | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - public PartialViewContext getPartialViewContext() { | ||
| 71 | - return getDelegate().getPartialViewContext(); | ||
| 72 | - } | ||
| 73 | - | ||
| 74 | - public Iterator<String> getClientIdsWithMessages() { | ||
| 75 | - return getDelegate().getClientIdsWithMessages(); | ||
| 76 | - } | ||
| 77 | - | ||
| 78 | - public String toString() { | ||
| 79 | - return getDelegate().toString(); | ||
| 80 | - } | ||
| 81 | - | ||
| 82 | - public ELContext getELContext() { | ||
| 83 | - return getDelegate().getELContext(); | ||
| 84 | - } | ||
| 85 | - | ||
| 86 | - public ExceptionHandler getExceptionHandler() { | ||
| 87 | - return getDelegate().getExceptionHandler(); | ||
| 88 | - } | ||
| 89 | - | ||
| 90 | - public void setExceptionHandler(ExceptionHandler exceptionHandler) { | ||
| 91 | - getDelegate().setExceptionHandler(exceptionHandler); | ||
| 92 | - } | ||
| 93 | - | ||
| 94 | - public ExternalContext getExternalContext() { | ||
| 95 | - return getDelegate().getExternalContext(); | ||
| 96 | - } | ||
| 97 | - | ||
| 98 | - public Severity getMaximumSeverity() { | ||
| 99 | - return getDelegate().getMaximumSeverity(); | ||
| 100 | - } | ||
| 101 | - | ||
| 102 | - public Iterator<FacesMessage> getMessages() { | ||
| 103 | - return getDelegate().getMessages(); | ||
| 104 | - } | ||
| 105 | - | ||
| 106 | - public List<FacesMessage> getMessageList() { | ||
| 107 | - return getDelegate().getMessageList(); | ||
| 108 | - } | ||
| 109 | - | ||
| 110 | - public List<FacesMessage> getMessageList(String clientId) { | ||
| 111 | - return getDelegate().getMessageList(clientId); | ||
| 112 | - } | ||
| 113 | - | ||
| 114 | - public Iterator<FacesMessage> getMessages(String clientId) { | ||
| 115 | - return getDelegate().getMessages(clientId); | ||
| 116 | - } | ||
| 117 | - | ||
| 118 | - public RenderKit getRenderKit() { | ||
| 119 | - return getDelegate().getRenderKit(); | ||
| 120 | - } | ||
| 121 | - | ||
| 122 | - public boolean getRenderResponse() { | ||
| 123 | - return getDelegate().getRenderResponse(); | ||
| 124 | - } | ||
| 125 | - | ||
| 126 | - public boolean getResponseComplete() { | ||
| 127 | - return getDelegate().getResponseComplete(); | ||
| 128 | - } | ||
| 129 | - | ||
| 130 | - public boolean isValidationFailed() { | ||
| 131 | - return getDelegate().isValidationFailed(); | ||
| 132 | - } | ||
| 133 | - | ||
| 134 | - public ResponseStream getResponseStream() { | ||
| 135 | - return getDelegate().getResponseStream(); | ||
| 136 | - } | ||
| 137 | - | ||
| 138 | - public void setResponseStream(ResponseStream responseStream) { | ||
| 139 | - getDelegate().setResponseStream(responseStream); | ||
| 140 | - } | ||
| 141 | - | ||
| 142 | - public ResponseWriter getResponseWriter() { | ||
| 143 | - return getDelegate().getResponseWriter(); | ||
| 144 | - } | ||
| 145 | - | ||
| 146 | - public void setResponseWriter(ResponseWriter responseWriter) { | ||
| 147 | - getDelegate().setResponseWriter(responseWriter); | ||
| 148 | - } | ||
| 149 | - | ||
| 150 | - public UIViewRoot getViewRoot() { | ||
| 151 | - return getDelegate().getViewRoot(); | ||
| 152 | - } | ||
| 153 | - | ||
| 154 | - public void setViewRoot(UIViewRoot root) { | ||
| 155 | - getDelegate().setViewRoot(root); | ||
| 156 | - } | ||
| 157 | - | ||
| 158 | - public void addMessage(String clientId, FacesMessage message) { | ||
| 159 | - getDelegate().addMessage(clientId, message); | ||
| 160 | - } | ||
| 161 | - | ||
| 162 | - public boolean isReleased() { | ||
| 163 | - return getDelegate().isReleased(); | ||
| 164 | - } | ||
| 165 | - | ||
| 166 | - public void release() { | ||
| 167 | - getDelegate().release(); | ||
| 168 | - } | ||
| 169 | - | ||
| 170 | - public void renderResponse() { | ||
| 171 | - getDelegate().renderResponse(); | ||
| 172 | - } | ||
| 173 | - | ||
| 174 | - public boolean isPostback() { | ||
| 175 | - return getDelegate().isPostback(); | ||
| 176 | - } | ||
| 177 | - | ||
| 178 | - public void responseComplete() { | ||
| 179 | - getDelegate().responseComplete(); | ||
| 180 | - } | ||
| 181 | - | ||
| 182 | - public void validationFailed() { | ||
| 183 | - getDelegate().validationFailed(); | ||
| 184 | - } | ||
| 185 | - | ||
| 186 | - public PhaseId getCurrentPhaseId() { | ||
| 187 | - return getDelegate().getCurrentPhaseId(); | ||
| 188 | - } | ||
| 189 | - | ||
| 190 | - public void setCurrentPhaseId(PhaseId currentPhaseId) { | ||
| 191 | - getDelegate().setCurrentPhaseId(currentPhaseId); | ||
| 192 | - } | ||
| 193 | - | ||
| 194 | - public void setProcessingEvents(boolean processingEvents) { | ||
| 195 | - getDelegate().setProcessingEvents(processingEvents); | ||
| 196 | - } | ||
| 197 | - | ||
| 198 | - public boolean isProcessingEvents() { | ||
| 199 | - return getDelegate().isProcessingEvents(); | ||
| 200 | - } | ||
| 201 | - | ||
| 202 | - public boolean isProjectStage(ProjectStage stage) { | ||
| 203 | - return getDelegate().isProjectStage(stage); | ||
| 204 | - } | ||
| 205 | -} |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/template/AbstractEditPageBean.java
| @@ -76,7 +76,7 @@ public abstract class AbstractEditPageBean<T, I> extends AbstractPageBean implem | @@ -76,7 +76,7 @@ public abstract class AbstractEditPageBean<T, I> extends AbstractPageBean implem | ||
| 76 | private ResourceBundle bundle; | 76 | private ResourceBundle bundle; |
| 77 | 77 | ||
| 78 | @Inject | 78 | @Inject |
| 79 | - private FacesContext facesContext; | 79 | + private transient FacesContext facesContext; |
| 80 | 80 | ||
| 81 | protected void clear() { | 81 | protected void clear() { |
| 82 | this.id = null; | 82 | this.id = null; |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/template/AbstractPageBean.java
| @@ -53,7 +53,7 @@ public abstract class AbstractPageBean implements PageBean { | @@ -53,7 +53,7 @@ public abstract class AbstractPageBean implements PageBean { | ||
| 53 | private static final long serialVersionUID = 1L; | 53 | private static final long serialVersionUID = 1L; |
| 54 | 54 | ||
| 55 | @Inject | 55 | @Inject |
| 56 | - private FacesContext facesContext; | 56 | + private transient FacesContext facesContext; |
| 57 | 57 | ||
| 58 | private String nextView; | 58 | private String nextView; |
| 59 | 59 |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/util/Locales.java
| @@ -65,7 +65,7 @@ public class Locales implements Serializable { | @@ -65,7 +65,7 @@ public class Locales implements Serializable { | ||
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | @Inject | 67 | @Inject |
| 68 | - private FacesContext facesContext; | 68 | + private transient FacesContext facesContext; |
| 69 | 69 | ||
| 70 | /** | 70 | /** |
| 71 | * Set the language to "en_US". This is a shorthand to <code>setLocale(Locale.US)</code>. | 71 | * Set the language to "en_US". This is a shorthand to <code>setLocale(Locale.US)</code>. |
impl/extension/jsf/src/main/resources/demoiselle-jsf-bundle.properties
| @@ -34,8 +34,10 @@ | @@ -34,8 +34,10 @@ | ||
| 34 | # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | 34 | # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. |
| 35 | 35 | ||
| 36 | id-converter-not-found=Voc\u00EA precisa criar um FacesConverter para a classe "{0}". | 36 | id-converter-not-found=Voc\u00EA precisa criar um FacesConverter para a classe "{0}". |
| 37 | +faces-context-passivation-warning=FacesContext obtido atrav\u00E9s de Beans.getReference. Se valor for atribuido a um atributo de classe, certifique-se que a classe n\u00E3o implementa [Serializable] ou que o atributo \u00E9 marcado como [transient]. | ||
| 37 | login-page-not-found=A tela de login "{0}" n\u00E3o foi encontrada. Caso essa n\u00E3o seja a p\u00E1gina correta, defina a p\u00E1gina no arquivo de configura\u00E7\u00E3o usando a chave "frameworkdemoiselle.security.login.page" | 38 | login-page-not-found=A tela de login "{0}" n\u00E3o foi encontrada. Caso essa n\u00E3o seja a p\u00E1gina correta, defina a p\u00E1gina no arquivo de configura\u00E7\u00E3o usando a chave "frameworkdemoiselle.security.login.page" |
| 38 | after-login-page-not-found=A tela "{0}" acessada ap\u00F3s o login n\u00E3o foi encontrada. Caso essa n\u00E3o seja a p\u00E1gina correta, defina a p\u00E1gina no arquivo de configura\u00E7\u00E3o usando a chave "frameworkdemoiselle.security.redirect.after.login" | 39 | after-login-page-not-found=A tela "{0}" acessada ap\u00F3s o login n\u00E3o foi encontrada. Caso essa n\u00E3o seja a p\u00E1gina correta, defina a p\u00E1gina no arquivo de configura\u00E7\u00E3o usando a chave "frameworkdemoiselle.security.redirect.after.login" |
| 39 | after-logout-page-not-found=A tela "{0}" acessada ap\u00F3s o logout n\u00E3o foi encontrada. Caso essa n\u00E3o seja a p\u00E1gina correta, defina a p\u00E1gina no arquivo de configura\u00E7\u00E3o usando a chave "frameworkdemoiselle.security.redirect.after.logout" | 40 | after-logout-page-not-found=A tela "{0}" acessada ap\u00F3s o logout n\u00E3o foi encontrada. Caso essa n\u00E3o seja a p\u00E1gina correta, defina a p\u00E1gina no arquivo de configura\u00E7\u00E3o usando a chave "frameworkdemoiselle.security.redirect.after.logout" |
| 40 | faces-context-not-available=N\u00E3o existe uma inst\u00E2ncia de FacesContext ativa para esse escopo | 41 | faces-context-not-available=N\u00E3o existe uma inst\u00E2ncia de FacesContext ativa para esse escopo |
| 41 | -view-expired=A vis\u00E3o referenciada por essa tela expirou. | ||
| 42 | \ No newline at end of file | 42 | \ No newline at end of file |
| 43 | +view-expired=A vis\u00E3o referenciada por essa tela expirou. | ||
| 44 | +faces-context-not-passivable=FacesContext n\u00E3o \u00E9 uma classe serializ\u00E1vel e n\u00E3o deve ser injetada em atributos de classes serializ\u00E1veis. Declare o atributo injetado como 'transient' (Atributo [{0}] na classe [{1}]). |
impl/extension/jsf/src/test/java/test/Tests.java
| @@ -65,7 +65,6 @@ import br.gov.frameworkdemoiselle.internal.implementation.RedirectExceptionHandl | @@ -65,7 +65,6 @@ import br.gov.frameworkdemoiselle.internal.implementation.RedirectExceptionHandl | ||
| 65 | import br.gov.frameworkdemoiselle.internal.implementation.RedirectExceptionHandlerFactory; | 65 | import br.gov.frameworkdemoiselle.internal.implementation.RedirectExceptionHandlerFactory; |
| 66 | import br.gov.frameworkdemoiselle.internal.implementation.SecurityObserver; | 66 | import br.gov.frameworkdemoiselle.internal.implementation.SecurityObserver; |
| 67 | import br.gov.frameworkdemoiselle.internal.procuder.ParameterProducer; | 67 | import br.gov.frameworkdemoiselle.internal.procuder.ParameterProducer; |
| 68 | -import br.gov.frameworkdemoiselle.internal.proxy.FacesContextProxy; | ||
| 69 | import br.gov.frameworkdemoiselle.template.AbstractEditPageBean; | 68 | import br.gov.frameworkdemoiselle.template.AbstractEditPageBean; |
| 70 | import br.gov.frameworkdemoiselle.template.AbstractListPageBean; | 69 | import br.gov.frameworkdemoiselle.template.AbstractListPageBean; |
| 71 | import br.gov.frameworkdemoiselle.template.AbstractPageBean; | 70 | import br.gov.frameworkdemoiselle.template.AbstractPageBean; |
| @@ -113,7 +112,6 @@ public final class Tests { | @@ -113,7 +112,6 @@ public final class Tests { | ||
| 113 | .addClass(AuthorizationExceptionHandler.class) | 112 | .addClass(AuthorizationExceptionHandler.class) |
| 114 | .addClass(RedirectExceptionHandlerFactory.class) | 113 | .addClass(RedirectExceptionHandlerFactory.class) |
| 115 | .addClass(AbstractExceptionHandler.class) | 114 | .addClass(AbstractExceptionHandler.class) |
| 116 | - .addClass(FacesContextProxy.class) | ||
| 117 | .addClass(JsfBootstrap.class) | 115 | .addClass(JsfBootstrap.class) |
| 118 | .addClass(ParameterProducer.class) | 116 | .addClass(ParameterProducer.class) |
| 119 | .addClass(AbstractPageBean.class) | 117 | .addClass(AbstractPageBean.class) |