[ https://issues.apache.org/jira/browse/OFBIZ-6210?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14993533#comment-14993533 ]
Gareth Carter edited comment on OFBIZ-6210 at 11/6/15 11:32 AM: ---------------------------------------------------------------- I have found a few minor issues with this implementation. 1) You can override other (internal) resources in JavaResource. Example "META-INF/services/javax.xml.parsers.DocumentBuilderFactory" as resourceName with 0 length resourceValue will prevent XML documents being read. 2) Related to above - resource loading looks at JavaResource first then the parent, ClassLoader looks at parent first 3) With EntityClassLoader enabled in ControlServlet, cleariing all cache in webtools creates a deadlock situation causing many threads to be created (ForkJoinPool). Eventually an OutOfMemoryError is thrown Here is a stacktrace for point 3 (all other threads have same stack trace) {noformat} "ForkJoinPool-1-worker-6869" #7112 daemon prio=5 os_prio=0 tid=0x00000001b87ed800 nid=0x8658 in Object.wait() [0x00000002d805e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.util.concurrent.ForkJoinTask.internalWait(ForkJoinTask.java:311) - locked <0x00000000f8be7328> (a java.util.concurrent.ForkJoinTask$AdaptedCallable) at java.util.concurrent.ForkJoinPool.awaitJoin(ForkJoinPool.java:2058) at java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:390) at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1001) at org.ofbiz.base.concurrent.ExecutionPool.getAllFutures(ExecutionPool.java:83) at org.ofbiz.entityext.eca.EntityEcaUtil.readConfig(EntityEcaUtil.java:104) at org.ofbiz.entityext.eca.EntityEcaUtil.getEntityEcaCache(EntityEcaUtil.java:59) at org.ofbiz.entityext.eca.DelegatorEcaHandler.getEntityEventMap(DelegatorEcaHandler.java:86) at org.ofbiz.entity.GenericDelegator.createEntityEcaRuleRunner(GenericDelegator.java:2205) at org.ofbiz.entity.GenericDelegator.getEcaRuleRunner(GenericDelegator.java:2201) at org.ofbiz.entity.GenericDelegator.findOne(GenericDelegator.java:1410) at org.ofbiz.entity.GenericDelegator.findOne(GenericDelegator.java:1398) at org.ofbiz.entity.util.EntityClassLoader.findResource(EntityClassLoader.java:88) at org.ofbiz.entity.util.EntityClassLoader.getResource(EntityClassLoader.java:146) at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1304) at org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source) at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source) at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source) at org.ofbiz.base.util.UtilXml$1.<init>(UtilXml.java:480) at org.ofbiz.base.util.UtilXml.readXmlDocument(UtilXml.java:480) at org.ofbiz.base.util.UtilXml.readXmlDocument(UtilXml.java:410) at org.ofbiz.base.component.ComponentResourceHandler.getDocument(ComponentResourceHandler.java:67) at org.ofbiz.entityext.eca.EntityEcaUtil.getEcaDefinitions(EntityEcaUtil.java:131) at org.ofbiz.entityext.eca.EntityEcaUtil.access$000(EntityEcaUtil.java:48) at org.ofbiz.entityext.eca.EntityEcaUtil$1.call(EntityEcaUtil.java:150) at org.ofbiz.entityext.eca.EntityEcaUtil$1.call(EntityEcaUtil.java:148) at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) {noformat} was (Author: gareth.carter): I have found a few minor issues with this implementation. 1) You can override other (internal) resources in JavaResource. Example "META-INF/services/javax.xml.parsers.DocumentBuilderFactory" as resourceName with 0 length resourceValue will prevent XML documents being read. 2) Related to above - resource loading looks at JavaResource first then the parent, ClassLoader looks at parent first 3) With EntityClassLoader enabled in ControlServlet, cleariing all cache in webtools creates a deadlock situation causing many threads to be created (ForkJoinPool). Eventually an OutOfMemoryError is thrown Here is a stacktrace for point 3 (all other threads have same stack trace) "ForkJoinPool-1-worker-6869" #7112 daemon prio=5 os_prio=0 tid=0x00000001b87ed800 nid=0x8658 in Object.wait() [0x00000002d805e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.util.concurrent.ForkJoinTask.internalWait(ForkJoinTask.java:311) - locked <0x00000000f8be7328> (a java.util.concurrent.ForkJoinTask$AdaptedCallable) at java.util.concurrent.ForkJoinPool.awaitJoin(ForkJoinPool.java:2058) at java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:390) at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1001) at org.ofbiz.base.concurrent.ExecutionPool.getAllFutures(ExecutionPool.java:83) at org.ofbiz.entityext.eca.EntityEcaUtil.readConfig(EntityEcaUtil.java:104) at org.ofbiz.entityext.eca.EntityEcaUtil.getEntityEcaCache(EntityEcaUtil.java:59) at org.ofbiz.entityext.eca.DelegatorEcaHandler.getEntityEventMap(DelegatorEcaHandler.java:86) at org.ofbiz.entity.GenericDelegator.createEntityEcaRuleRunner(GenericDelegator.java:2205) at org.ofbiz.entity.GenericDelegator.getEcaRuleRunner(GenericDelegator.java:2201) at org.ofbiz.entity.GenericDelegator.findOne(GenericDelegator.java:1410) at org.ofbiz.entity.GenericDelegator.findOne(GenericDelegator.java:1398) at org.ofbiz.entity.util.EntityClassLoader.findResource(EntityClassLoader.java:88) at org.ofbiz.entity.util.EntityClassLoader.getResource(EntityClassLoader.java:146) at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1304) at org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source) at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source) at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source) at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source) at org.ofbiz.base.util.UtilXml$1.<init>(UtilXml.java:480) at org.ofbiz.base.util.UtilXml.readXmlDocument(UtilXml.java:480) at org.ofbiz.base.util.UtilXml.readXmlDocument(UtilXml.java:410) at org.ofbiz.base.component.ComponentResourceHandler.getDocument(ComponentResourceHandler.java:67) at org.ofbiz.entityext.eca.EntityEcaUtil.getEcaDefinitions(EntityEcaUtil.java:131) at org.ofbiz.entityext.eca.EntityEcaUtil.access$000(EntityEcaUtil.java:48) at org.ofbiz.entityext.eca.EntityEcaUtil$1.call(EntityEcaUtil.java:150) at org.ofbiz.entityext.eca.EntityEcaUtil$1.call(EntityEcaUtil.java:148) at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) > Replace EntityUtilProperties with EntityClassLoader > --------------------------------------------------- > > Key: OFBIZ-6210 > URL: https://issues.apache.org/jira/browse/OFBIZ-6210 > Project: OFBiz > Issue Type: Improvement > Components: framework > Affects Versions: Upcoming Branch > Reporter: Adrian Crum > Priority: Minor > > The EntityUtilProperties implementation is very limited and requires > rewriting a lot of code. Using EntityClassLoader will achieve the same result > without changing any code. -- This message was sent by Atlassian JIRA (v6.3.4#6332)