From users-return-2325-archive-asf-public=cust-asf.ponee.io@deltaspike.apache.org Mon Apr 13 11:20:33 2020 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id 23D9818066D for ; Mon, 13 Apr 2020 13:20:33 +0200 (CEST) Received: (qmail 77472 invoked by uid 500); 13 Apr 2020 11:20:32 -0000 Mailing-List: contact users-help@deltaspike.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@deltaspike.apache.org Delivered-To: mailing list users@deltaspike.apache.org Received: (qmail 77447 invoked by uid 99); 13 Apr 2020 11:20:32 -0000 Received: from Unknown (HELO mailrelay1-lw-us.apache.org) (10.10.3.159) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 13 Apr 2020 11:20:32 +0000 Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) by mailrelay1-lw-us.apache.org (ASF Mail Server at mailrelay1-lw-us.apache.org) with ESMTPSA id E7B262E49; Mon, 13 Apr 2020 11:20:31 +0000 (UTC) Received: by mail-ot1-f49.google.com with SMTP id n8so3301826otk.5; Mon, 13 Apr 2020 04:20:31 -0700 (PDT) X-Gm-Message-State: AGi0PuYvX2ccgfn20LideOsvlQ6y7dvQq6TNTAMsqrYQB82Op6pgg6Vt tmGLSs5M6U2TC4W4MgPX5zedaNJvrKGdm/xsvXg= X-Google-Smtp-Source: APiQypLMR9kHMdoYPj6+LdCHOVGXMSLtCYp+JK9LX5gMmoOqSfnG1mB/hIYb6BeURKOmI1MKML6Mk8CFn9EtjSGxen0= X-Received: by 2002:a4a:be89:: with SMTP id o9mr7533286oop.20.1586776831247; Mon, 13 Apr 2020 04:20:31 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Gerhard Petracek Date: Mon, 13 Apr 2020 13:19:26 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: Deltaspike 1.8.2 -> 1.9.3 To: users@deltaspike.apache.org Cc: dev@deltaspike.apache.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable @thomas (a.) i'm a bit concerned about the handling of weld in that area (since i know quite a lot home-grown helpers in libs and projects, which beak as well). however, at least the fallback to #resolveBeanManagerViaJndi should fix the issue for weld based ee-servers. in any case, we should continue this thread on the dev-list. regards, gerhard Am Mo., 13. Apr. 2020 um 00:03 Uhr schrieb Gerhard Petracek : > > @thomas (k.): > you couldn't see it due to the log-level. > > the cause is: > Caused by: org.jboss.weld.exceptions.IllegalStateException: WELD-001328: > Unable to identify the correct BeanManager. The calling class > sun.reflect.GeneratedMethodAccessor159 is not placed in bean archive > at org.jboss.weld.SimpleCDI.unsatisfiedBeanManager(SimpleCDI.java:89) > ... > > regards, > gerhard > > > > Am So., 12. Apr. 2020 um 20:59 Uhr schrieb Thomas Kernstock > : > > > > Servus Gerhard, > > > > I recently mailed with mark regarding that problem and created a small = testproject. Pls find it under https://drive.google.com/drive/folders/1Ngyw= ZX73QViiM39DTaghigN7hKBxyfsj?usp=3Dsharing. When I deploy it on Payara 5.20= 1 the error occurs after accessing the main URL. > > > > I also checked the log file (see attachment) and couldn't find the ment= ioned message. > > > > Lg > > Thomas > > > > -----Urspr=C3=BCngliche Nachricht----- > > Von: Gerhard Petracek > > Gesendet: Sonntag, 12. April 2020 11:08 > > An: users@deltaspike.apache.org > > Betreff: Re: Deltaspike 1.8.2 -> 1.9.3 > > > > @thomas (k.): > > please check if you can find > > "failed to delegate bean-manager lookup" > > in your log/s... > > > > > > @thomas (a.): > > with the refactoring the fallback handling was dropped (which can cause= a NPE). > > > > regards, > > gerhard > > > > > > > > Am So., 12. Apr. 2020 um 10:52 Uhr schrieb Gerhard Petracek > > : > > > > > > @mark: > > > yes - it looks like the refactoring to the typed config mixed it up..= . > > > > > > regards, > > > gerhard > > > > > > > > > Am Do., 9. Apr. 2020 um 14:15 Uhr schrieb Thomas Kernstock > > > : > > > > > > > > Servus Mark, > > > > > > > > I replaced the deltaspike modules with version 1.9.3 again, to incl= ude the CDI check in. What I didn't see on the first try was the warning in= eclipse, "No bean is eligible for injection to the injection point [JSR-36= 5 =C2=A75.2.2]" for the Logger and the ApplicationConfig Bean which is loca= ted in another project. I don't know why this has to do with deltaspike, bu= t this warning isn't there when I use 1.8.2. Furthermore the JBoss Tools CD= I Builder produces a Nullpointer Exception while building the projects. Thi= s is very weird. > > > > > > > > Anyway - the following bean is called right after deployment. I deb= ugged the CDI.current() and it seems to be fine. I can see the Beanmanager = etc. So there are no null values. > > > > > > > > @Eager > > > > @ApplicationScoped > > > > public class ConfigureApplication { > > > > @Inject ApplicationConfig appConfig; > > > > @Inject Logger logger; > > > > @Inject private ProjectStage projectStage; > > > > > > > > @PostConstruct > > > > public void init(){ > > > > CDI cdi=3D CDI.current(); > > > > > > > > if (ProjectStage.Production.equals(projectStage)) { > > > > appConfig.setBetriebsmodusTest(false); > > > > appConfig.setSendEmail(true); > > > > } else { > > > > appConfig.setSendEmail(false); > > > > appConfig.setBetriebsmodusTest(true); > > > > } > > > > logger.info("=3D=3D=3D StartupConfig was called. Se= rverinfo: " + ((ServletContext) FacesContext.getCurrentInstance().getExtern= alContext().getContext()).getServerInfo()); > > > > logger.info("=3D=3D=3D JSF Stage: {} ", FacesContex= t.getCurrentInstance().getApplication().getProjectStage().toString()); > > > > logger.info("=3D=3D=3D Deltaspike: {} ",projectStag= e.toString()); > > > > logger.info("=3D=3D=3D Sendmails: {} ", appConfig.i= sSendEmail()); > > > > > > > > } > > > > } > > > > > > > > But the Nullpointer I reported occurred on the first call of a page= . > > > > > > > > Liebe Gr=C3=BC=C3=9Fe > > > > Thomas > > > > > > > > -----Urspr=C3=BCngliche Nachricht----- > > > > Von: Mark Struberg > > > > Gesendet: Donnerstag, 9. April 2020 11:08 > > > > An: users@deltaspike.apache.org > > > > Betreff: Re: Deltaspike 1.8.2 -> 1.9.3 > > > > > > > > Hmm, this means the BeanManager is null? > > > > > > > > Might habe to do with DELTASPIKE-1398? > > > > > > > > I suspect the following change in BeanManagerProvider, but would ne= ed to debug into: > > > > > > > > - if (cdiClass !=3D null && !CoreBaseConfig.BeanManagerInteg= ration.DELEGATE_LOOKUP) > > > > + if (cdiClass !=3D null && CoreBaseConfig.BeanManagerIntegr= ation.DELEGATE_LOOKUP) > > > > > > > > the delegate_lookup got reversed. > > > > Are we sure we use CDI.current() in your case, Thomas K? Can you pl= ease debug into this? > > > > > > > > Happy to look at it together via hangout. > > > > > > > > > > > > LieGrue, > > > > strub > > > > > > > > > > > > > > > > > Am 06.04.2020 um 20:36 schrieb Thomas Kernstock : > > > > > > > > > > Hi guys, > > > > > > > > > > Me again. After a while I tried upgrading to 1.9.3 again. > > > > > Right now my application is running perfectly fine on Payarafish = 5.201 with Deltaspike 1.8.2, Omnifaces 3.3. and Primefaces 8.0. In my proj= ect I use the modules > > > > > > > > > > * Bean-validation > > > > > * JPA > > > > > * JSF (Proxy and Security) > > > > > * Partial-bean > > > > > > > > > > When I replace the Deltaspike jars with 1.9.3 there are no proble= ms in eclipse (like in my mail from February) Instead I get a stacktrace wh= ile deploying the application: > > > > > > > > > > 2020-04-06T20:27:54.823+0200|INFORMATION: Karriereportal was succ= essfully deployed in 17.698 milliseconds. > > > > > 2020-04-06T20:28:17.326+0200|WARNUNG: BeanProvider shall not be u= sed to create @Dependent scoped beans. Bean: Producer Method [WindowContext= ] with qualifiers [@Default @Named @Any] declared as [[BackedAnnotatedMetho= d] @Produces @Named @Dependent public org.apache.deltaspike.core.impl.scope= .window.WindowContextProducer.getWindowContext()] > > > > > 2020-04-06T20:28:17.357+0200|SCHWERWIEGEND: [1876507d-b3e1-4a25-b= ba2-f108db145eba][0:0:0:0:0:0:0:1] FacesExceptionFilter: An exception occur= red during processing servlet request. Error page '/errorpages/error.jsp' w= ill be shown. > > > > > java.lang.NullPointerException > > > > > at org.apache.deltaspike.jsf.impl.listener.system.JsfSystem= EventBroadcaster.processEvent(JsfSystemEventBroadcaster.java:56) > > > > > at javax.faces.event.SystemEvent.processListener(SystemEven= t.java:123) > > > > > at com.sun.faces.application.applicationimpl.Events.process= Listeners(Events.java:253) > > > > > at com.sun.faces.application.applicationimpl.Events.invokeL= istenersFor(Events.java:231) > > > > > at com.sun.faces.application.applicationimpl.Events.publish= Event(Events.java:115) > > > > > at com.sun.faces.application.ApplicationImpl.publishEvent(A= pplicationImpl.java:127) > > > > > at com.sun.faces.application.ApplicationImpl.publishEvent(A= pplicationImpl.java:119) > > > > > at javax.faces.application.ApplicationWrapper.publishEvent(= ApplicationWrapper.java:776) > > > > > at javax.faces.application.ApplicationWrapper.publishEvent(= ApplicationWrapper.java:776) > > > > > at javax.faces.application.ApplicationWrapper.publishEvent(= ApplicationWrapper.java:776) > > > > > at javax.faces.application.ApplicationWrapper.publishEvent(= ApplicationWrapper.java:776) > > > > > at org.apache.deltaspike.jsf.impl.injection.InjectionAwareA= pplicationWrapper.publishEvent(InjectionAwareApplicationWrapper.java:148) > > > > > at com.sun.faces.lifecycle.Phase.queueException(Phase.java:= 135) > > > > > at com.sun.faces.lifecycle.Phase.queueException(Phase.java:= 124) > > > > > at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:84) > > > > > at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(Restore= ViewPhase.java:110) > > > > > at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleI= mpl.java:177) > > > > > at org.apache.deltaspike.jsf.impl.listener.request.DeltaSpi= keLifecycleWrapper.execute(DeltaSpikeLifecycleWrapper.java:89) > > > > > at javax.faces.lifecycle.LifecycleWrapper.execute(Lifecycle= Wrapper.java:73) > > > > > at javax.faces.webapp.FacesServlet.executeLifecyle(FacesSer= vlet.java:707) > > > > > at javax.faces.webapp.FacesServlet.service(FacesServlet.jav= a:451) > > > > > at org.apache.catalina.core.StandardWrapper.service(Standar= dWrapper.java:1636) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:331) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.omnifaces.filter.FacesExceptionFilter.doFilter(Faces= ExceptionFilter.java:133) > > > > > at org.omnifaces.filter.FacesExceptionFilter.doFilter(Faces= ExceptionFilter.java:118) > > > > > at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java= :108) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:253) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.primefaces.webapp.filter.FileUploadFilter.doFilter(F= ileUploadFilter.java:89) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:253) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(= TyrusServletFilter.java:282) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:253) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.omnifaces.filter.CacheControlFilter.doFilter(CacheCo= ntrolFilter.java:239) > > > > > at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java= :108) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:253) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.apache.catalina.core.StandardWrapperValve.invoke(Sta= ndardWrapperValve.java:257) > > > > > at org.apache.catalina.core.StandardContextValve.invoke(Sta= ndardContextValve.java:161) > > > > > at org.apache.catalina.core.StandardPipeline.doInvoke(Stand= ardPipeline.java:757) > > > > > at org.apache.catalina.core.StandardPipeline.invoke(Standar= dPipeline.java:577) > > > > > at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.ja= va:99) > > > > > at org.apache.catalina.core.StandardHostValve.invoke(Standa= rdHostValve.java:158) > > > > > at org.apache.catalina.connector.CoyoteAdapter.doService(Co= yoteAdapter.java:371) > > > > > at org.apache.catalina.connector.CoyoteAdapter.service(Coyo= teAdapter.java:238) > > > > > at com.sun.enterprise.v3.services.impl.ContainerMapper$Http= HandlerCallable.call(ContainerMapper.java:520) > > > > > at com.sun.enterprise.v3.services.impl.ContainerMapper.serv= ice(ContainerMapper.java:217) > > > > > at org.glassfish.grizzly.http.server.HttpHandler.runService= (HttpHandler.java:182) > > > > > at org.glassfish.grizzly.http.server.HttpHandler.doHandle(H= ttpHandler.java:156) > > > > > at org.glassfish.grizzly.http.server.HttpServerFilter.handl= eRead(HttpServerFilter.java:218) > > > > > at org.glassfish.grizzly.filterchain.ExecutorResolver$9.exe= cute(ExecutorResolver.java:95) > > > > > at org.glassfish.grizzly.filterchain.DefaultFilterChain.exe= cuteFilter(DefaultFilterChain.java:260) > > > > > at org.glassfish.grizzly.filterchain.DefaultFilterChain.exe= cuteChainPart(DefaultFilterChain.java:177) > > > > > at org.glassfish.grizzly.filterchain.DefaultFilterChain.exe= cute(DefaultFilterChain.java:109) > > > > > at org.glassfish.grizzly.filterchain.DefaultFilterChain.pro= cess(DefaultFilterChain.java:88) > > > > > at org.glassfish.grizzly.ProcessorExecutor.execute(Processo= rExecutor.java:53) > > > > > at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fire= IOEvent(TCPNIOTransport.java:524) > > > > > at org.glassfish.grizzly.strategies.AbstractIOStrategy.fire= IOEvent(AbstractIOStrategy.java:89) > > > > > at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.= run0(WorkerThreadIOStrategy.java:94) > > > > > at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.= access$100(WorkerThreadIOStrategy.java:33) > > > > > at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$= WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114) > > > > > at org.glassfish.grizzly.threadpool.AbstractThreadPool$Work= er.doWork(AbstractThreadPool.java:569) > > > > > at org.glassfish.grizzly.threadpool.AbstractThreadPool$Work= er.run(AbstractThreadPool.java:549) > > > > > at java.lang.Thread.run(Thread.java:748) > > > > > > > > > > 2020-04-06T20:28:18.063+0200|SCHWERWIEGEND: [df043efb-6374-4d9a-9= 595-bdb71e54c54e][0:0:0:0:0:0:0:1] FacesExceptionFilter: An exception occur= red during processing servlet request. Error page '/errorpages/error.jsp' w= ill be shown. > > > > > java.lang.NullPointerException > > > > > at org.apache.deltaspike.core.api.provider.BeanProvider.get= ContextualReference(BeanProvider.java:144) > > > > > at org.apache.deltaspike.jsf.impl.listener.request.DeltaSpi= keFacesContextWrapper.init(DeltaSpikeFacesContextWrapper.java:157) > > > > > at org.apache.deltaspike.jsf.impl.listener.request.DeltaSpi= keFacesContextWrapper.lazyInit(DeltaSpikeFacesContextWrapper.java:147) > > > > > at org.apache.deltaspike.jsf.impl.listener.request.DeltaSpi= keFacesContextWrapper.broadcastDestroyedJsfRequestEvent(DeltaSpikeFacesCont= extWrapper.java:136) > > > > > at org.apache.deltaspike.jsf.impl.listener.request.DeltaSpi= keFacesContextWrapper.release(DeltaSpikeFacesContextWrapper.java:104) > > > > > at javax.faces.context.FacesContextWrapper.release(FacesCon= textWrapper.java:319) > > > > > at org.primefaces.context.PrimeFacesContext.release(PrimeFa= cesContext.java:123) > > > > > at javax.faces.webapp.FacesServlet.service(FacesServlet.jav= a:454) > > > > > at org.apache.catalina.core.StandardWrapper.service(Standar= dWrapper.java:1636) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:331) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.omnifaces.filter.FacesExceptionFilter.doFilter(Faces= ExceptionFilter.java:133) > > > > > at org.omnifaces.filter.FacesExceptionFilter.doFilter(Faces= ExceptionFilter.java:118) > > > > > at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java= :108) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:253) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.primefaces.webapp.filter.FileUploadFilter.doFilter(F= ileUploadFilter.java:89) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:253) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(= TyrusServletFilter.java:282) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:253) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.omnifaces.filter.CacheControlFilter.doFilter(CacheCo= ntrolFilter.java:239) > > > > > at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java= :108) > > > > > at org.apache.catalina.core.ApplicationFilterChain.internal= DoFilter(ApplicationFilterChain.java:253) > > > > > at org.apache.catalina.core.ApplicationFilterChain.doFilter= (ApplicationFilterChain.java:211) > > > > > at org.apache.catalina.core.StandardWrapperValve.invoke(Sta= ndardWrapperValve.java:257) > > > > > at org.apache.catalina.core.StandardContextValve.invoke(Sta= ndardContextValve.java:161) > > > > > at org.apache.catalina.core.StandardPipeline.doInvoke(Stand= ardPipeline.java:757) > > > > > at org.apache.catalina.core.StandardPipeline.invoke(Standar= dPipeline.java:577) > > > > > at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.ja= va:99) > > > > > at org.apache.catalina.core.StandardHostValve.invoke(Standa= rdHostValve.java:158) > > > > > at org.apache.catalina.connector.CoyoteAdapter.doService(Co= yoteAdapter.java:371) > > > > > at org.apache.catalina.connector.CoyoteAdapter.service(Coyo= teAdapter.java:238) > > > > > at com.sun.enterprise.v3.services.impl.ContainerMapper$Http= HandlerCallable.call(ContainerMapper.java:520) > > > > > at com.sun.enterprise.v3.services.impl.ContainerMapper.serv= ice(ContainerMapper.java:217) > > > > > at org.glassfish.grizzly.http.server.HttpHandler.runService= (HttpHandler.java:182) > > > > > at org.glassfish.grizzly.http.server.HttpHandler.doHandle(H= ttpHandler.java:156) > > > > > at org.glassfish.grizzly.http.server.HttpServerFilter.handl= eRead(HttpServerFilter.java:218) > > > > > at org.glassfish.grizzly.filterchain.ExecutorResolver$9.exe= cute(ExecutorResolver.java:95) > > > > > at org.glassfish.grizzly.filterchain.DefaultFilterChain.exe= cuteFilter(DefaultFilterChain.java:260) > > > > > at org.glassfish.grizzly.filterchain.DefaultFilterChain.exe= cuteChainPart(DefaultFilterChain.java:177) > > > > > at org.glassfish.grizzly.filterchain.DefaultFilterChain.exe= cute(DefaultFilterChain.java:109) > > > > > at org.glassfish.grizzly.filterchain.DefaultFilterChain.pro= cess(DefaultFilterChain.java:88) > > > > > at org.glassfish.grizzly.ProcessorExecutor.execute(Processo= rExecutor.java:53) > > > > > at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fire= IOEvent(TCPNIOTransport.java:524) > > > > > at org.glassfish.grizzly.strategies.AbstractIOStrategy.fire= IOEvent(AbstractIOStrategy.java:89) > > > > > at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.= run0(WorkerThreadIOStrategy.java:94) > > > > > at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.= access$100(WorkerThreadIOStrategy.java:33) > > > > > at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$= WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114) > > > > > at org.glassfish.grizzly.threadpool.AbstractThreadPool$Work= er.doWork(AbstractThreadPool.java:569) > > > > > at org.glassfish.grizzly.threadpool.AbstractThreadPool$Work= er.run(AbstractThreadPool.java:549) > > > > > at java.lang.Thread.run(Thread.java:748) > > > > > > > > > > I couldn't find any infos in the what's new pages regarding chang= es in the configuration/faces.xml ect. > > > > > Any idea what I should check to avoid/repair this problem? > > > > > > > > > > Br > > > > > Thomas > > > > > > > > >