0 Comments
0
Webspeed setup on Tomcat
by Riverside Software
The latest versions of OpenEdge allow simple serialization of temp-tables and prodatasets to JSON, and in this context, Webspeed may become more and more popular as it can serve the JSON result directly, without having to rely on Java/ASP/Whatever.As I'm mainly working with Java, I always have a servlet container ready to run. But the Progress documentation doesn't mention Tomcat as a deployment plaftorm ; here is this guide !
Step 1 : Download Tomcat
This guide is for Tomcat 6, but any other version should work. So grab Tomcat from http://tomcat.apache.org/download-60.cgi and install it (for the Windows installer version) or extract it (for the standalone ZIP file).
In this documentation, $CATALINA_HOME will represent the installation path.
Step 2 : create a new webapp
Create a new directory in $CATALINA_HOME/webapps. This directory has to called webspeed followed by the version number, i.e. if you're running OpenEdge 11.0, the directory will be $CATALINA_HOME/webapps/webspeed110.
In this documentation, $WEBAPP will represent this directory
In this directory, create a subdirectory WEB-INF (case-sensitive).
Step 3 : copy static files
Copy the content of $DLC/webspeed to $WEBAPP, then copy $DLC/bin/cgiip.exe to $WEBAPP/WEB-INF/cgi (create a subdirectory for it).
Step 4 : create web.xml
The file web.xml is the webapp description file :
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>WEB-INF/cgi</param-value> </init-param> <init-param> <param-name>executable</param-name> <param-value></param-value> </init-param> <init-param> <param-name>passShellEnvironment</param-name> <param-value>true</param-value> </init-param> <load-on-startup>4</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi/*</url-pattern> </servlet-mapping> </web-app>
Step 5 : privileged application
Create an XML file in $CATALINA_HOME/conf/Catalina/localhost, with the same name as the webapp directory : if you created in step 2 a directory called webspeed110, then create webspeed110.xml.The content of this file is :
<Context privileged="true" />
Step 6 : configure your webspeed broker
This is OpenEdge configuration, and it won't be covered here...Step 7 : play !
Start Tomcat, and go to http://localhost:8080/webspeed110/cgi/cgiip.exe/WService=wsbroker1/workshopThis URL assumes that you're running with the default Webspeed broker wsbroker1.
Bonus step 1 : URL rewriting
Using URL like /webspeed110/cgi/cgiip.exe/WService=wsbroker1/programName can be dangerous, as it gives users the knowledge that CGI is being used and active, allows anybody to change the broker name, and so on...
A Tomcat filter is already available to rewrite URL, available here.
To setup this filter, you'll need to create a new directory $WEBAPP/WEB-INF/lib and drop this JAR file.
Update your web.xml file to declare this filter :
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> <init-param> <param-name>confReloadCheckInterval</param-name> <param-value>0</param-value> </init-param> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
Then create a file urlrewrite.xml in $WEBAPP/WEB-INF, with this content :
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "http://tuckey.org/res/dtds/urlrewrite3.2.dtd"> <urlrewrite> <rule> <from>/cgiip/(.*)</from> <to>/cgi/cgiip.exe/WService=wsbroker1/$1</to> </rule> <!-- default rules included with urlrewrite --> <rule> <note> The rule means that requests to /test/status/ will be redirected to /rewrite-status the url will be rewritten. </note> <from>/test/status/</from> <to type="redirect">%{context-path}/rewrite-status</to> </rule> <outbound-rule> <note> The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url) the url /rewrite-status will be rewritten to /test/status/. The above rule and this outbound-rule means that end users should never see the url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks in your pages. </note> <from>/rewrite-status</from> <to>/test/status/</to> </outbound-rule> </urlrewrite>
Restart Tomcat, and then you'll be able to access the workshop at http://localhost:8080/webspeed110/cgiip/workshop
Bonus step 2 : cgi.bat (and a reminder for myself)
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>WEB-INF/cgi</param-value> </init-param> <init-param> <param-name>executable</param-name> <param-value>c:\windows\system32\cmd.exe</param-value> </init-param> <init-param> <param-name>executable-arg-1</param-name> <param-value>/c</param-value> </init-param> <init-param> <param-name>passShellEnvironment</param-name> <param-value>true</param-value> </init-param> <load-on-startup>4</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi/*</url-pattern> </servlet-mapping> </web-app>
With cgi.bat like that :
@echo off set DLC=C:\Progress\OPENED~1.5 set PROMSGS=%DLC%\promsgs set WRKDIR=%TEMP% REM 3055 is default port of wsbroker1 %DLC%\bin\cgiip.exe localhost 3055