US00759.6791 B2
(12) United States Patent (10) Patent No.: US 7,596,791 B2 Wei et al. (45) Date of Patent: Sep. 29, 2009
(54) METHODS AND TECHNIQUES FOR (56) References Cited DELIVERING RICHUAVAAPPLICATIONS U.S. PATENT DOCUMENTS OVER THIN-WIRE CONNECTIONS WITH 6,064,382 A * 5/2000 Diedrich et al...... 71.5/7OO HIGH PERFORMANCE AND SCALABILITY 6,446,109 B2 * 9/2002 Gupta ...... TO9,203 6,615,131 B1* 9/2003 Rennard et al...... 701 (200 (75) Inventors: Coach K. Wei, Boston, MA (US); Zakir 6,901,554 B1* 5/2005 Bahrs et al...... 715,526 Magdum, Shrewsburry, MA (US) 6,968,503 B1 * 1 1/2005 Chang et al...... 71.5/2O2 7,404,177 B1 * 7/2008 Greenfield et al...... 717/106 (73) Assignee: EMC Corporation, Hopkinton, MA OTHER PUBLICATIONS (US) Ken Nordby, “What are Enterprise JavaBeans components? Part 1: The history and goals of EJB architecture.” Jun. 22, 2000, pp. 1-8.* (*) Notice: Subject to any disclaimer, the term of this patent is extended or adjusted under 35 * cited by examiner U.S.C. 154(b) by 911 days. Primary Examiner Li B Zhen (74) Attorney, Agent, or Firm Krishnendu Gupta; Joseph (21) Appl. No.: 10/017,183 D'Angelo (22) Filed: Dec. 7, 2001 (57) ABSTRACT A method for delivering applications over a network where (65) Prior Publication Data the application's logic runs on the backend server and the US 2003/O2OO254A1 Oct. 23, 2003 applications user interface is rendered on a client-device, according to its display capabilities, thought a network con Related U.S. Application Data nection with the backend server. The application's GUI API and event processing API are implemented to be network (60) Provisional application No. 60/256,594, filed on Dec. aware, transmitting application's presentation layer informa 19, 2000. tion, event processing registries, and other related informa tion a between client and server. The transmission is a high, (51) Int. Cl. object level format, which minimizes network traffic. Client G06F 9/44 (2006.01) side events are transmitted to the server for processing via a G06F 9/54 (2006.01) predetermined protocol, the server treating Such events and (52) U.S. Cl...... 71.9/316; 709/203; 709/219; inputs as if locally generated. The appropriate response to the 71.5/234 input is generated and transmitted to the client device using (58) Field of Classification Search ...... 709/203, the format to refresh the GUI on the client. 709/219; 715/513, 234; 719/316 See application file for complete search history. 20 Claims, 20 Drawing Sheets
1 OO 110 Y Y 12O Y
ireless
114 : 122
1 O2 104 Platforms E Active - X Windows Netscape Plugin, Windows CE \App Player { (
127 U.S. Patent Sep. 29, 2009 Sheet 1 of 20 US 7,596,791 B2
00|| U.S. Patent Sep. 29, 2009 Sheet 2 of 20 US 7,596,791 B2
ZZ!
55]
98||
O - - Cld C. -- U.S. Patent Sep. 29, 2009 Sheet 3 of 20 US 7,596,791 B2
98||
08||
U.S. Patent Sep. 29, 2009 Sheet 5 of 20 US 7,596,791 B2
008
U.S. Patent Sep. 29, 2009 Sheet 6 of 20 US 7,596,791 B2
4OO Y Interface java.awt. Layoutlvanage iava.awt. LaVOutManader2 java.awt. Grid Layout java.awt. FlowLayout java.awt. GridBag Layout java.aWt.BOXLayout java.awt. CardLayout javaX.SWing.ViewportLayout javaX.SWing. ScrollPanelayout jaVax.SWing. OverlayLayout
FIG. 6 U.S. Patent US 7,596,791 B2
(5G)(warjeviheewienuaeaer
U.S. Patent Sep. 29, 2009 Sheet 8 of 20 US 7,596,791 B2
5OO
504 Validati U Components C alidation 502 omponents U. 506 508 m--- Components wm-r Events Display Manader Manager 9
Ul Server Interface 510
U Cache Manager 512
Security Manager 514 Communication Layer(HTTP/HTTPS/Sockets) 516.
FIG. 8 U.S. Patent Sep. 29, 2009 Sheet 9 of 20 US 7,596,791 B2
600 Y
Container Controls Controls
FIG. 9 U.S. Patent Sep. 29, 2009 Sheet 10 of 20 US 7,596,791 B2
2OO 220 Y Y Package ComnexaWeb.core(Nexel Core Classes) layout Managers - Interface.javaawtlayOutManager Javax servlet.httpservlet. HttpServlet avaawt.Layouthanaqer2
COm.nexaWeb.Core. Nexel java.awtGridLayOut - COm.nexaWeb.COreAppManager java.awt.patro FlowLayOut H java.awtGridBaglayOut ComnexaWeb.core. Application remo --- jaVaawt.BOXLayOut
com.nexaweb.core. EventManager H javaawtCardLayoutacada | com.nexaweb.core.JVMManager jaVax. Swing ViewportLayout com.nexaWeb.core. ConnectionManager - javaXSwingScrollPanelayOut com.nexaWeb.core...PerformanceManager javaXSwing OverlayLayout
240 Y 26O Package Com.nexaWeb.net Additional Classes
com.nexaweb.net.NetEngine java.awt. Graphics COm.nexaWeb.net. NexelServerSOcket javaawt. Graphics2D COm.nexaWeb.net. SOcketHandler javaawtprint PrinterJob com.nexaWeb.net ClientNetEngine java.awt Toolkit COmnexaWeb.coreServerNetEngine COmnexaWeb.Validation com.nexaWeb.net.NexelServletRequest COmnexaWeb.net. NexelServletResponse Additional Drag&Drop support classes FIG 10 U.S. Patent Sep. 29, 2009 Sheet 11 of 20 US 7,596,791 B2
CEBasicArrowbutton
Package Com.nexaWeb.plafice CEButton 28O CEMentaComboBoxButton
CECheckBoxMenultem H CEMenultemV. CEjMenu
com.nexaWeb.plaf CEComponently - CEAbSractutton CERadioButtonMe?ultem CEToggleButtonul
com.nexawebplaf.CEContaineru H CEColorChooseru CECheckBoxU - CEComboBoxU CERadioButton
| - CEFile:ChooserU CEBasicComboBoxRenderer
--- CEinemaframe -- CEDefaultistCeRendereru
com.nexaWeb.plaf.CEBOxUl - CEDesktoplconV - CEDefaultlableCellRenderer --- CELabellji CEDefault TreeCeLRendererJ
h CELayeredPanell -- CEJDesktopPanely - CEComponentu H------CEListU
--- CEMenubaru - CEOptionPareul
- CEPanelVI (for awt. Panel) H CEPanelVI (JPanel) - CEAbstractColorCh00serPanel - CEPopupMenull CEBasicComboPopupy
CEAppletUI (for JApplet) - CEProgressBarul CFAbstractBorderU CER00Panel
CEWindow.JI (for - CEScrollBar -- CEBevelEOrderU CESoftBevelborderU awtWindow) CESCOPanell - CECompoundBorderUl CEWindowu (for CESeparatorul --- CEEmptyBorderUI JWindow) - CESliderUl - CEElechedEOrderU - CESplitPaneul CELineBorderU CEDialogul (for - CETabbedpanel - CEatteBorderU awt.Dialog) - - CFTable - CETitledBorderU CEDialog(for JDialog) CETableHeaderU -- H CETextComponentUl CEEditorpanej |- CETextPanel CFToolBar
- CEFrameU CFTextArea - CEToolTipUI ------CEDefaultextFieldV CETextField -----, ... -- CETreeV - CEPasswordField CEFrameU (for JFrame) CEViewportU
FIG 11 U.S. Patent Sep. 29, 2009 Sheet 12 of 20 US 7,596,791 B2
Package Com.nexaWeb.plaf.pC 290 - PCButtonu -- PCBasicATOWButton Y - - - PCMentalComboBoxButton
PCCheckBoxMenultern - PCMenultenU H PCJMenulu com.nexaweb, plaf PCComponently PCAbstractButton PCRadioButtonMenultemV PCToggleButtonulT - com.nexaweb.plaf.PCContaineru PCColorChooserU PCCheckBoxU PCComboBoxul - PCRadioButton - PCFileChooserU -PCBasicComboBoxRendererJ k H- PCInternaframeUI PCDefaultListCellRenderer
com.nexaWeb.plaf.PCBoxUl PCDesktoplconut PCDefaultTableCellRendererJ - - - - PCLabel PCDefaulTreeCe RendererJI PCLayeredPanell - PCJDesktopPaneu)
- PCComponentul ------PCistU
- PCMenubaru PCOption Paneu PCPanelul (for awt. Panel) PCPanelVI (JPanel) PCAbsractColorChooserPanel J
-- - - PCPopupMenului PCBasicCombopopulptul PCAppletUl(for JApplet) PCProgressBarty PCR00tPanel J
- PCWindowul (for -- PCScrollBarul -- PCBeweBorder PCSoftBevelEOrderU awt Window) PCScrollPanel J - PCCompoundBorderUl - PCWindowul (for --- PCSeparatorul - PCEmptyborderUI - - - JWindow) - PCSliderU - PCEtechedEOrderU PCSplitPaneui PCineBorderU - PCDialogul (for PCTabbedpanely - PCatteorderUl awt.Dialog) titled PCTableU PCitedBorderU PCDialog for JDialog) -- PCTableHeaderUI PCTextComponentul r PCEditorpanel PCTextPane PCToolBaru - PCFrameUI PCTextArea.J. --- PCToolTipUl PCDefaultTextField
- - - PCTextField PCTreeJ PCPasswordField H PCFrameUI (for JFrame) PCViewportU.
FIG. 12 U.S. Patent Sep. 29, 2009 Sheet 13 of 20 US 7,596,791 B2
710
Class connexawebserverconnectionManager,
package com.nexaweb, server, importava.lang. import.java.lang.reflect. importava.uti. importava.k.a. importava,text. importava...awtevent.": importava...awt'; importavax, servlet, importavax.seryet http." public static Object getConnection() { Thread thathread.currentThread(); public class HttpManager Sting names null; protected static Hashtable threadListenew Hashtable(); ifthsh. instanceof AppServiceThread)icehead { in this case, the connection is stored into HttpManager in a parent thread public HttpManager) retum) ', and the retrieving happens in a child thread AppServiceThread ath=(AppServiceThread)th, public synchronized static void putString trame, ServietResponse httpResponse) name rathgetParentThreadlame(); { System.out.printin(this is an AppServiceThread: parentlame="+name); threadList puttname,httpResponse), } else names-thgetiname(); System.out.printin("Tring to get connection by thread names' name); public syndhronized static void remove(String tiname) ObjectoorgetConnection(name); IObject po-roo; System.out.printin("Removing entry for "ttname): forcinitieotrue:) (break threadlist.removetname): f(poss-null) break System.out.printin("Class is: "+pogetClass) getName()+"wn); pospo.getClass-getSuperclass(); public synchronized static void remove() } (Threadth=Thread,curren(Thread(), Sting name thigetName(); threadistremove(name): ty System.out.printin("HttpManagerget connection: shootoo.dasss-toogetClassO.getName()); private static Object getConnection(String tiname) { catch(Exceptionee) System.out.printin("Exception in HTTPManager"tee)} systern cutprintin("Get connection:threadList'-threadust", name=tname); return oo Object orthread Ust.get(tnarie): system.out.printin("Get connection:thread uste' threadList",connection"o). feturno:
FIG. 13 U.S. Patent Sep. 29, 2009 Sheet 14 of 20 US 7,596,791 B2
720
Class commexaWeb server. Nexel
import java.io.; importava text: import.java.util." importavax.seryet." importavax.servlet.http. importcom.nexaweb, server.' far System.out.println("Requests"+request.toString()); religitation sever eventid="+eid+"appid."+appid+"ctiid="tdd);System.out.printin(Do postGet et response.setContentifype("text/html"); public class Nexel extends HttpServiat ( outprintinahtml>"), public void doGet(httpServletRequest request, outpinnsbodybgcolor-Yightblue">"): HttpServletResponse response) outprintin(
"); throws IOException, Servetexception outprintln("xtitle> Nexel Application Deliver Platform). HApp Launching Formate http:llhostname:port/ if(ekd=null&&eid.length()>1&&appid=null&&appid.length() 0) { servetname?appName=app&users-user1; dispatchEvent(request, response,appidcided); String appName=request getParameter(appName"); return; Sting users requestigetParameter"user); } flApp Messaging Format http://hostname:port if (appName is null&& user = null) { Servietname?appid-Fappid&ctitid=cid&key=key&eventid-eid&evparam=param out.printin("Application="appName); String eid-requestigetParameter(eventid"); out.printin("users-user): String appid=requestigetParameter"appid"); launchApp(request, response, appName, user); String cid=request.getParameter(ctrlid); System.out.println("Serviet } elselout.printin(rb-getString("requestparams, ( no-params)), Path="+request.getServietPath()+"servername="trequestigetRemoteAddr()+ } port="trequestigetServerPort0+"pathlnfo="+request getPathlnfo()+"URI="+re questigetRequestURIC)+"path translated="+request getPathTranslated());
FIG. 14 U.S. Patent Sep. 29, 2009 Sheet 15 of 20 US 7,596,791 B2
730
class com.nexawebserver.Nexel protected void launchApp(HttpServietRequest request, httpServletResponse response, Sting applane,
outprintin(-P-h1>Nexel Application Delivery P