com.jniwrapper.win32.ie
Class IsolatedProcess

java.lang.Object
  extended by com.jniwrapper.win32.ie.IsolatedProcess

public final class IsolatedProcess
extends java.lang.Object

This class allows to run in-proc COM server in isolated process. In spite of performance penalties (each COM call require marshaling), this allows to avoid JVM corruption in case of some problems inside COM.

Note:This class is not a part of public ComfyJ API yet, it is for internal usage only. Do not use it.


Method Summary
 void addWindowContainer(com.jniwrapper.win32.ui.Wnd wnd)
           
 void carefulUnloadDllOnExit(java.lang.String libName)
          Try to catch all errors during Dll unload.
 com.jniwrapper.win32.com.IUnknown createComObject(com.jniwrapper.win32.com.types.CLSID id)
          Create COM object in isolated process.
 void getAndDispatchNextMessage()
           
 java.util.Set<Cookie> getCookies(java.net.URL url)
           
 long getCurrentThreadId()
           
 boolean getFailSilentlyFlag()
          Get "Fail silently" flag.
 boolean getKillSelfAtExitFlag()
          Get "Kill Self At Exit" flag.
 java.lang.String[] getLoadedModules()
          Returns all loaded modules
 long httpOpenRequest(long hInternet, java.lang.String lpszVerb, java.lang.String lpszObjectName, java.lang.String lpszVersion, java.lang.String lpszReferrer, java.lang.String[] lplpszAcceptTypes, long dwFlags, long dwContext)
           
 void httpSendRequest(long hInternet, java.lang.String headers, byte[] optional)
           
 void installMessageFilter(boolean install)
           
 void internetCloseHandle(long hInternet)
           
 long internetConnect(long hInternet, java.lang.String lpszServerName, int nServerPort, java.lang.String lpszUsername, java.lang.String lpszPassword, long dwService, long dwFlags, long dwContext)
           
 long internetOpen(java.lang.String userAgent, long accessType, java.lang.String proxyName, java.lang.String proxyByPass, long flag)
           
 long internetQueryDWORDOption(long hInternet, long option)
           
 java.lang.Object[] internetQueryPerConnectionOptions(long hInternet, java.lang.String pszConnection, long[] arrOptionCodes)
           
 void internetSetDWORDOption(long hInternet, long option, long value)
           
 long internetSetPerConnectionOptions(long hInternet, java.lang.String pszConnection, long[] arrOptionCodes, java.lang.Object[] arrOptionValues)
           
 int[] oleDraw(com.jniwrapper.win32.com.impl.IUnknownImpl pDocument, com.jniwrapper.Int32 hwnd, com.jniwrapper.win32.Rect windowBounds, com.jniwrapper.win32.Size bitmapSize)
           
 void registerAdditionalMarshalledInterface(com.jniwrapper.win32.com.types.IID id, java.lang.String typelibPath)
          Register additional interface to be marshalled between isolated process and JVM process.
 long registerMessageHook(int msgMin, int msgMax, com.jniwrapper.win32.MessageLoopListener listener)
          Register message hook for remote process.
 long registerTranslateAcceleratorCallback(int msgMin, int msgMax, com.jniwrapper.win32.com.IUnknown obj)
          Register callback interface that will be called to process accelerators.
 long registerWindowProcedure(com.jniwrapper.win32.MessageLoopListener listener)
           
 void revokeMessageHook(long cookie)
          Revoke message hook
 void revokeTranslateAcceleratorCallback(long cookie)
          Revoke callback interface that was called to process accelerators.
 void setCookies(java.net.URL url, java.util.Set<Cookie> cookies)
           
 void setFailSilentlyFlag(boolean failSilently)
          Set "Fail silently" flag.
 void setKillSelfAtExitFlag(boolean killSelfAtExit)
          Set "Kill Self At Exit" flag.
static IsolatedProcess start()
          Start new isolated process (starts new process, can take some time)
static IsolatedProcess start(java.lang.Runnable processStopedAction)
          Start new isolated process (starts new process, can take some time)
 void stop()
          Stop the isolated process.
 void stop(boolean forceStop)
          Stops the isolated process with the specified flag.
 void unregisterWindowProcedure(long cookie)
           
 void updateBounds(com.jniwrapper.win32.ui.Wnd wnd, java.awt.Rectangle bounds)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

start

public static IsolatedProcess start()
Start new isolated process (starts new process, can take some time)

Returns:
started IsolatedProcess instance

start

public static IsolatedProcess start(java.lang.Runnable processStopedAction)
Start new isolated process (starts new process, can take some time)

Parameters:
processStopedAction - action to be called when the process stops
Returns:
started IsolatedProcess instance

createComObject

public com.jniwrapper.win32.com.IUnknown createComObject(com.jniwrapper.win32.com.types.CLSID id)
Create COM object in isolated process.

Parameters:
id - CLSID of COM object
Returns:
Resulting COM object

registerAdditionalMarshalledInterface

public void registerAdditionalMarshalledInterface(com.jniwrapper.win32.com.types.IID id,
                                                  java.lang.String typelibPath)
                                           throws com.jniwrapper.win32.com.ComException
Register additional interface to be marshalled between isolated process and JVM process. Single call will register marshaller for this interface in both processes

Parameters:
id - interface id
typelibPath - path to type library (can be in .TLB, .OLB or .DLL file)
Throws:
com.jniwrapper.win32.com.ComException - exception from COM side

stop

public void stop()
Stop the isolated process. Should be called after all COM objects were released. The analogue of the stop(true) invoke.

See Also:
stop(boolean)

stop

public void stop(boolean forceStop)
Stops the isolated process with the specified flag.

