Verify you installed ServletExec using the latest installer. The latest installer is ServletExec_AS_60a.exe. If you didn't use the latest installer then un-install ServletExec, download the latest installer from the New Atlanta website and re-install ServletExec using the latest installer.
Make sure the ISAPI Extensions and ISAPI Filters features are installed. If they are not installed then IIS will never load the installed ServletExec DLL and servlet requests will result in 404 responses. These two Windows features may be enabled as follows:
- Control Panel - Programs - Programs & Features - Turn Windows features on or off
- From there navigate as follows:
+ Internet Information Services
+ World Wide Web Services
+ Application Development Features
# ISAPI Extensions
# ISAPI Filters
- Check the checkboxes to enable ISAPI Extensions and ISAPI Filters. You will then at least need to restart the IIS Admin Service, and possible even reboot Windows.
SE AS 6.0 is installed as 2 components: an adapter for IIS and a ServletExec service which uses java.
When testing ServletExec, you should use a browser running on the same machine as IIS and ServletExec to rule out any network or firewall issues.
To verify IIS is running:
- Use a browser to hit an html page in the C:\InetPub\wwwroot directory. If you place a hello.html file in this directory then you can serve it up using a browser on the same machine by entering the URL http://127.0.0.1/hello.html.
To verify the ServletExec service is running properly:
- Open the Services control panel and verify the ServletExec-<instance name> service is running. If the ServletExec service fails to start then check the Event Viewer for errors.
- Check C:\Program Files\New Atlanta\ServletExec AS\se-<instance name>\ServletExec.log for errors.
- If there are no errors and it says it is ready to process requests then it is running properly.
- If it contains a java.net.SocketException then some other process might be listening on the port that ServletExec is trying to use. You can determine the port ServletExec is trying to use by finding the line that sets "sePort" in StartServletExec.bat. The default value is port 8888. You can tell if a process is already listening on port 8888 by invoking the command "netstat -a -o -b" and looking for an entry that has a Local Address of 0.0.0.0:8888 and a state of LISTENING. The PID column will give the process ID of the process that is listening on the port and the next line will give the name of the process. If ServletExec is listening on the port then the process name will be [java.exe] since ServletExec is a java application.
- If the ServletExec service is not running then there may be a permissions problem. By default the ServletExec service runs under the Local System account. Trying having it run under an administrator account to see if that solves the problem. This can be done by right-clicking on the ServletExec service in the services control panel and selecting Properties. Select the Log On tab and then select this account setting it to an administrator account and password. Select Apply and OK. You'll need to restart the ServletExec service after making this change.
- If the ServletExec service failed to start and a ServletExec.log file wasn't generated then check the Java VM being used by ServletExec by following these steps:
- Edit StartServletExec.bat to see what jvmHome is being set to. It should be set to something like this "C:\Program Files\Java\jdk1.6.0_14".
- From a command prompt, enter the following command with the double quotes: "<jvmHome value>\bin\java" -version.
- If the Java VM is installed properly then you should see output like the following: java version "1.6.0_14".
- If the Java VM is not installed properly then edit StartServletExec.bat and StopServletExec.bat to point to a properly installed Java VM. If one isn't installed then you'll need to download and install it.
- If your Java VM looks good and the ServletExec service still fails without generating a ServletExec.log file then follow these steps:
- From a command prompt, invoke the StartServletExec.bat file.
- If you receive the following error message then most likely your Java VM is corrupt and you'll need to uninstall and reinstall it: "Exception in thread "main" java.lang.NoClassDefFoundError: ServletExec, Could not find the main class: ServletExec. Program will exit." If you reinstall the Java VM to a different location then you'll need to edit the StartServletExec.bat and StopServletExec.bat files to point to the new location for the Java VM.
- For all other error messages, send them to email@example.com and we'll try to help you figure out what is going wrong.
- If all of the previous steps passed then the final step in verifying the ServletExec service is to try to telnet to the service using the following steps:
- Open a command prompt window.
- Type 'telnet 127.0.0.1 8888' and enter. NOTE: replace 8888 with the port ServletExec is using if it isn't using port 8888.
- If the window goes blank and you see a blinking cursor at the top of the window then the ServletExec service is running properly. Hit enter twice to break the connection to ServletExec.
- If you see "Connecting To 127.0.0.1...Could not open connection to the host, on port 8888: Connect failed" then either the ServletExec service isn't running or a firewall is preventing connections to the port ServletExec is using.
To verify the IIS adapter is installed properly:
- Verify ServletExec_Adapter.dll was installed to C:\InetPub\Scripts. If your version of Windows is 32-bit then the size of this DLL should be 296KB. If your version of Windows is 64-bit then the size of the DLL should be 485KB.
- If you are on a 64-bit machine then verify the Application Pool is set to run in 64-bit mode (the default). On Advanced Settings page, the "Enable 32-bit Applications" setting should be set to false for the 64-bit DLL.
- Verify in IIS that a Scripts virtual directory exists under the web site you are trying to hit and it maps to C:\InetPub\Scripts. Check its properties to make sure the Feature Permissions are set to Read, Script and Execute. You can check this in inetmgr by selecting the Scripts virtual directory and then double-clicking on "Handler Mappings". If ISAPI-dll is disabled then right-click on it and select "Edit Feature Permissions". Select "Execute" and click on OK.
- Verify ServletExec is listed as allowed on the ISAPI and CGI Restrictions page and the path to ServletExec_Adapter.dll is correct. You can check this in inetmgr by selecting the server and then double-clicking on "ISAPI and CGI Restrictions".
- Verify ServletExec_Adapter.dll is properly configured as an ISAPI filter. This is done by:
- Selecting the "Default Web Site" in inetmgr and double-clicking on "ISAPI Filters". Verify ServletExec appears as a filter.
- In C:\Windows\System32\inetsrv\config\applicationHost.config look for <isapiFilters>. ServletExec should appear as <filter name="ServletExec" path="C:\InetPub\Scripts\ServletExec_Adapter.dll" enableCache="true" />.
- If C:\InetPub\wwwroot\web.config exists then look in it for <isapiFilters>. Make sure there isn't a <clear /> element or something similar that would cause the ServletExec filter to be disabled.
- Verify the following file exists: C:\Program Files\New Atlanta\ServletExec AS\config\webadapter.properties.
- If all of these look correct and the problem still occurs then check the Event Viewer for errors.
- You can also check for adapter error messages by using DBMON if you are logged in locally to the server or DebugView if you are logged in remotely using remote desktop. In order to use DebugView you'll need to download and install it from http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx. Here are the steps:
- Double-click on DBMON.EXE which can be found in the ServletExec installation directory or launch DebugView by right-clicking on it and selecting "Run as administrator". If you are using DebugView then you'll need to set Capture\Capture Global Win32 from the DebugView menus. Note that DBMON and DebugView should not be running at the same time.
- Restart the IIS Admin Service from the Services Control Panel.
- From a browser, enter the URL http://127.0.0.1/servlet/TestServlet.
- If the adapter was loaded properly then you will see messages like the following:
1932: The ServletExec-ISAPI Adapter for ServletExec 6.0 is initializing...
1932: About to read C:\Program Files\New Atlanta\ServletExec AS\config\webadapter.properties...
1932: Done reading C:\Program Files\New Atlanta\ServletExec AS\config\webadapter.properties.
1932: The ServletExec-ISAPI Adapter for ServletExec 6.0 has initialized.