[ https://issues.apache.org/jira/browse/OFBIZ-7073?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15353536#comment-15353536 ]
Jacques Le Roux commented on OFBIZ-7073: ---------------------------------------- I trust you will not forget OFBIZ-7538 ;) > Add websocket support in OFBiz > ------------------------------ > > Key: OFBIZ-7073 > URL: https://issues.apache.org/jira/browse/OFBIZ-7073 > Project: OFBiz > Issue Type: New Feature > Components: framework > Affects Versions: Trunk > Reporter: Amardeep Singh Jhajj > Assignee: Jacques Le Roux > Fix For: Upcoming Branch > > Attachments: OFBIZ-7073.patch, tomcat-embed-websocket-8.0.33.jar > > > I tried to use websockets in OFBiz. I simply added tomcat-embed-websocket.jar > in catalina lib and created one webapp for websocket and also added server > endpoint class. > It didn't work. After that, I tried the same thing with plain j2ee > application with embedded tomcat. It worked there. > I researched on above issue in OFBiz and got the reason. Websockets > implementation need jar scanning enabled and it is currently disabled in > OFBiz. Below is the code snippet of disabling jar scan from > CatalinaContainer.java: > {code} > JarScanner jarScanner = context.getJarScanner(); > if (jarScanner instanceof StandardJarScanner) { > StandardJarScanner standardJarScanner = (StandardJarScanner) jarScanner; > standardJarScanner.setScanClassPath(false); > } > {code} > Jar scanning enabling increase OFBiz server startup time upto couples of > minutes (in my case, it took approx 8 minutes), so we don't want this much of > startup time for OFBiz. > > I got the following document where I found the reason why websocket is not > working if scanning disabled. > https://wiki.apache.org/tomcat/HowTo/FasterStartUp > Here tips are given to decrease the startup time. This tips also include > disabling of jar scanning. > We can say disabling jar scanning is right approach because if we enable it > then scanner will scan all the jars loaded in OFBiz startup that we don't > want. > But, If we want websockets working then we have to enable jar scanning. > For enabling jar scanning, we need below code: > {code} > standardJarScanner.setScanClassPath(true); // Will increase server startup > time. > {code} > Solution: We can add filter on jar scanning. It will allow only some kind of > jars only. For example: jars having websockets endpoints. I am attaching > patch for the same here. > I added filter like if jar name string contains "discoverable" word then only > it will be considered for jar scan. We can change jar name of our jars using > build.xml to make it discoverable for jar scanning. > For example: I have added my websocket endpoint class in > "specialpurpose/ecommerce/src" and changed the "name" property in build.xml > of ecommerce component from "ofbiz-ecommerce" > to "ofbiz-ecommerce-discoverable". Here is the code snippet from build.xml: > {code} > <property name="name" value="ofbiz-ecommerce-discoverable"/> > {code} > This change will create the jar with name "ofbiz-ecommerce-discoverable.jar" > in "ecommerce/build/lib/". > Now created jar will be scanned in jar scanner as its name contains > "discoverable" word in it. > This change will not increase server start up time more than couple of > seconds (in my case, it just two seconds). So scanning time totally depends > on the list of jars scanned. > Conclusion: We can use websocket support with the help of jar filters. > I am also attaching the version 8.0.33 tomcat-embed-websocket.jar. -- This message was sent by Atlassian JIRA (v6.3.4#6332)