Parameters:
forceStop - the stop flag. It should be true when the process must be stopped immediately, otherwise false

registerTranslateAcceleratorCallback

public long registerTranslateAcceleratorCallback(int msgMin,
                                                 int msgMax,
                                                 com.jniwrapper.win32.com.IUnknown obj)
Register callback interface that will be called to process accelerators.

Parameters:
msgMin - mimal Windows message to be processed by hook
msgMax - maximum Windows message to be processed by hook
obj - object to call. Should support IOleInPlaceActiveObject interface
Returns:
cookie to be passed to revokeTranslateAcceleratorCallback

revokeTranslateAcceleratorCallback

public void revokeTranslateAcceleratorCallback(long cookie)
Revoke callback interface that was called to process accelerators.

Parameters:
cookie - cookie obtained from registerTranslateAcceleratorCallback

installMessageFilter

public void installMessageFilter(boolean install)

updateBounds

public void updateBounds(com.jniwrapper.win32.ui.Wnd wnd,
                         java.awt.Rectangle bounds)

getCookies

public java.util.Set<Cookie> getCookies(java.net.URL url)

setCookies

public void setCookies(java.net.URL url,
                       java.util.Set<Cookie> cookies)

getAndDispatchNextMessage

public void getAndDispatchNextMessage()

getCurrentThreadId

public long getCurrentThreadId()

registerMessageHook

public long registerMessageHook(int msgMin,
                                int msgMax,
                                com.jniwrapper.win32.MessageLoopListener listener)
Register message hook for remote process.

Parameters:
msgMin - minimal Windows message to be processed by hook
msgMax - maximum Windows message to be processed by hook
listener - message listener
Returns:
cookie to be passed to

revokeMessageHook

public void revokeMessageHook(long cookie)
Revoke message hook

Parameters:
cookie - cookie value, returned by IsolatedProcess.registerMessageHook

registerWindowProcedure

public long registerWindowProcedure(com.jniwrapper.win32.MessageLoopListener listener)

unregisterWindowProcedure

public void unregisterWindowProcedure(long cookie)

getFailSilentlyFlag

public boolean getFailSilentlyFlag()
Get "Fail silently" flag. If this flag is set to true, IsolatedProcess will attempt to catch all SEH exceptions from hosted components and stop immediately. This should allow to get rid of JIT debugger window appearing.

Returns:
"Fail silently" flag

setFailSilentlyFlag

public void setFailSilentlyFlag(boolean failSilently)
Set "Fail silently" flag. If this flag is set to true, IsolatedProcess will attempt to catch all SEH exceptions from hosted components and stop immediately. This should allow to get rid of JIT debugger window appearing.

Parameters:
failSilently - New flag value

getKillSelfAtExitFlag

public boolean getKillSelfAtExitFlag()
Get "Kill Self At Exit" flag. This flag means application will kill self just after message loop ends. Allows to workaround problem with Adove Reader plugin which fails when Dll unloads

Returns:
"Kill Self At Exit" flag

setKillSelfAtExitFlag

public void setKillSelfAtExitFlag(boolean killSelfAtExit)
Set "Kill Self At Exit" flag. This flag means application will kill self just after message loop ends. Allows to workaround problem with Adove Reader plugin which fails when Dll unloads

Parameters:
killSelfAtExit - new flag value

getLoadedModules

public java.lang.String[] getLoadedModules()
Returns all loaded modules

Returns:
array of pathes to all loaded Dlls

oleDraw

public int[] oleDraw(com.jniwrapper.win32.com.impl.IUnknownImpl pDocument,
                     com.jniwrapper.Int32 hwnd,
                     com.jniwrapper.win32.Rect windowBounds,
                     com.jniwrapper.win32.Size bitmapSize)

internetOpen

public long internetOpen(java.lang.String userAgent,
                         long accessType,
                         java.lang.String proxyName,
                         java.lang.String proxyByPass,
                         long flag)

internetQueryDWORDOption

public long internetQueryDWORDOption(long hInternet,
                                     long option)

internetSetDWORDOption

public void internetSetDWORDOption(long hInternet,
                                   long option,
                                   long value)

internetQueryPerConnectionOptions

public java.lang.Object[] internetQueryPerConnectionOptions(long hInternet,
                                                            java.lang.String pszConnection,
                                                            long[] arrOptionCodes)

internetSetPerConnectionOptions

public long internetSetPerConnectionOptions(long hInternet,
                                            java.lang.String pszConnection,
                                            long[] arrOptionCodes,
                                            java.lang.Object[] arrOptionValues)

internetConnect

public long internetConnect(long hInternet,
                            java.lang.String lpszServerName,
                            int nServerPort,
                            java.lang.String lpszUsername,
                            java.lang.String lpszPassword,
                            long dwService,
                            long dwFlags,
                            long dwContext)

httpOpenRequest

public long httpOpenRequest(long hInternet,
                            java.lang.String lpszVerb,
                            java.lang.String lpszObjectName,
                            java.lang.String lpszVersion,
                            java.lang.String lpszReferrer,
                            java.lang.String[] lplpszAcceptTypes,
                            long dwFlags,
                            long dwContext)

httpSendRequest

public void httpSendRequest(long hInternet,
                            java.lang.String headers,
                            byte[] optional)

internetCloseHandle

public void internetCloseHandle(long hInternet)

carefulUnloadDllOnExit

public void carefulUnloadDllOnExit(java.lang.String libName)
Try to catch all errors during Dll unload.

Parameters:
libName - Dll name, bib.dll for example

addWindowContainer

public void addWindowContainer(com.jniwrapper.win32.ui.Wnd wnd)