Discussions

News: Smart Client Container v 1.1 Has Been Released

  1. The Smart Client Container (SmartCC) is an extended J2EE compliant container for application clients, released under LGPL. A J2EE Application can be seen as a directed, mostly non cyclic graph of components. Some of the components reside on the server, others on the client. The edges between these components are ejb-refs and ejb-local refs. The SmartCC introduces a concept named Smart References. A Smart Reference extends a conventional ejb-ref with transport independence (RMI/HTTP/SOAP) and aspects like retrying, reconnecting, caching, tracing, profiling, etc. Even invocation bundeling,asynchronous invocation, invocation recording and replaying are possible.

    Unfortunately not all imaginable interceptors are implemented as yet, thus I need your help ;-)

    SmartCC is available for free at http://smartcc.sourceforge.net.
  2. UGHH ! I have been planning to write my own stuff to get this kind of features so i am very anxious to see smartcc.

    Unfortully I could not acess any SourceForge project since yesterday. Anybody knows whats happening ?

    Thanks
  3. JBoss already has a client interceptor stack implementation in JBoss 3.0 (this is how clustering works). It works automatically when you lookup a bean in JNDI, you get an entire serialized client interceptor stack.

    I'm sure Holger is aware of this, as I see him regularly on the JBoss list.
  4. " JBoss already has a client interceptor stack implementation in JBoss 3.0 (this is how clustering works). It works automatically when you lookup a bean in JNDI, you get an entire serialized client interceptor stack.
    "

    Your point being ...?
  5. Well, yes. My first idea was, to integrate this into jboss directly. Actually I started writing a deployer for application-clients. Unfortunately I didn't have the time to continue this. The ultimate basis for a client container would be the jboss core. However the configuration of the smartcc and jboss work different. In jboss it's the component, that is provided with the interceptor configuration. In the smartcc you configure the edges between the components: a component is deployed once and can be accessed through several "smart references" with different connection-properties.

    Holger
  6. Hello,

    I am particularly interested in the caching. But I could not find any information about it...
    Where could I find some detailed description?

    Thanks
  7. As of now, a caching interceptor is not implemented. But it's very easy to implement custom interceptors. Have a look at org.smartcc.TracingInterceptor, to get an idea, what an interceptor looks like.

    Holger
  8. If I get it right, you mean that you can cache the result of the individual method calls. So if you would call a getName() method on a Person object you could cache the String that represents the name.

    But I was thinking more along the lines of the value design pattern. Where you could do some modifications to an object, and then send all the modifications to the server at the same time. But I think that this Proxy mechanism can only commit every change separately.

    You would have to write the saving logic separately (with a Command pattern, or just a simple Session method).

    Or am I missing something?
  9. I personally prefer invocation bundeling to the value design pattern. Use an interceptor to bundle a bunch of invocations into a single remote call:

    try {
       ((Bundle)p).begin();
       p.setFirstName("foo");
       p.setLastName("bar");
       ...
       ((Bundle)p).end();
    }
    catch (TransactionRolledBackException e) { ... }

    this should be feasible for all invocations with a return type of void. However, this would require the smartcc to be extended a little bit:

    1. There needs to be a server side interceptor (not supported now), that unbundles the invocations and invokes them in one user transaction.

    Should be very easy .. just an issue of configuration.

    2. There neeeds to be a mechanism, that allows to provide arbitrary interfaces (Bundle) for the dynamic proxy.

    Also just an issue of configuration.


    If you implement it, i'll include it in the next release!

    Holger