]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - server/runtime/org.argeo.server.webextender/src/main/java/org/argeo/server/webextender/TomcatDeployer.java
1 package org
.argeo
.server
.webextender
;
3 import org
.apache
.catalina
.Container
;
4 import org
.apache
.catalina
.Context
;
5 import org
.apache
.catalina
.Service
;
6 import org
.springframework
.osgi
.web
.deployer
.WarDeployment
;
7 import org
.springframework
.osgi
.web
.deployer
.tomcat
.TomcatWarDeployer
;
8 import org
.springframework
.util
.ObjectUtils
;
11 * Wraps the Spring DM Tomcat deployer in order to avoid issue with call to
12 * getServerInfo() when undeployed. We need to hack a lot here because Spring
13 * OSGi Web is really not extendable.
15 public class TomcatDeployer
extends TomcatWarDeployer
{
16 private String serverInfo
;
17 private Service service
;
18 private String contextPath
= "/org.argeo.rap.webapp";
21 public void setService(Object service
) {
22 this.service
= (Service
) service
;
23 super.setService(service
);
24 // TODO: listen to OSGi service so that we get notified in the
25 // (unlikely) case the underlying service is updated
26 serverInfo
= ((Service
) service
).getInfo();
27 if (log
.isTraceEnabled())
28 log
.trace("Argeo modified Tomcat deployer used");
32 protected String
getServerInfo() {
37 protected void startDeployment(WarDeployment deployment
) throws Exception
{
38 // Context context = ((TomcatWarDeployment)
39 // deployment).getCatalinaContext();
40 // context.setCookies(false);
41 super.startDeployment(deployment
);
43 // Required for multiple RAP sessions to work with Tomcat
45 // http://wiki.eclipse.org/RAP/FAQ#How_to_run_a_RAP_application_in_multiple_browser_tabs.2Fwindows.3F
46 Context context
= getContext(contextPath
);
48 context
.setCookies(false);
51 /** @return null if not found */
52 private Context
getContext(String path
) {
53 for (Container container
: getHost().findChildren()) {
54 if (log
.isTraceEnabled())
55 log
.trace(container
.getClass() + ": " + container
.getName());
56 if (container
instanceof Context
) {
57 Context context
= (Context
) container
;
58 if (path
.equals(context
.getPath()))
65 private Container
getHost() {
67 Container container
= service
.getContainer();
69 if (container
== null)
70 throw new IllegalStateException(
71 "The Tomcat server doesn't have any Engines defined");
73 Container
[] children
= container
.findChildren();
74 if (ObjectUtils
.isEmpty(children
))
75 throw new IllegalStateException(
76 "The Tomcat server doesn't have any Hosts defined");
78 // pick the first one and associate the context with it
82 public void setContextPath(String contextPath
) {
83 this.contextPath
= contextPath
;