|  | <html> | 
|  |  | 
|  | <head> | 
|  | <meta http-equiv="Content-Language" content="en-us"> | 
|  | <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> | 
|  | <link rel="stylesheet" href="http://www.eclipse.org/default_style.css" type="text/css"> | 
|  | <title>Server Tools API Changes</title> | 
|  | <style> | 
|  | td { font-family: arial, helvetica, geneva; font-size: 9pt; vertical-align: top; } | 
|  | td.code { font-family: "Courier New", Courier, mono; font-size: 7.75pt} | 
|  | </style> | 
|  | </head> | 
|  |  | 
|  | <body alink="#ff0000" bgcolor="#ffffff" link="#0000ee" text="#000000" vlink="#551a8b"> | 
|  |  | 
|  | <table border="0" cellpadding="2" cellspacing="5" width="100%"> | 
|  | <tbody><tr> | 
|  | <TD WIDTH=60%> | 
|  | <P ALIGN=LEFT><B><FONT SIZE=6><FONT FACE="Verdana, Arial, Helvetica, sans-serif">Server Tools API Changes</FONT></FONT></B><BR> | 
|  | <FONT SIZE=1><FONT FACE="Arial, Helvetica, sans-serif"><FONT COLOR="#8080ff">Information on Server Tools API Changes</FONT></FONT></FONT> | 
|  | </P> | 
|  | </TD> | 
|  | <td rowspan="2" width="19%"><img src="http://www.eclipse.org/images/Idea.jpg" border="0" height="86" width="120"></td> | 
|  | </tr> | 
|  | </tbody></table> | 
|  |  | 
|  |  | 
|  | <table border="0" cellpadding="2" cellspacing="5" width="100%"> | 
|  | <tbody><tr> | 
|  | <td colspan="2" align="left" bgcolor="#0080c0" valign="top"><b><font color="#ffffff" face="Arial,Helvetica">M1 Changes</font></b></td> | 
|  | </tr></tbody> | 
|  | </table> | 
|  |  | 
|  | This document contains information on the Server Tools API changes that have gone | 
|  | into M1. | 
|  |  | 
|  | <p/> | 
|  |  | 
|  | <table border=1 cellspacing="0"> | 
|  | <tr> | 
|  | <th>Change</th> | 
|  | <th>Reason</th> | 
|  | <th>Old Code</th> | 
|  | <th>New Code</th> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>Package renames:<br/> | 
|  | com.ibm.wtp.server.core -> org.eclipse.wst.server.core<br/> | 
|  | com.ibm.wtp.server.ui -> org.eclipse.wst.server.ui<br/> | 
|  | com.ibm.wtp.server.util -> org.eclipse.wst.server.util<br/> | 
|  | com.ibm.wtp.server.java.core -> org.eclipse.jst.server.core<br/> | 
|  | com.ibm.wtp.server.java.ui -> org.eclipse.jst.server.ui<br/> | 
|  | com.ibm.wtp.server.tomcat.core -> org.eclipse.jst.server.tomcat.core<br/> | 
|  | com.ibm.wtp.server.tomcat.ui -> org.eclipse.jst.server.tomcat.ui<br/> | 
|  | com.ibm.wtp.monitor.core -> org.eclipse.wst.monitor.core<br/> | 
|  | com.ibm.wtp.monitor.ui -> org.eclipse.wst.monitor.ui<br/> | 
|  | com.ibm.wtp.webbrowser -> org.eclipse.wst.webbrowser</td> | 
|  | <td>Renaming for open source</td> | 
|  | <td></td> | 
|  | <td></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td></td> | 
|  | <td></td> | 
|  | <td></td> | 
|  | <td></td> | 
|  | </tr> | 
|  | </table> | 
|  |  | 
|  |  | 
|  | <table border="0" cellpadding="2" cellspacing="5" width="100%"> | 
|  | <tbody><tr> | 
|  | <td colspan="2" align="left" bgcolor="#0080c0" valign="top"><b><font color="#ffffff" face="Arial,Helvetica">M2 Changes</font></b></td> | 
|  | </tr></tbody> | 
|  | </table> | 
|  |  | 
|  | This document contains information on the Server Tools API changes that have gone into M2. | 
|  |  | 
|  | <p/> | 
|  |  | 
|  | <table border=1 cellspacing="0"> | 
|  | <tr> | 
|  | <th>Change</th> | 
|  | <th>Reason</th> | 
|  | <th>Old Code</th> | 
|  | <th>New Code</th> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>All java.util.Lists returned from methods have been changed to arrays of the corresponding | 
|  | content type.</td> | 
|  | <td>Stronger typed return values are safer, and returning a copy of the list (instead of the list | 
|  | itself) blocks against clients modifying internal data structures.</td> | 
|  | <td class="code">List list = ServerCore.getRuntimeTypes();</td> | 
|  | <td class="code">IRuntimeType[] rt = ServerCore.getRuntimeTypes();</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IResourceManager has been removed. Most of it's methods have been moved to the ServerCore | 
|  | class, with the remaining ones in ServerUtil.</td> | 
|  | <td>There was no client benefit of the resource manager, and it was misnamed.</td> | 
|  | <td class="code">ServerCore.getResourceManager().getServers();</td> | 
|  | <td class="code">ServerCore.getServers();</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>All extension point interfaces have been changed to abstract classes, and the "I" removed | 
|  | from the name.</td> | 
|  | <td>Allows for future support and maintenance without breaking existing interfaces.</td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>Several interfaces were moved from the .core.model package to .core.</td> | 
|  | <td>The .core.model package was meant for SPIs, not API. All API classes & interfaces will | 
|  | be moved or remain in .core so that API users do not need to use the .core.model package.</td> | 
|  | <td class="code">import org.eclipse.wst.server.code.model.IModule;</td> | 
|  | <td class="code">import org.eclipse.wst.server.code.IModule;</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IServerResourceListener renamed to IServerLifecycleListener. Several methods moved out to | 
|  | new IRuntimeListener and IServerConfigurationListener interfaces.</td> | 
|  | <td>"Resource" had to be removed from the name, and the interface contained methods for | 
|  | runtimes and server configurations as well. They are split up so that API users do not | 
|  | need to listen for all types of changes from a single interface.</td> | 
|  | <td class="code">ServerCore.getResourceManager().addServerResourceListener(myListener);</td> | 
|  | <td class="code">ServerCore.addRuntimeLifecycleListener(myListener);</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>Publishing interfaces completely rewritten & .core.resources package removed.</td> | 
|  | <td>The publishing interface was outdated and written before the Eclipse team support, | 
|  | ANT, or other recent publishing methods had been developed. The new API allows for | 
|  | better support and for each server type to use it's own publishing mechanism.</td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IRuntimeDelegate and IRuntimeWorkingCopyDelegate merged into a single RuntimeDelegate. | 
|  | IServerDelegate and IServerWorkingCopyDelegate reworked into | 
|  | ServerDelegate and ServerBehaviourDelegate.</td> | 
|  | <td>Making clients provide two separate classes for the delegates was excessive, | 
|  | unnecessary, and ended up with too many SPI classes. Only a single delegate class is | 
|  | now required for these extension points.</td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IRuntime.getDelegate(), IRuntime.getWorkingCopyDelegate() changed into IRuntime extending | 
|  | IAdaptable. Similar for IServer and other delegates</td> | 
|  | <td>IAdaptable is a common Eclipse mechanism, and allows for other extension as well. Clients | 
|  | should still remember that calling this method may involve plugin loading, so it should | 
|  | not be used in popup menus, etc.</td> | 
|  | <td class="code">ITomcatRuntime tr = (ITomcatRuntime) runtime.getDelegate();</td> | 
|  | <td class="code">ITomcatRuntime tr = (ITomcatRuntime) runtime.getAdapter(ITomcatRuntime.class);</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IModuleType and IModuleKind interfaces merged.</td> | 
|  | <td>IModuleKind was created late in the previous release cycle and couldn't be merged at the | 
|  | time it was created.</td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IServerTask changed and IModuleTask removed.</td> | 
|  | <td>The existing interfaces had an ITask directly returned as a delegate, and only allowed a | 
|  | single task per extension point. The new IServerTask allows the delegate to return multiple | 
|  | tasks from a single extension point, and it is not itself a task.</td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IServerConfiguration, IServerConfiguration, etc. removed</td> | 
|  | <td>The server config was a relic and did not need to be a first class resource. ServerDelegates | 
|  | are now directly responsible for maintaining the configuration.</td> | 
|  | <td class="code"></td> | 
|  | <td class="code">see Tomcat implementation</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>Various minor cleanup - methods renamed, parameters changed, etc.</td> | 
|  | <td>Cleanup and future maintenance.</td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IModuleObjectAdapter -> IModuleArtifactAdapter, IModuleObject -> IModuleArtifact</td> | 
|  | <td>Object was too generic and didn't have any real meaning. Artifact represents what the | 
|  | IModuleObject really represents - resources within a module</td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>getServerType(String id) -> findServerType(String id)</td> | 
|  | <td>Lookup methods on ServerCore and ServerUtil renamed to be more accurate to what | 
|  | they do.</td> | 
|  | <td class="code">IServerType st = getServerType("com.x")</td> | 
|  | <td class="code">IServerType st = findServerType("com.x")</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>Lots of methods & interfaces moved to internal packages</td> | 
|  | <td>Need to trim down the exposed API to only what is required for ongoing maintenance. If | 
|  | there is anything in an internal package that you were previously using, or plan to use | 
|  | in the future, please contact me and we'll work out an API solution</td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>Publishing changes - several interfaces and the org.eclipse.wst.server.core.resource | 
|  | package removed</td> | 
|  | <td>The old publishing mechanism did not allow flexibility in publishing options (e.g. | 
|  | ANT, Eclipse team support, or some other mechanism) and used an outdated publishing | 
|  | manager framework.</td> | 
|  | <td class="code"></td> | 
|  | <td class="code">ServerDelegate.publishStart(); // Called to tell the server that publishing is starting. | 
|  | Can be used to connect to a remote server, etc.<br/> | 
|  | ServerDelegate.publishStart(); // Called once to allow the server to publish any "global" | 
|  | resources or a server config<br/> | 
|  | ServerDelegate.publishStart(); // Called for each module to give the server a chance | 
|  | to publish using any method it wants<br/> | 
|  | ServerDelegate.publishFinish(); // Called to disconnect from the server or cleanup</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>IMonitorableServer merged with IServer</td> | 
|  | <td>No need for </td> | 
|  | <td class="code">IServerDelegate delegate = server.getDelegate()<br/> | 
|  | if (delegate instanceof IMonitorableServer) {<br/> | 
|  | IMonitorableServer ms = (IMonitorableServer) delegate;<br/> | 
|  | List ports = ms.getServerPorts();<br/> | 
|  | }</td> | 
|  | <td class="code">IServerPort[] ports = server.getServerPorts();</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>Working copy changes</td> | 
|  | <td>Previously, references were kept to every working copy, and clients had to save() or | 
|  | release() them in finally blocks or else the reference would be dangling (and possibly | 
|  | blocking other changes) forever. This code was unsafe and caused problems if a client | 
|  | tried to use a working copy after it had been saved or released. | 
|  | Now, clients can create a working copy at any time, and references are not kept. On | 
|  | save, a client can specify whether the working copy changes should be forced, or not | 
|  | (in which case the save will fail if someone else has made changes to the object in | 
|  | the meantime). If the changes do not need to be saved, clients can just drop the | 
|  | reference to the working copy at any time. As before, working copies should not be | 
|  | used for long periods of time since it increases the chances that another client has | 
|  | made changes</td> | 
|  | <td class="code">IServerWorkingCopy wc = IServer.getWorkingCopy();<br/> | 
|  | // do something with wc<br/> | 
|  | wc.save(); or wc.release();</td> | 
|  | <td class="code">IServerWorkingCopy wc = IServer.createWorkingCopy();<br/> | 
|  | // do something with wc<br/> | 
|  | wc.save(); or lose reference</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td>Change IServer.isRestartNeeded() to match other methods</td> | 
|  | <td></td> | 
|  | <td class="code">IServer.isRestartNeeded();</td> | 
|  | <td class="code">IServer.getServerRestartState();</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td></td> | 
|  | <td></td> | 
|  | <td class="code"></td> | 
|  | <td class="code"></td> | 
|  | </tr> | 
|  | </table> | 
|  |  | 
|  | </body> | 
|  | </html> |