[jboss-jira] [JBoss JIRA] (DROOLS-1193) MemoryUtil's static constructor call to ManagementFactory.getMemoryPoolMXBeans() fails on Google App Engine

Geoffrey De Smet (JIRA) issues at jboss.org
Thu May 26 10:24:00 EDT 2016


    [ https://issues.jboss.org/browse/DROOLS-1193?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13243377#comment-13243377 ] 

Geoffrey De Smet edited comment on DROOLS-1193 at 5/26/16 10:23 AM:
--------------------------------------------------------------------

After discussion we saw 3 alternatives:

* A) Disable the feature (such as jitting constraints) if BeanManager isn't available on JDK 7 or lower - Accepted
* B) Pessmistically guess the permGenspace value - Rejected because it's unreliabe/unstable. It's also impossible to ask later on how much is left.
* C) Allow enabling/disabling each feature individually through configuration - Rejected because it's inferior to A): too much painfully hoops for a user to jump through.

How do we detect GAE (and Android etc) best? Still under debate:
   http://stackoverflow.com/questions/37463518/how-to-detect-google-app-engine-in-library-code-to-skip-code-that-uses-managemen


was (Author: ge0ffrey):
After discussion we saw 3 alternative:

* A) Disable the feature (such as jitting constraints) if BeanManager isn't available on JDK 7 or lower - Accepted
* B) Pessmistically guess the permGenspace value - Rejected because it's unreliabe/unstable. It's also impossible to ask later on how much is left.
* C) Allow enabling/disabling each feature individually through configuration - Rejected because it's inferior to A): too much painfully hoops for a user to jump through.

How do we detect GAE (and Android etc) best? Still under debate:
   http://stackoverflow.com/questions/37463518/how-to-detect-google-app-engine-in-library-code-to-skip-code-that-uses-managemen

> MemoryUtil's static constructor call to ManagementFactory.getMemoryPoolMXBeans() fails on Google App Engine
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: DROOLS-1193
>                 URL: https://issues.jboss.org/browse/DROOLS-1193
>             Project: Drools
>          Issue Type: Bug
>          Components: core engine
>    Affects Versions: 6.4.0.Final
>            Reporter: Geoffrey De Smet
>            Assignee: Mario Fusco
>
> {code}
>     [INFO] java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory is a restricted class. Please see the Google  App Engine developer's guide for more details.
>     [INFO]  at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:52)
>     [INFO]  at org.drools.core.util.MemoryUtil.<clinit>(MemoryUtil.java:33)
>     [INFO]  at java.lang.Class.forName0(Native Method)
>     [INFO]  at java.lang.Class.forName(Class.java:195)
>     [INFO]  at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70)
>     [INFO]  at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65)
>     [INFO]  at org.drools.core.RuleBaseConfiguration.setPermGenThreshold(RuleBaseConfiguration.java:583)
>     [INFO]  at org.drools.core.RuleBaseConfiguration.init(RuleBaseConfiguration.java:451)
>     [INFO]  at org.drools.core.RuleBaseConfiguration.init(RuleBaseConfiguration.java:429)
>     [INFO]  at org.drools.core.RuleBaseConfiguration.<init>(RuleBaseConfiguration.java:278)
>     [INFO]  at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieBaseConfiguration(KieServicesImpl.java:185)
> {code}
> the problem is in this code:
> {code}
>     static {
>         if (!hasPermGen() || ClassUtils.isAndroid()) { // hasPermGen is true because GAE doesn't support java 8 yet
>             permGenStats = new DummyMemoryStats();
>         } else {
>             MemoryPoolMXBean permGenBean = null;
>             for (MemoryPoolMXBean mx : ManagementFactory.getMemoryPoolMXBeans()) { // <=== EXCEPTION
>                 if (mx.getName() != null && mx.getName().contains("Perm")) {
>                     permGenBean = mx;
>                     break;
>                 }
>             }
>             permGenStats = new MBeanMemoryStats(permGenBean);
>         }
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jboss-jira mailing list