[MAGNOLIA-6337] Upgrade to Google Guice 4.0 Created: 10/Aug/15  Updated: 04/Mar/19  Resolved: 24/May/16

Status: Closed
Project: Magnolia
Component/s: None
Affects Version/s: 5.4
Fix Version/s: 5.5

Type: Improvement Priority: Neutral
Reporter: Richard Gange Assignee: Espen Jervidalo
Resolution: Fixed Votes: 3
Labels: support
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Relates
duplicate
is duplicated by MAGNOLIA-6473 Update Guice dependency version to 4.0 Closed
relation
is related to MAGNOLIA-4065 Severe warning about potential memory... Closed
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Date of First Response:
Epic Link: Update 3rd-party libraries for 5.5
Sprint: Basel 45
Story Points: 8

 Description   

Currently we use Guice 3.0. Google Guice 4.0 brings in the following improvements: https://github.com/google/guice/wiki/Guice40

Apart from that we obviously should stick to the most actual versions of the used libraries, such upgrade is essential for further adopting of Java 8 (see http://tinyurl.com/njayy4c for further details)



 Comments   
Comment by Jan Haderka [ 27/Dec/15 ]

Following our policy of not making upgrades of major libraries in minor releases, this ticket can be resolved earliest for Magnolia 5.5.

Comment by Nils Breunese [ 14/Mar/16 ]

When using Java 8 lambdas with Guice 3 you get some pretty useless error messages from Guice. Upgrading to Guice 4 seems to solve this issue.

Comment by Rico Jansen [ 14/Mar/16 ]

It is especially helpful since we occasionely get stacktraces like these:

WARN   info.magnolia.jcr.node2bean.impl.Node2BeanProcessorImpl 14.03.2016 15:46:17 -- Can't instantiate bean for /server/filters/cinemaRedirects  
com.google.inject.internal.util.$ComputationException: java.lang.ArrayIndexOutOfBoundsException: 52264
	at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553)
	at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419)
	at com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
	at com.google.inject.internal.util.$StackTraceElements.forMember(StackTraceElements.java:53)
	at com.google.inject.internal.Errors.formatSource(Errors.java:690)
	at com.google.inject.internal.Errors.formatInjectionPoint(Errors.java:720)
	at com.google.inject.internal.Errors.formatSource(Errors.java:684)
	at com.google.inject.internal.Errors.format(Errors.java:555)
	at com.google.inject.ProvisionException.getMessage(ProvisionException.java:59)
	at java.lang.Throwable.getLocalizedMessage(Throwable.java:391)
	at java.lang.Throwable.toString(Throwable.java:480)
	at java.lang.Throwable.<init>(Throwable.java:311)
	at java.lang.Exception.<init>(Exception.java:102)
	at info.magnolia.exception.MgnlException.<init>(MgnlException.java:55)
	at info.magnolia.jcr.node2bean.Node2BeanException.<init>(Node2BeanException.java:51)
	at info.magnolia.jcr.node2bean.impl.Node2BeanTransformerImpl.newBeanInstance(Node2BeanTransformerImpl.java:248)
	at info.magnolia.jcr.node2bean.impl.Node2BeanProcessorImpl.toBean(Node2BeanProcessorImpl.java:135)
	at info.magnolia.jcr.node2bean.impl.Node2BeanProcessorImpl.toMap(Node2BeanProcessorImpl.java:227)
	at info.magnolia.jcr.node2bean.impl.Node2BeanProcessorImpl.toBean(Node2BeanProcessorImpl.java:132)
	at info.magnolia.jcr.node2bean.impl.Node2BeanProcessorImpl.toBean(Node2BeanProcessorImpl.java:94)
	at info.magnolia.cms.filters.FilterManagerImpl.createConfiguredFilters(FilterManagerImpl.java:189)
	at info.magnolia.cms.filters.FilterManagerImpl.createRootFilter(FilterManagerImpl.java:167)
	at info.magnolia.cms.filters.FilterManagerImpl$2.doExec(FilterManagerImpl.java:108)
	at info.magnolia.context.MgnlContext$VoidOp.exec(MgnlContext.java:421)
	at info.magnolia.context.MgnlContext$VoidOp.exec(MgnlContext.java:418)
	at info.magnolia.context.MgnlContext.doInSystemContext(MgnlContext.java:392)
	at info.magnolia.cms.filters.FilterManagerImpl.init(FilterManagerImpl.java:104)
	at info.magnolia.cms.filters.MgnlMainFilter.init(MgnlMainFilter.java:82)
	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
	at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1763)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1471)
	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1312)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1404)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:832)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
	at sun.rmi.transport.Transport$1.run(Transport.java:200)
	at sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$256(TCPTransport.java:683)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 52264
	at com.google.inject.internal.asm.$ClassReader.readClass(Unknown Source)
	at com.google.inject.internal.asm.$ClassReader.accept(Unknown Source)
	at com.google.inject.internal.asm.$ClassReader.accept(Unknown Source)
	at com.google.inject.internal.util.$LineNumbers.<init>(LineNumbers.java:62)
	at com.google.inject.internal.util.$StackTraceElements$1.apply(StackTraceElements.java:36)
	at com.google.inject.internal.util.$StackTraceElements$1.apply(StackTraceElements.java:33)
	at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:549)
	... 75 more
WARN   info.magnolia.jcr.node2bean.impl.Node2BeanProcessorImpl 14.03.2016 15:46:17 -- can't instantiate bean of type nl.vpro.magnolia.cinema.filter.CinemaRedirectFilter for node /server/filters/cinemaRedirects  

Those get turned into real exceptions in Guice 4.0 so you actually know what is going wrong.

Comment by Richard Gange [ 26/May/16 ]

As far as I know this upgrade should fix MAGNOLIA-4065. Can someone comfirm that?

Generated at Mon Feb 12 04:13:33 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.