it looks like my last edit wasn't persisted -> i've updated it again. regards, gerhard
2016-04-27 15:54 GMT+02:00 Juan Pablo <[email protected]>: > Hi Gerhard, I'm having some trouble with this workaround, I can't get it > to compile. > > Here's the POM entry for deltaspike-jsf-module-impl > > <dependency> > <groupId>org.apache.deltaspike.modules</groupId> > <artifactId>deltaspike-jsf-module-impl</artifactId> > <version>${deltaspike.version}</version> > <scope>compile</scope> > </dependency> > > Here's the bean: > > package com.app.core; > > import java.util.ArrayList; > import java.util.List; > > import javax.enterprise.context.Dependent; > import javax.enterprise.inject.Specializes; > import javax.faces.application.FacesMessage; > import javax.faces.context.FacesContext; > > import org.apache.deltaspike.core.api.message.MessageContext; > import org.apache.deltaspike.core.impl.message.DefaultMessageResolver; > import org.apache.deltaspike.jsf.impl.message.JsfMessageResolver; > > @Specializes > @Dependent > public class CustomJsfMessageResolver extends JsfMessageResolver > { > > private static final long serialVersionUID = 1L; > > @Override > protected List<String> getMessageSources(MessageContext messageContext) > { > List<String> result = new ArrayList<String>(new > DefaultMessageResolver().getMessageSources(messageContext)); > > FacesContext facesContext = FacesContext.getCurrentInstance(); > > if (facesContext == null) > { > return result; > } > > try > { > String bundleName = > facesContext.getApplication().getMessageBundle(); > > if (bundleName != null) > { > result.add(bundleName); > } > result.add(FacesMessage.FACES_MESSAGES); //default messages > from jsf > > return result; > } > catch (RuntimeException e) > { > return result; > } > } > } > > This is what I'm getting at compilation time: > > [ERROR] Failed to execute goal > org.apache.maven.plugins:maven-compiler-plugin:3.3:compile > (default-compile) on project app: Compilation failure > [ERROR] > > /D:/dev/projects/app/src/main/java/com/app/core/CustomJsfMessageResolver.java:[23,81] > getMessageSources(org.apache.deltaspike.core.api.message.MessageContext) > has protected access in > org.apache.deltaspike.core.impl.message.DefaultMessageResolver > [ERROR] -> [Help 1] > > So the compiler complains about protected access. Is it something I am > doing wrong? > > > > 2016-04-27 1:47 GMT-05:00 Juan Pablo <[email protected]>: > > > Thanks, I'll let you know as soon as I try it. > > > > 2016-04-27 1:29 GMT-05:00 Gerhard Petracek <[email protected]>: > > > >> hi juan, > >> > >> i've added the workaround in my first comment. > >> once you confirm that it works for you, i'll push a fix (which is > similar > >> to the workaround). > >> > >> regards, > >> gerhard > >> > >> http://www.irian.at > >> > >> Your JavaEE powerhouse - > >> JavaEE Consulting, Development and > >> Courses in English and German > >> > >> Professional Support for Apache > >> MyFaces, DeltaSpike and OpenWebBeans > >> > >> > >> > >> 2016-04-27 7:58 GMT+02:00 Juan Pablo <[email protected]>: > >> > >>> Thanks a lot, Gerhard, I just created > >>> https://issues.apache.org/jira/browse/DELTASPIKE-1135. Cheers. > >>> > >>> 2016-04-27 0:48 GMT-05:00 Gerhard Petracek <[email protected] > >: > >>> > >>> > hi juan, > >>> > > >>> > InitFacesContext causes the issue outside a http-request. > >>> > (to support your use-case) we need to check for an active request > >>> before > >>> > using FacesContext#getApplication. > >>> > -> please file a jira-ticket (i'll provide a workaround at that > >>> ticket). > >>> > > >>> > regards, > >>> > gerhard > >>> > > >>> > http://www.irian.at > >>> > > >>> > Your JavaEE powerhouse - > >>> > JavaEE Consulting, Development and > >>> > Courses in English and German > >>> > > >>> > Professional Support for Apache > >>> > MyFaces, DeltaSpike and OpenWebBeans > >>> > > >>> > > >>> > > >>> > 2016-04-27 7:34 GMT+02:00 Juan Pablo <[email protected]>: > >>> > > >>> > > Hi. I'm running into a problem when trying to use DS' typesafe > >>> messages > >>> > in > >>> > > a observer method that runs upon initialization of the application > >>> > scope. > >>> > > > >>> > > Code (relevant methods only): > >>> > > > >>> > > @Dependent > >>> > > @MessageBundle > >>> > > // (Messages.properties is has been set-up correctly) > >>> > > public interface Messages { > >>> > > > >>> > > String administrador(); > >>> > > } > >>> > > > >>> > > @Dependent > >>> > > public class StartupBean implements Serializable { > >>> > > > >>> > > @Inject > >>> > > private Messages msgs; > >>> > > > >>> > > public void runOnStartup(@Observes > >>> @Initialized(ApplicationScoped.class) > >>> > > ServletContext payload) { > >>> > > this.log.info(this.msgs.administrador()); > >>> > > } > >>> > > > >>> > > } > >>> > > > >>> > > When the observer method is executed, I'm being presented with this > >>> > > stacktrace, and deployment of application is aborted: > >>> > > > >>> > > 23:56:34,238 SEVERE [faces] (FactoryFinderInstance.java:177) Unable > >>> to > >>> > > obtain InjectionProvider from init time FacesContext. Does this > >>> container > >>> > > implement the Mojarra Injection SPI? > >>> > > 23:56:34,239 SEVERE [faces] (FactoryFinderInstance.java:494) La > >>> > aplicación > >>> > > no se ha inicializado correctamente durante el inicio, no se > >>> encuentra la > >>> > > fábrica: javax.faces.application.ApplicationFactory. Attempting to > >>> find > >>> > > backup. > >>> > > 23:56:34,239 ERROR [fail] (ServiceControllerImpl.java:1955) > >>> MSC000001: > >>> > > Failed to start service > >>> > > jboss.undertow.deployment.default-server.default-host./hg: > >>> > > org.jboss.msc.service.StartException in service > >>> > > jboss.undertow.deployment.default-server.default-host./hg: Failed > to > >>> > start > >>> > > service > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) > >>> > > [jboss-msc-1.2.2.Final.jar:1.2.2.Final] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > >>> > > [rt.jar:1.8.0_77] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > >>> > > [rt.jar:1.8.0_77] > >>> > > at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_77] > >>> > > Caused by: java.lang.RuntimeException: > >>> java.lang.IllegalStateException: > >>> > > Could not find backup for factory > >>> > > javax.faces.application.ApplicationFactory. > >>> > > at > >>> > > > >>> > > > >>> > > >>> > io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:222) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:87) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) > >>> > > [jboss-msc-1.2.2.Final.jar:1.2.2.Final] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) > >>> > > [jboss-msc-1.2.2.Final.jar:1.2.2.Final] > >>> > > ... 3 more > >>> > > Caused by: java.lang.IllegalStateException: Could not find backup > for > >>> > > factory javax.faces.application.ApplicationFactory. > >>> > > at > >>> > > > >>> > > > >>> > > >>> > javax.faces.FactoryFinderInstance.getFactory(FactoryFinderInstance.java:500) > >>> > > at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:287) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:142) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.apache.deltaspike.jsf.impl.message.JsfMessageResolver.getMessageSources(JsfMessageResolver.java:45) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.apache.deltaspike.core.impl.message.DefaultMessageResolver.getMessage(DefaultMessageResolver.java:52) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.apache.deltaspike.core.impl.message.DefaultMessage.toString(DefaultMessage.java:115) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.apache.deltaspike.core.impl.message.DefaultMessage.toString(DefaultMessage.java:95) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.apache.deltaspike.core.impl.message.MessageBundleInvocationHandler.invoke(MessageBundleInvocationHandler.java:123) > >>> > > at com.sun.proxy.$Proxy1079.administrador(Unknown Source) > >>> > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > >>> > > [rt.jar:1.8.0_77] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > >>> > > [rt.jar:1.8.0_77] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > >>> > > [rt.jar:1.8.0_77] > >>> > > at java.lang.reflect.Method.invoke(Method.java:498) > [rt.jar:1.8.0_77] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.weld.proxies.Messages$Serializable$981322000$Proxy$_$$_WeldClientProxy.administrador(Unknown > >>> > > Source) > >>> > > at com.app.core.StartupBean.runOnStartup(StartupBean.java:178) > >>> > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > >>> > > [rt.jar:1.8.0_77] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > >>> > > [rt.jar:1.8.0_77] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > >>> > > [rt.jar:1.8.0_77] > >>> > > at java.lang.reflect.Method.invoke(Method.java:498) > [rt.jar:1.8.0_77] > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:90) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:271) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:258) > >>> > > at > >>> > > > >>> > > >>> > org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:237) > >>> > > at org.jboss.weld.event.FastEvent.fire(FastEvent.java:125) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.weld.servlet.HttpContextLifecycle.contextInitialized(HttpContextLifecycle.java:132) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > org.jboss.weld.servlet.WeldInitialListener.contextInitialized(WeldInitialListener.java:101) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:173) > >>> > > at > >>> > > > >>> > > > >>> > > >>> > io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:193) > >>> > > ... 7 more > >>> > > > >>> > > The stacktrace says something about a FacesContext, I thought > >>> messages > >>> > > independent from JSF... Messages work normally in any other > >>> situation, > >>> > even > >>> > > in a RESTful endpoint: > >>> > > > >>> > > @Path("svctest") > >>> > > @RequestScoped > >>> > > public class SvcTest { > >>> > > > >>> > > @Inject > >>> > > private Messages messages; > >>> > > > >>> > > @GET > >>> > > @Path("administrador") > >>> > > public String run() { > >>> > > // look Mom, no FacesContext! ;) > >>> > > return this.messages.administrador(); > >>> > > } > >>> > > } > >>> > > > >>> > > Result of invocation: > >>> > > > >>> > > GET HTTP/1.1 > >>> http://localhost:8080/app/services/svctest/administrador > >>> > > > >>> > > Administrador > >>> > > > >>> > > What am I doing wrong here? What can I do to run code that needs to > >>> use > >>> > > typesafe messages at application startup? I'm using Java > >>> 1.8.0_77-b03, > >>> > > Wildfly 8.2.0, DeltaSpike 1.6.0 (v1.4.1 has the same issue, updated > >>> to > >>> > > latest to make sure it issue was not caused by an already fixed > >>> bug). If > >>> > > you need additional details please let me know. Thanks for your > >>> > attention. > >>> > > > >>> > > > >>> > > -- > >>> > > Atte. > >>> > > > >>> > > Juan Pablo Angamarca > >>> > > > >>> > > >>> > >>> > >>> > >>> -- > >>> Atte. > >>> > >>> Juan Pablo Angamarca > >>> > >> > >> > > > > > > -- > > Atte. > > > > Juan Pablo Angamarca > > > > > > -- > Atte. > > Juan Pablo Angamarca >
