hammant 02/04/03 19:54:41 Modified: altrmi PROPOSAL Removed: altrmi LICENSE README.txt build.xml memleak.xml tests.xml tests2.xml altrmi/src/conf MANIFEST-client-impl.MF MANIFEST-client-interfaces.MF MANIFEST-common.MF MANIFEST-generator.MF MANIFEST-server-impl.MF MANIFEST-server-interfaces.MF altrmi/src/java/org/apache/commons/altrmi/client AltrmiClientInvocationHandler.java AltrmiConnectionListener.java AltrmiConnectionPinger.java AltrmiFactory.java AltrmiHostContext.java AltrmiInterfaceLookup.java AltrmiInterfaceLookupFactory.java AltrmiProxy.java altrmi/src/java/org/apache/commons/altrmi/client/impl AbstractAltrmiFactory.java AbstractClientInvocationHandler.java AbstractConnectionPinger.java AbstractFactoryHelper.java AbstractHostContext.java AbstractInterfaceLookupFactory.java BaseServedObject.java ClientClassAltrmiFactory.java DefaultConnectionListener.java DefaultConnectionPinger.java DefaultInterfaceLookupFactory.java PerpetualConnectionPinger.java ServerClassAltrmiFactory.java TransportedClassLoader.java altrmi/src/java/org/apache/commons/altrmi/client/impl/beep BEEPHostContext.java BEEPInvocationHandler.java altrmi/src/java/org/apache/commons/altrmi/client/impl/direct AbstractDirectInvocationHandler.java DirectHostContext.java DirectInvocationHandler.java DirectMarshalledHostContext.java DirectMarshalledInvocationHandler.java altrmi/src/java/org/apache/commons/altrmi/client/impl/multiple AbstractMultipleHostContext.java AbstractMultipleInvocationHandler.java RotatingMultipleHostContext.java RotatingMultipleInvocationHandler.java altrmi/src/java/org/apache/commons/altrmi/client/impl/naming DefaultAltrmiContext.java DefaultAltrmiInitialContextFactory.java altrmi/src/java/org/apache/commons/altrmi/client/impl/piped AbstractPipedStreamInvocationHandler.java PipedCustomStreamInvocationHandler.java PipedObjectStreamHostContext.java PipedObjectStreamInvocationHandler.java altrmi/src/java/org/apache/commons/altrmi/client/impl/rmi RmiFactoryHelper.java RmiHostContext.java RmiInvocationHandler.java altrmi/src/java/org/apache/commons/altrmi/client/impl/socket AbstractSocketStreamInvocationHandler.java SocketCustomStreamFactoryHelper.java SocketCustomStreamHostContext.java SocketCustomStreamInvocationHandler.java SocketObjectStreamFactoryHelper.java SocketObjectStreamHostContext.java SocketObjectStreamInvocationHandler.java altrmi/src/java/org/apache/commons/altrmi/client/impl/stream ClientCustomStreamReadWriter.java ClientObjectStreamReadWriter.java ClientStreamReadWriter.java StreamInvocationHandler.java altrmi/src/java/org/apache/commons/altrmi/common AbstractMethodHandler.java AltrmiAuthentication.java AltrmiAuthenticationException.java AltrmiConnectionClosedException.java AltrmiConnectionException.java AltrmiInvocationException.java AltrmiInvocationHandler.java AltrmiMarshalledInvocationHandler.java AltrmiReply.java AltrmiRequest.java ClassLoaderObjectInputStream.java ClassReply.java ClassRequest.java ClassRetrievalFailedReply.java EndConnectionReply.java ExceptionReply.java FacadeRefHolder.java GarbageCollectionReply.java GarbageCollectionRequest.java KeyAuthentication.java ListReply.java ListRequest.java LookupReply.java LookupRequest.java MethodFacadeArrayReply.java MethodFacadeReply.java MethodFacadeRequest.java MethodReply.java MethodRequest.java NoSuchReferenceException.java NoSuchReferenceReply.java NotPublishedException.java NotPublishedReply.java OpenConnectionReply.java OpenConnectionRequest.java PingReply.java PingRequest.java ProxyGenerationException.java ProxyGenerator.java PublishedNameRequest.java RequestFailedReply.java RmiAltrmiInvocationHandler.java SerializationHelper.java Sessionable.java SuspendedReply.java TryLaterReply.java UserPasswordAuthentication.java altrmi/src/java/org/apache/commons/altrmi/generator ProxyGeneratorImpl.java altrmi/src/java/org/apache/commons/altrmi/generator/ant AltrmiProxyTask.java altrmi/src/java/org/apache/commons/altrmi/javacompiler JavaCompiler.java SunJavaCompiler.java altrmi/src/java/org/apache/commons/altrmi/server AltrmiAuthenticator.java AltrmiProxyGenerator.java AltrmiPublisher.java AltrmiServer.java AltrmiServerConnection.java AltrmiServerException.java ClassRetrievalException.java ClassRetriever.java MethodInvocationHandler.java ProxyGenerationEnvironmentException.java PublicationDescription.java PublicationException.java altrmi/src/java/org/apache/commons/altrmi/server/impl AbstractServer.java AltrmiSession.java DefaultAuthenticator.java DefaultMethodInvocationHandler.java ServerCustomStreamReadWriter.java ServerObjectStreamReadWriter.java ServerStreamReadWriter.java StreamServerConnection.java altrmi/src/java/org/apache/commons/altrmi/server/impl/adapters InvocationHandlerAdapter.java MarshalledInvocationHandlerAdapter.java PublicationAdapter.java altrmi/src/java/org/apache/commons/altrmi/server/impl/beep AltrmiBEEPServerProfile.java BEEPServerConnection.java CompleteBEEPServer.java ServerBEEPReadWriter.java altrmi/src/java/org/apache/commons/altrmi/server/impl/classretrievers AbstractClassRetriever.java DynamicGeneratorClassRetriever.java JarFileClassRetriever.java NoClassRetriever.java PlainClassRetriever.java altrmi/src/java/org/apache/commons/altrmi/server/impl/direct DirectMarshalledServer.java DirectServer.java altrmi/src/java/org/apache/commons/altrmi/server/impl/piped AbstractPipedServer.java PipedObjectStreamServer.java PipedStreamServerConnection.java altrmi/src/java/org/apache/commons/altrmi/server/impl/rmi RmiInovcationAdapter.java RmiServer.java altrmi/src/java/org/apache/commons/altrmi/server/impl/socket AbstractCompleteSocketStreamServer.java CompleteSocketCustomStreamServer.java CompleteSocketObjectStreamServer.java PartialSocketCustomStreamServer.java PartialSocketObjectStreamServer.java SocketStreamServerConnection.java altrmi/src/java/org/apache/commons/altrmi/test BeepClientTest.java BeepServerTest.java CodedProxyTest.java DirectMarshalledTest.java DirectTest.java DynamicProxy.java DynamicProxyTest.java MemoryLeak.java MemoryLeakClientTest.java MemoryLeakImpl.java MemoryLeakServerTest.java PipeTest.java ProConClientTest.java ProConServerTest.java RmiClientTest.java RmiServerTest.java SocketClientTest.java SocketClientTestJNDI.java SocketServerTest.java TestClient.java TestConsumer.java TestConsumerImpl.java TestInterface.java TestInterface2.java TestInterface2Impl.java TestInterfaceImpl.java TestObject.java TestProvider.java TestProviderImpl.java UnProxyTest.java Log: Remove files not needed after major package refactor Revision Changes Path 1.17 +5 -191 jakarta-commons-sandbox/altrmi/PROPOSAL Index: PROPOSAL =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/PROPOSAL,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- PROPOSAL 26 Mar 2002 11:24:05 -0000 1.16 +++ PROPOSAL 4 Apr 2002 03:54:39 -0000 1.17 @@ -1,194 +1,8 @@ --------------------------------------------------------------------------- - JAKARTA COMMONS - ALTERNATIVE (TO) REMOTE METHOD INVOCATION - "AltRMI" --------------------------------------------------------------------------- -Abstract: +AltRMI has moved to Avalon-Excalibur -The AltRMI package provides an alternative to Java's RMI. Apart from simply -being an alternative it provides the following features: +See -1) Any interface publishing - - - Any object via the interfaces it publishes, can be published remotely. - - No transport lock-in : - - No forcing of extension of java.rmi.Remote - - No forced declarations of "throws java.rmi.RemoteException" - - * These two features are part of the reason why Graham Glass's 'Glue' - product is so successful. His API goes several stages futher in that - it pubishes APIs via SOAP so that any language in any location can - use Glue published Java services. - -2) Multiple transports - - - Plain Sockets / ObjectStream - - via RMI - - Piped with same VM / ObjectStream - - Direct within same VM - - Plain sockets / custom message streaming - - JNDI Done. - - SOAP (planned) - - Might require additional undynamic "toWSDL()" step. - - CORBA (planned) - - Might require additional undynamic "toIDL()" step. - - JMS (planned) - - UDP (planned) - -3) Speed - - - Counting the number of 'void testSpeed()' invocations in 10 seconds, - we can guage the differences (my Athlon900 machine) - - Speed Test type Count Relative - ------------------------------- ------- -------- - - AltRMI types over TCP/IP - ------------------------ - - For remote publication - - a) ObjectStream over sockets #2 2702 1.00 - b) Over RMI 4359 1.61 - c) CustomStream over sockets 6069 2.25 - d) ObjectStream over sockets #1 10088 3.73 - - AltRMI types in the same VM - --------------------------- - - These are useful for complete classloader separation - of interface & impl using different classloaders. Impl - and 'remote' proxy do not need to see the same - interfaces etc.. - - e) ObjectStream over Pipe #2 12095 4.48 - f) Direct Marshalled #3 20759 7.68 - g) ObjectStream over Pipe #1 61166 22.64 - h) Direct Unmarshalled # 2391498 885.08 - - #1 Without calling reset() as workaround to the ObjectStream bug - #2 With calling reset() as workaround to the ObjectStream bug - #3 Completely separates classloaders of client and server. Requires - a thread for each though. - #4 Good as DynamicProxy for separation. Does not separate classloaders - of client and server. - - Non AltRMI types - ---------------- - - In VM, without using AltRMI - for comparison. - - The inteface, impl and proxy cannot be separated in terms of - branches of classloader for these three. The same interfaces - etc must be visible to both impl and proxy. - - i) DyanmicProxy #5 - (copied from Excalibur) 20282070 7506.32 - j) Hand-coded proxy #5 41214422 15253.30 - k) No Proxy #5 42384804 15686.46 - - #4 - For all of these three, the actual timing may slow down the test. - -4) Interface/Impl separated design. - - - AltRMI can be build easily into any application or application framework. - Individual aspects can be reimplemented (or overridden) as the need - arises. - -5) Choice of location of generated Proxy class. - - - Classes providing client side implementation of the transported - interface(s) can be either on the client side or the server side (and - duly transported) at time of lookup. On the server side, the proxy classes - cal be generated in advance (Ant Task) or at runtime - javac is invoked. - -6) Choice of castability of generated proxy class. - - - To suit remote facilities that are happy with refection and do - not need to cast to an interface to use a bean (I am thinking of - BeanShell) the proxy class can be generated without specifying - that it implements the interface(s). - -7) Suspendable/Resumable service. - - - The Server supports suspend() and resume(). With the current impl this - replies in a timely fashion to the client that the client should try - later. The client waits for the notified amount of time and seamlessly - trys the requets again. A server could cycle through suspended and back - to resumed will not affect the client except for the a delay. - -8) Recovering transport - - - AltRMI tries to recover its transports should they fail. The recovery - is pluggable in that the developer can choose when/how/if the connection - handler tries to recover the connection. Any inprogress, but - disconnected method invocation will attempt to be recoved and just return - as normal, albeit after a longer than normal delay. - -9) Event API - - - For suspensions, abnormal ends of connection etc, there is a listener - that can be set that will allow actions to be taken. Abnormally - terminated connections will by default try to be reconnected, the - listener can decide if, how many, and how often the retries occur. - -10) Pluggable Transport indenpendant keep-alive concept. - - - On the client side, there is an API for a pluggable pinger. While the server - may support timeouts for client connections, the client could choose to - overcome that default policy with a ping concept. - -11) Unpublishable and republishable API - - - The server is able to unpublish a service. In conjuction with - suspend()/resume() a service can be republished, upgraded etc - whilst in use, or just offlined. - -12) Startable API for Server - - - The server implements and acts upon start() and stop() methods. - -13) Not just pass by value. - - - AltRMI started life as 'pass by value' only. In now supports return - types and parameters wrapped in another AltRMI Facade. - -14) No duplicate instances. - - - For Facades, if you call Person p = getPerson("Fred") twice you will get - the same instance on the client side is it is the same instance on the - server side. - -15) Load balancing server grouping - - - In some configurations, the client side can have multiple servers it - will forward calls to. - -Limitations: - -1) Use in EJB - - - This is not of any use for EJB Home/Remote interfaces. The container - maker chooses the transport for use that container, not the bean coder. - This is intended for other client server solutions. Beside RMI over IIOP - is Sun specified. - -Todo: - -1) Other transports - - - SOAP, CORBA (with WDSL & IDL generation steps) - - Other RMI (over IIOP, over HTTP) - - JMS - -2) BCEL (or other) for generated proxy class - - - The current impl writes java source then compiles it. We could do this - inline with BCEL. This as an heavier, but more design perfect - alternative to the current server side impl. - - - BCEL is really difficult to use if you are not skilled in it!! - - -3) Client and Server code for secure conversations. - - -Initial developers: - -Paul Hammant ([EMAIL PROTECTED]) -Vinaysahil Chandran (not a committer yet) +http://cvs.apache.org/viewcvs/jakarta-avalon-excalibur/altrmi/ (root) +http://cvs.apache.org/viewcvs/jakarta-avalon-excalibur/altrmi/src/xdocs/ (docs) +http://jakarta.apache.org/avalon/excalibur/altrmi (waiting for opportunity to fire docs at website)
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>