You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by "Gareth Carter (JIRA)" <ji...@apache.org> on 2015/11/06 12:31:27 UTC

[jira] [Commented] (OFBIZ-6210) Replace EntityUtilProperties with EntityClassLoader

    [ https://issues.apache.org/jira/browse/OFBIZ-6210?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14993533#comment-14993533 ] 

Gareth Carter commented on OFBIZ-6210:
--------------------------------------

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)