Dandelion breaks parallel deployment feature in tomcat

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Dandelion breaks parallel deployment feature in tomcat

JSAdam
After we parallel deployed our war file (by putting a file named projectName##20150625.war into the webapps directory), tomcat eventually undeployed the old war file (the one named projectName.war).

Dandelion ignores the ## suffix and just looks for /var/lib/tomcat/webapps/projectName/, which doesn't exist after the old war is undeployed.

This completely break parallel deployment for us.  

Is there anyway to handle this?

Thanks
Josh
Reply | Threaded
Open this post in threaded view
|

Re: Dandelion breaks parallel deployment feature in tomcat

Thibault Duchateau
Administrator
Hi Josh,

Never heard about this parallel deployment feature. I'll have a look at it. 

Do you mean that Dandelion doesn't manage to scan for bundles when the app is deployed using this way?

What version of Dandelion are you using?

And finally, could you please turn the TRACE level (for com.github.dandelion) on and post the init logs? It may help. 

Thanks
Thibault

Le 26 juin 2015 à 16:17, "JSAdam [via Dandelion - Forum]" <[hidden email]> a écrit :

After we parallel deployed our war file (by putting a file named projectName##20150625.war into the webapps directory), tomcat eventually undeployed the old war file (the one named projectName.war).

Dandelion ignores the ## suffix and just looks for /var/lib/tomcat/webapps/projectName/, which doesn't exist after the old war is undeployed.

This completely break parallel deployment for us.  

Is there anyway to handle this?

Thanks
Josh


If you reply to this email, your message will be added to the discussion below:
http://dandelion-forum.48353.x6.nabble.com/Dandelion-breaks-parallel-deployment-feature-in-tomcat-tp1906.html
To start a new topic under Dandelion Core, email [hidden email]
To unsubscribe from Dandelion - Forum, click here.
NAML
Reply | Threaded
Open this post in threaded view
|

Re: Dandelion breaks parallel deployment feature in tomcat

JSAdam
Thanks for the quick reply.  Information on parallel deployment in tomcat can be found at https://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Parallel_deployment.  

We are running dandelion version 0.10.1

I am heading out for the weekend shortly, I will try to update the logging next week and include the trace then.

Thanks again,
Josh
Reply | Threaded
Open this post in threaded view
|

Re: Dandelion breaks parallel deployment feature in tomcat

Thibault Duchateau
Administrator
Hi,

I've just tested "parallel deployment". (By the way, much thanks to Jeff Warren because the documentation...)

1) In a local Tomcat 7.0.57, I've deployed the following WAR file: datatatables-jsp-starter.war, coming from the wip/1.0.0 branch
2) By browsing http://localhost:8080/datatables-jsp-starter/, it works well
3) Now I deploy the another WAR, named datatatables-jsp-starter##2.war
4) In another browser, I browse http://localhost:8080/datatables-jsp-starter/ and it still works well. I confirm that I've switched to the latest WAR thanks to the session displayed in the Tomcat manager
5) Now, via the Tomcat manager, I stop the first WAR and remove it
6) I still try to browse the same context, http://localhost:8080/datatables-jsp-starter/, and it works.
7) I've repeated the same test (1 to 6) with the datatables-jsp-starter in v0.10.1. Still no issue.

Do you confirm the test is consistent with your use-case? If not, please guide me to reproduce the issue.

Regards,
Thibault.

Reply | Threaded
Open this post in threaded view
|

Re: Dandelion breaks parallel deployment feature in tomcat

JSAdam
Hi Thibault,

You are amazing at responding to help! Thanks.

I have asked our project manager to take a look at the deployment again in regards to your response to see if its not something on our end.  He is away for the next few days, but I will let you know as soon as he gets back to me.

Thanks again for looking into this,
Josh
Reply | Threaded
Open this post in threaded view
|

Re: Dandelion breaks parallel deployment feature in tomcat

fbristow
In reply to this post by Thibault Duchateau
Hi Thibault,
We're using the Thymeleaf version of Dandelion 0.10.1.

I'm going to start trying to upgrade to 1.0.1, but (for what it's worth) the stack trace that we're getting when I deploy our application with a name like
irida##20150706.war
 looks like the following:

