Author: wesw Date: Thu Mar 12 20:44:50 2009 New Revision: 753010 URL: http://svn.apache.org/viewvc?rev=753010&view=rev Log: struts zone deployment files
Added: struts/current/zone/config-files/ struts/current/zone/config-files/httpd.conf.patch struts/current/zone/config-files/jetty.xml.patch struts/current/zone/config-files/tomcat-server.xml.patch struts/current/zone/manifest/ struts/current/zone/manifest/jetty-6-1-14-java5.xml struts/current/zone/manifest/s2app_deploy_daemon.xml struts/current/zone/manifest/tomcat-5-5-27-java5.xml struts/current/zone/s2app_deploy_daemon/ struts/current/zone/s2app_deploy_daemon/config.xml struts/current/zone/s2app_deploy_daemon/logger.conf struts/current/zone/s2app_deploy_daemon/s2app_deploy_daemon (with props) struts/current/zone/startup-scripts/ struts/current/zone/startup-scripts/svc-jetty-6-1-14-java5 (with props) struts/current/zone/startup-scripts/svc-s2app_deploy_daemon (with props) struts/current/zone/startup-scripts/svc-tomcat-5-5-27-java5 (with props) Added: struts/current/zone/config-files/httpd.conf.patch URL: http://svn.apache.org/viewvc/struts/current/zone/config-files/httpd.conf.patch?rev=753010&view=auto ============================================================================== --- struts/current/zone/config-files/httpd.conf.patch (added) +++ struts/current/zone/config-files/httpd.conf.patch Thu Mar 12 20:44:50 2009 @@ -0,0 +1,197 @@ +--- /etc/apache2/httpd.conf.orig Mon Jan 19 04:33:46 2009 ++++ /etc/apache2/httpd.conf Thu Jan 22 14:30:27 2009 +@@ -322,7 +322,7 @@ + # e-mailed. This address appears on some server-generated pages, such + # as error documents. e.g. ad...@your-domain.com + # +-ServerAdmin y...@yourhost.com ++ServerAdmin d...@struts.apache.org + + # + # ServerName gives the name and port that the server uses to identify itself. +@@ -336,7 +336,7 @@ + # You will have to access it by its address anyway, and this will make + # redirections work in a sensible way. + # +-ServerName 127.0.0.1 ++ServerName struts.zones.apache.org + + # + # UseCanonicalName: Determines how Apache constructs self-referencing +@@ -418,20 +418,20 @@ + # Control access to UserDir directories. The following is an example + # for a site where these directories are restricted to read-only. + # +-<Directory /home/*/public_html> +- AllowOverride FileInfo AuthConfig Limit Indexes +- Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec +- <Limit GET POST OPTIONS PROPFIND> +- Order allow,deny +- Allow from all +- </Limit> +- <LimitExcept GET POST OPTIONS PROPFIND> +- Order deny,allow +- Deny from all +- </LimitExcept> +-</Directory> +- ++#<Directory /home/*/public_html> ++# AllowOverride FileInfo AuthConfig Limit Indexes ++# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ++# <Limit GET POST OPTIONS PROPFIND> ++# Order allow,deny ++# Allow from all ++# </Limit> ++# <LimitExcept GET POST OPTIONS PROPFIND> ++# Order deny,allow ++# Deny from all ++# </LimitExcept> ++#</Directory> + # ++# + # DirectoryIndex: sets the file that Apache will serve if a directory + # is requested. + # +@@ -580,7 +580,7 @@ + # Set to "EMail" to also include a mailto: link to the ServerAdmin. + # Set to one of: On | Off | EMail + # +-ServerSignature On ++ServerSignature Off + + # + # Aliases: Add here as many aliases as you need (with no limit). The format is +@@ -595,37 +595,37 @@ + # We include the /icons/ alias for FancyIndexed directory listings. If you + # do not use FancyIndexing, you may comment this out. + # +-Alias /icons/ "/var/apache2/icons/" ++#Alias /icons/ "/var/apache2/icons/" ++# ++#<Directory "/var/apache2/icons"> ++# Options Indexes MultiViews ++# AllowOverride None ++# Order allow,deny ++# Allow from all ++#</Directory> + +-<Directory "/var/apache2/icons"> +- Options Indexes MultiViews +- AllowOverride None +- Order allow,deny +- Allow from all +-</Directory> +- + # + # This should be changed to the ServerRoot/manual/. The alias provides + # the manual, even if you choose to move your DocumentRoot. You may comment + # this out if you do not care for the documentation. + # +-AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ "/usr/apache2/manual$1" +- +-<Directory "/usr/apache2/manual"> +- Options Indexes +- AllowOverride None +- Order allow,deny +- Allow from all +- +- <Files *.html> +- SetHandler type-map +- </Files> +- +- SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1 +- RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2 +-</Directory> +- ++#AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ "/usr/apache2/manual$1" + # ++#<Directory "/usr/apache2/manual"> ++# Options Indexes ++# AllowOverride None ++# Order allow,deny ++# Allow from all ++# ++# <Files *.html> ++# SetHandler type-map ++# </Files> ++# ++# SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1 ++# RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2 ++#</Directory> ++# ++# + # ScriptAlias: This controls which directories contain server scripts. + # ScriptAliases are essentially the same as Aliases, except that + # documents in the realname directory are treated as applications and +@@ -633,7 +633,7 @@ + # The same rules about trailing "/" apply to ScriptAlias directives as to + # Alias. + # +-ScriptAlias /cgi-bin/ "/var/apache2/cgi-bin/" ++#ScriptAlias /cgi-bin/ "/var/apache2/cgi-bin/" + + <IfModule mod_cgid.c> + # +@@ -647,14 +647,14 @@ + # "/var/apache2/cgi-bin" should be changed to whatever your ScriptAliased + # CGI directory exists, if you have that configured. + # +-<Directory "/var/apache2/cgi-bin"> +- AllowOverride None +- Options None +- Order allow,deny +- Allow from all +-</Directory> +- ++#<Directory "/var/apache2/cgi-bin"> ++# AllowOverride None ++# Options None ++# Order allow,deny ++# Allow from all ++#</Directory> + # ++# + # Redirect allows you to tell clients about documents which used to exist in + # your server's namespace, but do not anymore. This allows you to tell the + # clients where to look for the relocated document. +@@ -1057,7 +1057,40 @@ + Include /etc/apache2/ssl.conf + </IfModule> + ++ProxyRequests off ++####################################################################### ++## HERE IS WHERE YOU ADD THE APP SERVERS CONFIGURED FOR THE STRUTS ZONE ++####################################################################### ++# Tomcat 5.5.27 running on Java 5 ++ProxyPass /tomcat-5-5-27-java5-struts2-showcase http://localhost:8080/tomcat-5-5-27-java5-struts2-showcase ++ProxyPassReverse /tomcat-5-5-27-java5-struts2-showcase http://localhost:8080/tomcat-5-5-27-java5-struts2-showcase ++ProxyPass /tomcat-5-5-27-java5-struts2-blank http://localhost:8080/tomcat-5-5-27-java5-struts2-blank ++ProxyPassReverse /tomcat-5-5-27-java5-struts2-blank http://localhost:8080/tomcat-5-5-27-java5-struts2-blank ++ProxyPass /tomcat-5-5-27-java5-struts2-mailreader http://localhost:8080/tomcat-5-5-27-java5-struts2-mailreader ++ProxyPassReverse /tomcat-5-5-27-java5-struts2-mailreader http://localhost:8080/tomcat-5-5-27-java5-struts2-mailreader ++ProxyPass /tomcat-5-5-27-java5-struts2-portlet http://localhost:8080/tomcat-5-5-27-java5-struts2-portlet ++ProxyPassReverse /tomcat-5-5-27-java5-struts2-portlet http://localhost:8080/tomcat-5-5-27-java5-struts2-portlet ++ProxyPass /tomcat-5-5-27-java5-struts2-rest-showcase http://localhost:8080/tomcat-5-5-27-java5-struts2-rest-showcase ++ProxyPassReverse /tomcat-5-5-27-java5-struts2-rest-showcase http://localhost:8080/tomcat-5-5-27-java5-struts2-rest-showcase + ++# Jetty 6.1.14 running on Java 5 ++ProxyPass /jetty-6-1-14-java5-struts2-showcase http://localhost:8081/jetty-6-1-14-java5-struts2-showcase ++ProxyPassReverse /jetty-6-1-14-java5-struts2-showcase http://localhost:8081/jetty-6-1-14-java5-struts2-showcase ++ProxyPass /jetty-6-1-14-java5-struts2-blank http://localhost:8081/jetty-6-1-14-java5-struts2-blank ++ProxyPassReverse /jetty-6-1-14-java5-struts2-blank http://localhost:8081/jetty-6-1-14-java5-struts2-blank ++ProxyPass /jetty-6-1-14-java5-struts2-mailreader http://localhost:8081/jetty-6-1-14-java5-struts2-mailreader ++ProxyPassReverse /jetty-6-1-14-java5-struts2-mailreader http://localhost:8081/jetty-6-1-14-java5-struts2-mailreader ++ProxyPass /jetty-6-1-14-java5-struts2-portlet http://localhost:8081/jetty-6-1-14-java5-struts2-portlet ++ProxyPassReverse /jetty-6-1-14-java5-struts2-portlet http://localhost:8081/jetty-6-1-14-java5-struts2-portlet ++ProxyPass /jetty-6-1-14-java5-struts2-rest-showcase http://localhost:8081/jetty-6-1-14-java5-struts2-rest-showcase ++ProxyPassReverse /jetty-6-1-14-java5-struts2-rest-showcase http://localhost:8081/jetty-6-1-14-java5-struts2-rest-showcase ++ ++ ++####################################################################### ++# END OF ADDED APP SERVERS ++####################################################################### ++ ++ + ### Section 3: Virtual Hosts + # + # VirtualHost: If you want to maintain multiple domains/hostnames on your Added: struts/current/zone/config-files/jetty.xml.patch URL: http://svn.apache.org/viewvc/struts/current/zone/config-files/jetty.xml.patch?rev=753010&view=auto ============================================================================== --- struts/current/zone/config-files/jetty.xml.patch (added) +++ struts/current/zone/config-files/jetty.xml.patch Thu Mar 12 20:44:50 2009 @@ -0,0 +1,18 @@ +--- /local/appservers/jetty/jetty-6.1.14/etc/jetty.xml.orig Thu Jan 22 02:04:48 2009 ++++ /local/appservers/jetty/jetty-6.1.14/etc/jetty.xml Thu Jan 22 02:11:25 2009 +@@ -46,12 +46,12 @@ + <Call name="addConnector"> + <Arg> + <New class="org.mortbay.jetty.nio.SelectChannelConnector"> +- <Set name="host"><SystemProperty name="jetty.host" /></Set> +- <Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set> ++ <Set name="host"><SystemProperty name="jetty.host" default="127.0.0.1" /></Set> ++ <Set name="port"><SystemProperty name="jetty.port" default="8081" /></Set> + <Set name="maxIdleTime">30000</Set> + <Set name="Acceptors">2</Set> + <Set name="statsOn">false</Set> +- <Set name="confidentialPort">8443</Set> ++ <Set name="confidentialPort">8444</Set> + <Set name="lowResourcesConnections">5000</Set> + <Set name="lowResourcesMaxIdleTime">5000</Set> + </New> Added: struts/current/zone/config-files/tomcat-server.xml.patch URL: http://svn.apache.org/viewvc/struts/current/zone/config-files/tomcat-server.xml.patch?rev=753010&view=auto ============================================================================== --- struts/current/zone/config-files/tomcat-server.xml.patch (added) +++ struts/current/zone/config-files/tomcat-server.xml.patch Thu Mar 12 20:44:50 2009 @@ -0,0 +1,391 @@ +--- /local/appservers/tomcat/apache-tomcat-5.5.27/conf/server.xml.orig Mon Jan 19 03:52:38 2009 ++++ /local/appservers/tomcat/apache-tomcat-5.5.27/conf/server.xml Mon Jan 19 04:01:58 2009 +@@ -1,387 +1,19 @@ + <?xml version="1.0" encoding="UTF-8"?> +-<!-- +- Licensed to the Apache Software Foundation (ASF) under one or more +- contributor license agreements. See the NOTICE file distributed with +- this work for additional information regarding copyright ownership. +- The ASF licenses this file to You under the Apache License, Version 2.0 +- (the "License"); you may not use this file except in compliance with +- the License. You may obtain a copy of the License at +- +- http://www.apache.org/licenses/LICENSE-2.0 +- +- Unless required by applicable law or agreed to in writing, software +- distributed under the License is distributed on an "AS IS" BASIS, +- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +- See the License for the specific language governing permissions and +- limitations under the License. +---> +-<!-- Example Server Configuration File --> +-<!-- Note that component elements are nested corresponding to their +- parent-child relationships with each other --> +- +-<!-- A "Server" is a singleton element that represents the entire JVM, +- which may contain one or more "Service" instances. The Server +- listens for a shutdown command on the indicated port. +- +- Note: A "Server" is not itself a "Container", so you may not +- define subcomponents such as "Valves" or "Loggers" at this level. +- --> +- + <Server port="8005" shutdown="SHUTDOWN"> + +- <!-- Comment these entries out to disable JMX MBeans support used for the +- administration web application --> +- <Listener className="org.apache.catalina.core.AprLifecycleListener" /> +- <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> +- <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> +- <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/> +- +- <!-- Global JNDI resources --> +- <GlobalNamingResources> +- +- <!-- Test entry for demonstration purposes --> +- <Environment name="simpleValue" type="java.lang.Integer" value="30"/> +- +- <!-- Editable user database that can also be used by +- UserDatabaseRealm to authenticate users --> +- <Resource name="UserDatabase" auth="Container" +- type="org.apache.catalina.UserDatabase" +- description="User database that can be updated and saved" +- factory="org.apache.catalina.users.MemoryUserDatabaseFactory" +- pathname="conf/tomcat-users.xml" /> +- +- </GlobalNamingResources> +- +- <!-- A "Service" is a collection of one or more "Connectors" that share +- a single "Container" (and therefore the web applications visible +- within that Container). Normally, that Container is an "Engine", +- but this is not required. +- +- Note: A "Service" is not itself a "Container", so you may not +- define subcomponents such as "Valves" or "Loggers" at this level. +- --> +- +- <!-- Define the Tomcat Stand-Alone Service --> + <Service name="Catalina"> + +- <!-- A "Connector" represents an endpoint by which requests are received +- and responses are returned. Each Connector passes requests on to the +- associated "Container" (normally an Engine) for processing. +- +- By default, a non-SSL HTTP/1.1 Connector is established on port 8080. +- You can also enable an SSL HTTP/1.1 Connector on port 8443 by +- following the instructions below and uncommenting the second Connector +- entry. SSL support requires the following steps (see the SSL Config +- HOWTO in the Tomcat 5 documentation bundle for more detailed +- instructions): +- * If your JDK version 1.3 or prior, download and install JSSE 1.0.2 or +- later, and put the JAR files into "$JAVA_HOME/jre/lib/ext". +- * Execute: +- %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows) +- $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (Unix) +- with a password value of "changeit" for both the certificate and +- the keystore itself. +- +- By default, DNS lookups are enabled when a web application calls +- request.getRemoteHost(). This can have an adverse impact on +- performance, so you can disable it by setting the +- "enableLookups" attribute to "false". When DNS lookups are disabled, +- request.getRemoteHost() will return the String version of the +- IP address of the remote client. +- --> +- +- <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> +- <Connector port="8080" maxHttpHeaderSize="8192" ++ <Connector address="localhost" port="8080" maxHttpHeaderSize="8192" + maxThreads="150" minSpareThreads="25" maxSpareThreads="75" + enableLookups="false" redirectPort="8443" acceptCount="100" + connectionTimeout="20000" disableUploadTimeout="true" /> +- <!-- Note : To disable connection timeouts, set connectionTimeout value +- to 0 --> + +- <!-- Note : To use gzip compression you could set the following properties : +- +- compression="on" +- compressionMinSize="2048" +- noCompressionUserAgents="gozilla, traviata" +- compressableMimeType="text/html,text/xml" +- --> +- +- <!-- Define a SSL HTTP/1.1 Connector on port 8443 --> +- <!-- +- <Connector port="8443" maxHttpHeaderSize="8192" +- maxThreads="150" minSpareThreads="25" maxSpareThreads="75" +- enableLookups="false" disableUploadTimeout="true" +- acceptCount="100" scheme="https" secure="true" +- clientAuth="false" sslProtocol="TLS" /> +- --> +- +- <!-- Define an AJP 1.3 Connector on port 8009 --> +- <Connector port="8009" +- enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> +- +- <!-- Define a Proxied HTTP/1.1 Connector on port 8082 --> +- <!-- See proxy documentation for more information about using this. --> +- <!-- +- <Connector port="8082" +- maxThreads="150" minSpareThreads="25" maxSpareThreads="75" +- enableLookups="false" acceptCount="100" connectionTimeout="20000" +- proxyPort="80" disableUploadTimeout="true" /> +- --> +- +- <!-- An Engine represents the entry point (within Catalina) that processes +- every request. The Engine implementation for Tomcat stand alone +- analyzes the HTTP headers included with the request, and passes them +- on to the appropriate Host (virtual host). --> +- +- <!-- You should set jvmRoute to support load-balancing via AJP ie : +- <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> +- --> +- +- <!-- Define the top level container in our container hierarchy --> + <Engine name="Catalina" defaultHost="localhost"> + +- <!-- The request dumper valve dumps useful debugging information about +- the request headers and cookies that were received, and the response +- headers and cookies that were sent, for all requests received by +- this instance of Tomcat. If you care only about requests to a +- particular virtual host, or a particular application, nest this +- element inside the corresponding <Host> or <Context> entry instead. +- +- For a similar mechanism that is portable to all Servlet 2.4 +- containers, check out the "RequestDumperFilter" Filter in the +- example application (the source for this filter may be found in +- "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters"). +- +- Note that this Valve uses the platform's default character encoding. +- This may cause problems for developers in another encoding, e.g. +- UTF-8. Use the RequestDumperFilter instead. +- +- Also note that enabling this Valve will write a ton of stuff to your +- logs. They are likely to grow quite large. This extensive log writing +- will definitely slow down your server. +- +- Request dumping is disabled by default. Uncomment the following +- element to enable it. --> +- <!-- +- <Valve className="org.apache.catalina.valves.RequestDumperValve"/> +- --> +- +- <!-- Because this Realm is here, an instance will be shared globally --> +- +- <!-- This Realm uses the UserDatabase configured in the global JNDI +- resources under the key "UserDatabase". Any edits +- that are performed against this UserDatabase are immediately +- available for use by the Realm. --> +- <Realm className="org.apache.catalina.realm.UserDatabaseRealm" +- resourceName="UserDatabase"/> +- +- <!-- Comment out the old realm but leave here for now in case we +- need to go back quickly --> +- <!-- +- <Realm className="org.apache.catalina.realm.MemoryRealm" /> +- --> +- +- <!-- Replace the above Realm with one of the following to get a Realm +- stored in a database and accessed via JDBC --> +- +- <!-- +- <Realm className="org.apache.catalina.realm.JDBCRealm" +- driverName="org.gjt.mm.mysql.Driver" +- connectionURL="jdbc:mysql://localhost/authority" +- connectionName="test" connectionPassword="test" +- userTable="users" userNameCol="user_name" userCredCol="user_pass" +- userRoleTable="user_roles" roleNameCol="role_name" /> +- --> +- +- <!-- +- <Realm className="org.apache.catalina.realm.JDBCRealm" +- driverName="oracle.jdbc.driver.OracleDriver" +- connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL" +- connectionName="scott" connectionPassword="tiger" +- userTable="users" userNameCol="user_name" userCredCol="user_pass" +- userRoleTable="user_roles" roleNameCol="role_name" /> +- --> +- +- <!-- +- <Realm className="org.apache.catalina.realm.JDBCRealm" +- driverName="sun.jdbc.odbc.JdbcOdbcDriver" +- connectionURL="jdbc:odbc:CATALINA" +- userTable="users" userNameCol="user_name" userCredCol="user_pass" +- userRoleTable="user_roles" roleNameCol="role_name" /> +- --> +- +- <!-- Define the default virtual host +- Note: XML Schema validation will not work with Xerces 2.2. +- --> + <Host name="localhost" appBase="webapps" + unpackWARs="true" autoDeploy="true" + xmlValidation="false" xmlNamespaceAware="false"> + +- <!-- Defines a cluster for this node, +- By defining this element, means that every manager will be changed. +- So when running a cluster, only make sure that you have webapps in there +- that need to be clustered and remove the other ones. +- A cluster has the following parameters: +- +- className = the fully qualified name of the cluster class +- +- clusterName = a descriptive name for your cluster, can be anything +- +- mcastAddr = the multicast address, has to be the same for all the nodes +- +- mcastPort = the multicast port, has to be the same for all the nodes +- +- mcastBindAddress = bind the multicast socket to a specific address +- +- mcastTTL = the multicast TTL if you want to limit your broadcast +- +- mcastSoTimeout = the multicast readtimeout +- +- mcastFrequency = the number of milliseconds in between sending a "I'm alive" heartbeat +- +- mcastDropTime = the number a milliseconds before a node is considered "dead" if no heartbeat is received +- +- tcpThreadCount = the number of threads to handle incoming replication requests, optimal would be the same amount of threads as nodes +- +- tcpListenAddress = the listen address (bind address) for TCP cluster request on this host, +- in case of multiple ethernet cards. +- auto means that address becomes +- InetAddress.getLocalHost().getHostAddress() +- +- tcpListenPort = the tcp listen port +- +- tcpSelectorTimeout = the timeout (ms) for the Selector.select() method in case the OS +- has a wakup bug in java.nio. Set to 0 for no timeout +- +- printToScreen = true means that managers will also print to std.out +- +- expireSessionsOnShutdown = true means that +- +- useDirtyFlag = true means that we only replicate a session after setAttribute,removeAttribute has been called. +- false means to replicate the session after each request. +- false means that replication would work for the following piece of code: (only for SimpleTcpReplicationManager) +- <% +- HashMap map = (HashMap)session.getAttribute("map"); +- map.put("key","value"); +- %> +- replicationMode = can be either 'pooled', 'synchronous' or 'asynchronous'. +- * Pooled means that the replication happens using several sockets in a synchronous way. Ie, the data gets replicated, then the request return. This is the same as the 'synchronous' setting except it uses a pool of sockets, hence it is multithreaded. This is the fastest and safest configuration. To use this, also increase the nr of tcp threads that you have dealing with replication. +- * Synchronous means that the thread that executes the request, is also the +- thread the replicates the data to the other nodes, and will not return until all +- nodes have received the information. +- * Asynchronous means that there is a specific 'sender' thread for each cluster node, +- so the request thread will queue the replication request into a "smart" queue, +- and then return to the client. +- The "smart" queue is a queue where when a session is added to the queue, and the same session +- already exists in the queue from a previous request, that session will be replaced +- in the queue instead of replicating two requests. This almost never happens, unless there is a +- large network delay. +- --> +- <!-- +- When configuring for clustering, you also add in a valve to catch all the requests +- coming in, at the end of the request, the session may or may not be replicated. +- A session is replicated if and only if all the conditions are met: +- 1. useDirtyFlag is true or setAttribute or removeAttribute has been called AND +- 2. a session exists (has been created) +- 3. the request is not trapped by the "filter" attribute +- +- The filter attribute is to filter out requests that could not modify the session, +- hence we don't replicate the session after the end of this request. +- The filter is negative, ie, anything you put in the filter, you mean to filter out, +- ie, no replication will be done on requests that match one of the filters. +- The filter attribute is delimited by ;, so you can't escape out ; even if you wanted to. +- +- filter=".*\.gif;.*\.js;" means that we will not replicate the session after requests with the URI +- ending with .gif and .js are intercepted. +- +- The deployer element can be used to deploy apps cluster wide. +- Currently the deployment only deploys/undeploys to working members in the cluster +- so no WARs are copied upons startup of a broken node. +- The deployer watches a directory (watchDir) for WAR files when watchEnabled="true" +- When a new war file is added the war gets deployed to the local instance, +- and then deployed to the other instances in the cluster. +- When a war file is deleted from the watchDir the war is undeployed locally +- and cluster wide +- --> +- +- <!-- +- <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" +- managerClassName="org.apache.catalina.cluster.session.DeltaManager" +- expireSessionsOnShutdown="false" +- useDirtyFlag="true" +- notifyListenersOnReplication="true"> +- +- <Membership +- className="org.apache.catalina.cluster.mcast.McastService" +- mcastAddr="228.0.0.4" +- mcastPort="45564" +- mcastFrequency="500" +- mcastDropTime="3000"/> +- +- <Receiver +- className="org.apache.catalina.cluster.tcp.ReplicationListener" +- tcpListenAddress="auto" +- tcpListenPort="4001" +- tcpSelectorTimeout="100" +- tcpThreadCount="6"/> +- +- <Sender +- className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" +- replicationMode="pooled" +- ackTimeout="15000" +- waitForAck="true"/> +- +- <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" +- filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> +- +- <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer" +- tempDir="/tmp/war-temp/" +- deployDir="/tmp/war-deploy/" +- watchDir="/tmp/war-listen/" +- watchEnabled="false"/> +- +- <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/> +- </Cluster> +- --> +- +- +- +- <!-- Normally, users must authenticate themselves to each web app +- individually. Uncomment the following entry if you would like +- a user to be authenticated the first time they encounter a +- resource protected by a security constraint, and then have that +- user identity maintained across *all* web applications contained +- in this virtual host. --> +- <!-- +- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> +- --> +- +- <!-- Access log processes all requests for this virtual host. By +- default, log files are created in the "logs" directory relative to +- $CATALINA_HOME. If you wish, you can specify a different +- directory with the "directory" attribute. Specify either a relative +- (to $CATALINA_HOME) or absolute path to the desired directory. +- --> +- <!-- +- <Valve className="org.apache.catalina.valves.AccessLogValve" +- directory="logs" prefix="localhost_access_log." suffix=".txt" +- pattern="common" resolveHosts="false"/> +- --> +- +- <!-- Access log processes all requests for this virtual host. By +- default, log files are created in the "logs" directory relative to +- $CATALINA_HOME. If you wish, you can specify a different +- directory with the "directory" attribute. Specify either a relative +- (to $CATALINA_HOME) or absolute path to the desired directory. +- This access log implementation is optimized for maximum performance, +- but is hardcoded to support only the "common" and "combined" patterns. +- --> +- <!-- +- <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve" +- directory="logs" prefix="localhost_access_log." suffix=".txt" +- pattern="common" resolveHosts="false"/> +- --> +- + </Host> + + </Engine> Added: struts/current/zone/manifest/jetty-6-1-14-java5.xml URL: http://svn.apache.org/viewvc/struts/current/zone/manifest/jetty-6-1-14-java5.xml?rev=753010&view=auto ============================================================================== --- struts/current/zone/manifest/jetty-6-1-14-java5.xml (added) +++ struts/current/zone/manifest/jetty-6-1-14-java5.xml Thu Mar 12 20:44:50 2009 @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"> + +<service_bundle type="manifest" name="tomcat"> + <service name="network/app-servers/jetty-6-1-14-java5" type="service" version="1"> + + <create_default_instance enabled="false"/> + + <single_instance/> + + <dependency name="filesystem" grouping="require_all" restart_on="none" type="service"> + <service_fmri value="svc:/system/filesystem/local"/> + </dependency> + + <dependency name="network" grouping="require_all" restart_on="none" type="service"> + <service_fmri value="svc:/network/loopback"/> + </dependency> + + <exec_method + type="method" name="start" + exec="/local/smf/scripts/svc-jetty-6-1-14-java5 start" + timeout_seconds="30"> + <method_context> + <method_credential user="appservers" group="appservers"/> + </method_context> + </exec_method> + + <exec_method + type="method" name="stop" + exec="/local/smf/scripts/svc-jetty-6-1-14-java5 stop" + timeout_seconds="60"/> + + <exec_method + type="method" name="restart" + exec="/local/smf/scripts/svc-jetty-6-1-14-java5 restart" + timeout_seconds="60"/> + + <stability value="Unstable"/> + + <template> + <common_name> + <loctext xml:lang="C"> Tomcat </loctext> + </common_name> + </template> + + </service> +</service_bundle> Added: struts/current/zone/manifest/s2app_deploy_daemon.xml URL: http://svn.apache.org/viewvc/struts/current/zone/manifest/s2app_deploy_daemon.xml?rev=753010&view=auto ============================================================================== --- struts/current/zone/manifest/s2app_deploy_daemon.xml (added) +++ struts/current/zone/manifest/s2app_deploy_daemon.xml Thu Mar 12 20:44:50 2009 @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"> + +<service_bundle type="manifest" name="s2app_deploy_daemon"> + <service name="network/app-servers/s2app_deploy_daemon" type="service" version="1"> + + <create_default_instance enabled="false"/> + + <single_instance/> + + <dependency name="filesystem" grouping="require_all" restart_on="none" type="service"> + <service_fmri value="svc:/system/filesystem/local"/> + </dependency> + + <exec_method + type="method" name="start" + exec="/local/smf/scripts/svc-s2app_deploy_daemon start" + timeout_seconds="30"> + <method_context> + <method_credential user="appservers" group="appservers"/> + </method_context> + </exec_method> + + <exec_method + type="method" name="stop" + exec="/local/smf/scripts/svc-s2app_deploy_daemon stop" + timeout_seconds="120"/> + + <exec_method + type="method" name="restart" + exec="/local/smf/scripts/svc-s2app_deploy_daemon restart" + timeout_seconds="150"/> + + <stability value="Unstable"/> + + <template> + <common_name> + <loctext xml:lang="C"> Tomcat </loctext> + </common_name> + </template> + + </service> +</service_bundle> Added: struts/current/zone/manifest/tomcat-5-5-27-java5.xml URL: http://svn.apache.org/viewvc/struts/current/zone/manifest/tomcat-5-5-27-java5.xml?rev=753010&view=auto ============================================================================== --- struts/current/zone/manifest/tomcat-5-5-27-java5.xml (added) +++ struts/current/zone/manifest/tomcat-5-5-27-java5.xml Thu Mar 12 20:44:50 2009 @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"> + +<service_bundle type="manifest" name="tomcat"> + <service name="network/app-servers/tomcat-5-5-27-java5" type="service" version="1"> + + <create_default_instance enabled="false"/> + + <single_instance/> + + <dependency name="filesystem" grouping="require_all" restart_on="none" type="service"> + <service_fmri value="svc:/system/filesystem/local"/> + </dependency> + + <dependency name="network" grouping="require_all" restart_on="none" type="service"> + <service_fmri value="svc:/network/loopback"/> + </dependency> + + <exec_method + type="method" name="start" + exec="/local/smf/scripts/svc-tomcat-5-5-27-java5 start" + timeout_seconds="30"> + <method_context> + <method_credential user="appservers" group="appservers"/> + </method_context> + </exec_method> + + <exec_method + type="method" name="stop" + exec="/local/smf/scripts/svc-tomcat-5-5-27-java5 stop" + timeout_seconds="60"/> + + <exec_method + type="method" name="restart" + exec="/local/smf/scripts/svc-tomcat-5-5-27-java5 restart" + timeout_seconds="60"/> + + <stability value="Unstable"/> + + <template> + <common_name> + <loctext xml:lang="C"> Tomcat </loctext> + </common_name> + </template> + + </service> +</service_bundle> Added: struts/current/zone/s2app_deploy_daemon/config.xml URL: http://svn.apache.org/viewvc/struts/current/zone/s2app_deploy_daemon/config.xml?rev=753010&view=auto ============================================================================== --- struts/current/zone/s2app_deploy_daemon/config.xml (added) +++ struts/current/zone/s2app_deploy_daemon/config.xml Thu Mar 12 20:44:50 2009 @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<config> + <interval>15</interval> + <homeDir>/var/run/s2app_deploy_daemon</homeDir> + <configDir>/local/appservers/s2app_deploy_daemon</configDir> + <deployablesDir>assembly-zip</deployablesDir> + <workDir>work</workDir> + <app-servers> + <app-server + name="tomcat-5-5-27-java5" + warDir="/local/appservers/tomcat/apache-tomcat-5.5.27/webapps" + deployCmd="" /> + <app-server + name="jetty-6-1-14-java5" + warDir="/local/appservers/jetty/jetty-6.1.14/webapps" + deployCmd="/usr/bin/touch /local/appservers/jetty/jetty-6.1.14/contexts/*" /> + </app-servers> +</config> Added: struts/current/zone/s2app_deploy_daemon/logger.conf URL: http://svn.apache.org/viewvc/struts/current/zone/s2app_deploy_daemon/logger.conf?rev=753010&view=auto ============================================================================== --- struts/current/zone/s2app_deploy_daemon/logger.conf (added) +++ struts/current/zone/s2app_deploy_daemon/logger.conf Thu Mar 12 20:44:50 2009 @@ -0,0 +1,10 @@ +log4perl.rootLogger = DEBUG, myFILE + +log4perl.appender.myFILE = Log::Dispatch::FileRotate +log4perl.appender.myFILE.filename = /var/run/s2app_deploy_daemon/logs/error_log +log4perl.appender.myFILE.mode = append +log4perl.appender.Logfile.max = 2 +log4perl.appender.Logfile.size = 10000000 +log4perl.appender.myFILE.layout = Log::Log4perl::Layout::PatternLayout +log4perl.appender.myFILE.layout.ConversionPattern = %p (%d) %m%n + Added: struts/current/zone/s2app_deploy_daemon/s2app_deploy_daemon URL: http://svn.apache.org/viewvc/struts/current/zone/s2app_deploy_daemon/s2app_deploy_daemon?rev=753010&view=auto ============================================================================== --- struts/current/zone/s2app_deploy_daemon/s2app_deploy_daemon (added) +++ struts/current/zone/s2app_deploy_daemon/s2app_deploy_daemon Thu Mar 12 20:44:50 2009 @@ -0,0 +1,358 @@ +#!/usr/bin/perl + +use lib qw(/local/appservers/perl5/lib/site_perl); + +use strict; +use POSIX qw(setsid); +use XML::Simple; +use Log::Log4perl; +use File::Copy qw(move copy); +use File::Path ; + +# for debugging +use Data::Dumper; + +$| = 1; #flush + +# get config file from cmd line +my $config_file = shift ; + +# go into background +&daemonize; + +$SIG{'HUP'} = \&read_config ; # try to re-configure when HUP'd +$SIG{'TERM'} = \&shutdown ; # when kill'd make sure to clean up after yourself + +# setup global for configuration +my $config ; +&read_config; + +# setup global for logging +my $logger ; + +&write_pid_file; + +while (1) { + &check_config; + &check_for_new_apps; + sleep(&get_config_value("interval")); +} + +sub daemonize { +# for debugging, if you want to run without daemonizing, +# just uncomment the return +# TODO make into a cmd line arg +# return ; + + chdir '/'; # get off of any potentially mounted fs + open STDIN, '/dev/null' ; + open STDOUT, '>>/dev/null'; + open STDERR, '>>/dev/null'; + defined(my $l_pid = fork) or die "Failed to fork: $!"; + if ($l_pid) { # kill off parent + exit ; + } + setsid ; + umask 0; + +} + +sub read_config { + + # parse our config file + if (-e $config_file ) { + $config = undef; + $config = XMLin($config_file); + } + else { + die "config_file does not exist - " . $config_file; + } + + # initialize logging + Log::Log4perl::init( &get_config_value("configDir") . "/logger.conf" ); + $logger = Log::Log4perl->get_logger; + + $logger->debug("debug dump - "); + $logger->debug(Dumper($config)); + + my $hupFile = &get_config_value("homeDir") . "/.deployer-hup"; + if (-e $hupFile ) { + unlink $hupFile ; + } + +} + +sub check_config { + + $logger->debug("checking config, config file - $config_file"); + + # should we just stop now + my $homeDir = &get_config_value("homeDir"); + if (! $homeDir) { + $logger->error("unable to find homeDir, bailing"); + exit(1); + } + + if (-e $homeDir . "/.deployer-quit" ) { + $logger->info("found a quit file"); + &shutdown; + } + + # should we re-read the config file + if (-e $homeDir . "/.deployer-hup" ) { + $logger->info("found a hup file"); + &read_config; + } + +} + +sub check_for_new_apps { + + $logger->debug("checking for new apps" ); + + # get deployablesDir + my $deployDir = &get_dir_config_value("deployablesDir"); + + # read deployablesDir + my @files ; + if ( opendir(DIRH, $deployDir)) { + @files = readdir(DIRH); + closedir(DIRH); + } + else { + $logger->error("failed to open deployablesDir - $deployDir, error $!" ); + exit(1); + } + + # check deploy directory for zip + my $goodZip = undef ; + foreach my $file (@files) { + if ( $file =~ m/\.zip$/) { + my $cmd = "/usr/bin/unzip -q -t $deployDir/$file"; + $logger->debug("running: $cmd"); + my @res = `$cmd`; + my $returnVal = $? >> 8; + $logger->debug("result = $returnVal"); + if ($returnVal == 0 ) { + $logger->debug("setting goodZip to $file"); + $goodZip = "$file"; + last ; + } + else { + $logger->error("not a goodZip, unzip returned status - $returnVal"); + } + } + } + + if (!defined($goodZip)) { + $logger->debug("goodZip not defined, moving along"); + return ; + } + else { + # get a work dir + my $workDir = &get_dir_config_value("workDir"); + + # move zip to work dir + my $fileMoved = move("$deployDir/$goodZip", $workDir); + if (! $fileMoved) { + $logger->error("failed to move $deployDir/$goodZip to $workDir - $!"); + } + else { + &deploy_apps("$workDir/$goodZip"); + } + } +} + +sub deploy_apps { + my $zipFile = shift; + $logger->debug("deploying apps from $zipFile" ); + + my $workDir = &get_dir_config_value("workDir"); + my $cmd = "/usr/bin/unzip -q -d '$workDir' '$zipFile'"; + $logger->debug("running: $cmd"); + my @res = `$cmd`; + my $returnVal = $? >> 8; + $logger->debug("result = $returnVal"); + if ($returnVal != 0 ) { + $logger->error("unzip had a problem, return code - $returnVal"); + move($zipFile, $zipFile.".bad"); + return ; + } + else { + $logger->debug("unzip succeeded!"); + } + + my $findCmd = "/usr/bin/find '$workDir' -name \\*.war"; + $logger->debug("running: $findCmd"); + my @origWarFiles = `$findCmd`; + chomp @origWarFiles ; + my @newWars = (); + foreach my $origWarFile (@origWarFiles) { + my $newNameCmd = "/usr/bin/basename $origWarFile"; + $logger->debug("running: $newNameCmd"); + my $newName = `$newNameCmd`; + chomp $newName; + $newName =~ s/\-\d+\.\d+\.\d+\-SNAPSHOT//g; + $logger->debug("using $newName as basename for $origWarFile"); + $logger->debug("copying $origWarFile to $workDir/$newName" ); + copy("$origWarFile","$workDir/$newName"); + push @newWars, $newName; + } + + my $appServers = &get_config_value('app-servers'); + unless ($appServers) { + $logger->warn("error parsing config for app-servers, nowhere to deploy"); + &clean_work_dir(); + return ; + } + # this is sort of silly, but so is using XML::Simple + my $appServersHashRef = $appServers->{'app-server'}; + foreach my $appServer (keys %$appServersHashRef) { + $logger->debug("working on app server - " . $appServer); + + # check warDir, then deploy + my $curWarDir = $appServersHashRef->{$appServer}{'warDir'}; + $curWarDir =~ s/\/$//g; + unless (-d $curWarDir ) { + $logger->error("warDir for $appServer is not a directory"); + next; + } + + foreach my $war (@newWars) { + my $deployedName = "$appServer-$war" ; + $logger->debug("deploying $deployedName to $curWarDir"); + if (-e "$curWarDir/$deployedName" ) { + unlink "$curWarDir/$deployedName" ; + } + copy("$workDir/$war", "$curWarDir/$deployedName"); + } + + # some app servers can't hot deploy, so deploy manually + my $deployCmd = $appServersHashRef->{$appServer}{'deployCmd'}; + if ($deployCmd ne "") { + $logger->debug("running - " . $deployCmd); + my @res = `$deployCmd`; + } + } + &clean_work_dir(); +} + +sub get_dir_config_value { + my $dirName = shift; + $logger->debug("getting dir config for $dirName"); + my $dir = &get_config_value($dirName); + unless ( -d $dir ) { + my $dir2 = &get_config_value("homeDir") . "/" . $dir ; + unless (-d $dir2 ) { + $logger->error("the dir for $dirName is not valid, tried $dir and $dir2"); + exit(1); + } + $dir = $dir2; + } + return $dir ; +} + +sub write_pid_file { + + my $pidFile = &get_config_value("homeDir") . "/pid"; + + if (-e $pidFile) { + die "pid file exists, please clean " . &get_config_value('homeDir') ; + } + + open PIDFILE, ">" . $pidFile + or die "unable to open pid file " . $pidFile ; + + print PIDFILE "$$" ; + + close PIDFILE + or die "unable to close pid file " . $pidFile ; + +} + +sub get_config_value { + + my $key = shift; + + if ($config->{$key}) { + return $config->{$key} ; + } + + $logger->info("unable to find a value for " . $key . " attempting defaults"); + + if ( $key eq "homeDir" ) { + return "/var/run/s2app_deploy_daemon"; + } + + if ( $key eq "configDir" ) { + return "/local/appservers/s2app_deploy_daemon"; + } + + if ( $key eq "deployablesDir" ) { + return "assembly-zip"; + } + + if ( $key eq "workDir" ) { + return "work"; + } + + $logger->error("unable to retrieve a value for " . $key ); + return undef; + +} + +sub clean_work_dir { + my $workDir = &get_dir_config_value("workDir"); + if (-d $workDir && $workDir ne "/" ) { + my @files ; + if ( opendir(DIRH, $workDir)) { + @files = readdir(DIRH); + closedir(DIRH); + } + else { + $logger->error("workDir failed to open"); + } + $logger->debug("cleaning out $workDir"); + foreach my $workDirObj (@files) { + if ($workDirObj eq '.' || $workDirObj eq '..') { + $logger->debug("skipping . or .."); + next; + } + if (-d "$workDir/$workDirObj") { + $logger->debug("rmtreeing $workDir/$workDirObj"); + rmtree("$workDir/$workDirObj", {'keep_root'=> 1 } ); + } + else { + $logger->debug("unlinking $workDir/$workDirObj"); + unlink("$workDir/$workDirObj"); + } + } + } +} + +sub clean_up { + + $logger->info("cleaning up"); + my $homeDir = &get_dir_config_value("homeDir"); + + # clean out the workDir + &clean_work_dir; + + # clean up .deployer- files + unlink $homeDir . "/.deployer-hup" ; + unlink $homeDir . "/.deployer-quit" ; + + # remove pid file + unlink $homeDir . "/pid" ; + +} + +sub shutdown { + + $logger->info("shutting down"); + + &clean_up; + + exit 0; + +} Propchange: struts/current/zone/s2app_deploy_daemon/s2app_deploy_daemon ------------------------------------------------------------------------------ svn:executable = * Added: struts/current/zone/startup-scripts/svc-jetty-6-1-14-java5 URL: http://svn.apache.org/viewvc/struts/current/zone/startup-scripts/svc-jetty-6-1-14-java5?rev=753010&view=auto ============================================================================== --- struts/current/zone/startup-scripts/svc-jetty-6-1-14-java5 (added) +++ struts/current/zone/startup-scripts/svc-jetty-6-1-14-java5 Thu Mar 12 20:44:50 2009 @@ -0,0 +1,37 @@ +#!/usr/bin/sh + +. /lib/svc/share/smf_include.sh + +JAVA_HOME=/usr/jdk/jdk1.5.0_17 +export JAVA_HOME +JAVA_OPTIONS="-Xms128m -Xmx768m -XX:MaxPermSize=256m" +export JAVA_OPTIONS +JETTY_HOME="/local/appservers/jetty/jetty-6.1.14" +export JETTY_HOME +JETTY_PORT="8081" +export JETTY_PORT +JETTY_RUN="/var/run/jetty-6.1.14" +export JETTY_RUN + +case $1 in +'start') + echo "starting jetty.." + /local/appservers/jetty/jetty-6.1.14/bin/jetty.sh start + ;; + +'stop') + echo "stopping jetty.." + /local/appservers/jetty/jetty-6.1.14/bin/jetty.sh stop + ;; + +'restart') + stop + sleep 25 + start + ;; + +*) + echo "Usage: $0 { start | stop | restart }" + exit 1 + ;; +esac Propchange: struts/current/zone/startup-scripts/svc-jetty-6-1-14-java5 ------------------------------------------------------------------------------ svn:executable = * Added: struts/current/zone/startup-scripts/svc-s2app_deploy_daemon URL: http://svn.apache.org/viewvc/struts/current/zone/startup-scripts/svc-s2app_deploy_daemon?rev=753010&view=auto ============================================================================== --- struts/current/zone/startup-scripts/svc-s2app_deploy_daemon (added) +++ struts/current/zone/startup-scripts/svc-s2app_deploy_daemon Thu Mar 12 20:44:50 2009 @@ -0,0 +1,26 @@ +#!/usr/bin/sh + +. /lib/svc/share/smf_include.sh + +case $1 in +'start') + echo "starting s2app_deploy_daemon.." + /local/appservers/s2app_deploy_daemon/s2app_deploy_daemon /local/appservers/s2app_deploy_daemon/config.xml + ;; + +'stop') + echo "stopping s2app_deploy_daemon.." + /usr/bin/touch /var/run/s2app_deploy_daemon/.deployer-quit + ;; + +'restart') + stop + sleep 60 + start + ;; + +*) + echo "Usage: $0 { start | stop | restart }" + exit 1 + ;; +esac Propchange: struts/current/zone/startup-scripts/svc-s2app_deploy_daemon ------------------------------------------------------------------------------ svn:executable = * Added: struts/current/zone/startup-scripts/svc-tomcat-5-5-27-java5 URL: http://svn.apache.org/viewvc/struts/current/zone/startup-scripts/svc-tomcat-5-5-27-java5?rev=753010&view=auto ============================================================================== --- struts/current/zone/startup-scripts/svc-tomcat-5-5-27-java5 (added) +++ struts/current/zone/startup-scripts/svc-tomcat-5-5-27-java5 Thu Mar 12 20:44:50 2009 @@ -0,0 +1,29 @@ +#!/usr/bin/sh + +. /lib/svc/share/smf_include.sh + +JAVA_HOME=/usr/jdk/jdk1.5.0_17 +export JAVA_HOME + +case $1 in +'start') + echo "starting tomcat.." + /local/appservers/tomcat/apache-tomcat-5.5.27/bin/startup.sh + ;; + +'stop') + echo "stopping tomcat.." + /local/appservers/tomcat/apache-tomcat-5.5.27/bin/shutdown.sh + ;; + +'restart') + stop + sleep 25 + start + ;; + +*) + echo "Usage: $0 { start | stop | restart }" + exit 1 + ;; +esac Propchange: struts/current/zone/startup-scripts/svc-tomcat-5-5-27-java5 ------------------------------------------------------------------------------ svn:executable = *