java.io.FileNotFoundException: /var/lib/tomcat7/webapps/irida (No such file or directory)
	java.io.FileInputStream.open0(Native Method)
	java.io.FileInputStream.open(FileInputStream.java:195)
	java.io.FileInputStream.<init>(FileInputStream.java:138)
	java.io.FileInputStream.<init>(FileInputStream.java:93)
	sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
	sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
	java.net.URL.openStream(URL.java:1038)
	com.github.dandelion.datatables.core.util.ClassUtils.findClasses(ClassUtils.java:204)
	com.github.dandelion.datatables.core.util.ClassUtils.getSubClassesInPackage(ClassUtils.java:166)
	com.github.dandelion.datatables.core.extension.ExtensionLoader.scanForExtensions(ExtensionLoader.java:179)
	com.github.dandelion.datatables.core.extension.ExtensionLoader.scanForExtensions(ExtensionLoader.java:166)
	com.github.dandelion.datatables.core.extension.ExtensionLoader.registerBuiltInExtensions(ExtensionLoader.java:108)
	com.github.dandelion.datatables.core.extension.ExtensionLoader.loadExtensions(ExtensionLoader.java:84)
	com.github.dandelion.datatables.core.generator.WebResourceGenerator.generateWebResources(WebResourceGenerator.java:101)
	com.github.dandelion.datatables.thymeleaf.processor.el.TableFinalizerElProcessor.setupHtml(TableFinalizerElProcessor.java:296)
	com.github.dandelion.datatables.thymeleaf.processor.el.TableFinalizerElProcessor.doProcessElement(TableFinalizerElProcessor.java:121)
	com.github.dandelion.datatables.thymeleaf.processor.AbstractElProcessor.processElement(AbstractElProcessor.java:65)
	org.thymeleaf.processor.element.AbstractElementProcessor.doProcess(AbstractElementProcessor.java:74)
	org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212)
	org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1016)
	org.thymeleaf.dom.Node.processNode(Node.java:971)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.NestableNode.computeNextChild(NestableNode.java:672)
	org.thymeleaf.dom.NestableNode.doAdditionalProcess(NestableNode.java:655)
	org.thymeleaf.dom.Node.processNode(Node.java:990)
	org.thymeleaf.dom.Document.process(Document.java:93)
	org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1155)
	org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
	org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
	org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
	org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:190)
	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1221)
	org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	ca.corefacility.bioinformatics.irida.web.filter.HttpHeadFilter.doFilter(HttpHeadFilter.java:56)
	com.github.dandelion.core.web.DandelionFilter.doFilter(DandelionFilter.java:138)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	ca.corefacility.bioinformatics.irida.ria.config.filters.SessionFilter.doFilter(SessionFilter.java:35)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
	org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
Reply | Threaded
Open this post in threaded view
|

Re: Dandelion breaks parallel deployment feature in tomcat

Thibault Duchateau
Administrator
Hi,

Unfortunately, I won't provide any v0.10.x bugfixing version. So I encourage you to migrate to v1.0.1 as soon as possible. The extension mechanism has been fully rewritten (in 1.0.0) in order, among other things, to give up this buggy and counter-productive scanning utilities.

Regards,
Thibault.
Reply | Threaded
Open this post in threaded view
|

Re: Dandelion breaks parallel deployment feature in tomcat

fbristow
Hi Thibault,
I completely understand.

I started the upgrade process to 1.0.1, and the problem that we've encountered above *appears* to be solved in the upgrade.

I have encountered several problems that were not addressed in your upgrading documentation (here: http://dandelion.github.io/components/datatables/1.0.0/docs/from-0.10.x-to-1.x.html). What is the best place for me to suggest changes to that documentation?

Thanks!
- Franklin
Reply | Threaded
Open this post in threaded view
|

Re: Dandelion breaks parallel deployment feature in tomcat

Thibault Duchateau
Administrator
Hi again Franklin,

For now, this kind of "guide" live in the repository of the site: https://github.com/dandelion/dandelion.github.io, so feel free to raise issues in here.

But you made me realize that it could actually reside in the same repository than the one where the component's docs live... I'll give some thought, thanks! :-)

Regards,
Thibault.