costin      02/03/18 09:53:27

  Modified:    jk/native2/include jk_env.h
  Log:
  Major change in jk component registration and config.
  
  jk_bean_t is a common structure used by all jk components for registration
  and configuration. The model is similar with beans ( or mbeans ) - the
  properties are pushed using setters. Because it's C, we use a single
  setAttribute() method instead of one setter for each configurable thing.
  
  Metadata can be added either using a 'magic' property ( getAttribute("properties" )),
  or externally, either in config or in a java proxy. ( that's for much later )
  
  Revision  Changes    Path
  1.7       +69 -32    jakarta-tomcat-connectors/jk/native2/include/jk_env.h
  
  Index: jk_env.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/include/jk_env.h,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- jk_env.h  21 Feb 2002 11:15:04 -0000      1.6
  +++ jk_env.h  18 Mar 2002 17:53:27 -0000      1.7
  @@ -68,6 +68,9 @@
   #include "jk_map.h"
   #include "jk_worker.h"
   
  +#define JK_LINE __FILE__,__LINE__
  +
  +
   /** 
    *  Common environment for all jk functions. Provide uniform
    *  access to pools, logging, factories and other 'system' services.
  @@ -84,28 +87,23 @@
   struct jk_env;
   struct jk_logger;
   struct jk_map;
  +struct jk_bean;
  +typedef struct jk_bean jk_bean_t;
   typedef struct jk_env jk_env_t;
   
   /**
    * Factory used to create all jk objects. Factories are registered with 
  - * jk2_env_registerFactory ( or automatically - LATER ), and created
  - * with jk2_env_getFactory.
  - * 
  - * Essentially, an abstract base class (or factory class) with a single
  - * method -- think of it as createWorker() or the Factory Method Design
  - * Pattern.  There is a different worker_factory function for each of the
  - * different types of workers.  The set of all these functions is created
  - * at startup from the list in jk_worker_list.h, and then the correct one
  - * is chosen in jk_worker.c->wc_create_worker().  See jk_worker.c and
  - * jk_ajp13_worker.c/jk_ajp14_worker.c for examples.
  + * jk2_env_registerFactory. The 'core' components are registered in
  + * jk_registry.c
    *
  - * This allows new workers to be written without modifing the plugin code
  - * for the various web servers (since the only link is through
  - * jk_worker_list.h).  
  + * Each jk component must be configurable using the setAttribute methods
  + * in jk_bean. The factory is responsible to set up the config methods.
  + *
  + * The mechanism provide modularity and manageability to jk.
    */
   typedef int (JK_METHOD *jk_env_objectFactory_t)(jk_env_t *env,
                                                   struct jk_pool *pool,
  -                                                void **result, 
  +                                                struct jk_bean *mbean, 
                                                   const char *type,
                                                   const char *name);
   
  @@ -114,8 +112,6 @@
    */
   jk_env_t* JK_METHOD jk2_env_getEnv( char *id, struct jk_pool *pool );
   
  -#define JK_LINE __FILE__,__LINE__
  -
   struct jk_exception {
       char *file;
       int line;
  @@ -128,6 +124,46 @@
   
   typedef struct jk_exception jk_exception_t;
   
  +
  +/** Each jk object will use this mechanism for configuration
  + *  XXX Should it be named mbean ?
  + */
  +struct jk_bean {
  +    /* Type of this object
  +     */
  +    const char *type;
  +    /* Name of the object
  +     */
  +    const char *name;
  +
  +    /* The wrapped object
  +     */
  +    void *object;
  +
  +    /** Set a jk property. This is similar with the mechanism
  +     *  used by java side ( with individual setters for
  +     *  various properties ), except we use a single method
  +     *  and a big switch
  +     *
  +     *  As in java beans, setting a property may have side effects
  +     *  like changing the log level or reading a secondary
  +     *  properties file.
  +     *
  +     *  Changing a property at runtime will also be supported for
  +     *  some properties.
  +     *  XXX Document supported properties as part of
  +     *  workers.properties doc.
  +     *  XXX Implement run-time change in the status/ctl workers.
  +     */
  +    int (*setAttribute)(struct jk_env *env, struct jk_bean *bean,
  +                         char *name, void *value );
  +
  +    void *(*getAttribute)(struct jk_env *env, struct jk_bean *bean, char *name );
  +
  +    /* getBeanInfo() */
  +
  +    /* invoke() */
  +};
       
   /**
    *  The env will be used in a similar way with the JniEnv, to provide 
  @@ -146,7 +182,8 @@
       */
       struct jk_pool *localPool;
   
  -    /* Exceptions
  +    /* Exceptions.
  +     *  XXX Not implemented/not used
        */
       void (JK_METHOD *jkThrow)( jk_env_t *env,
                                  const char *file, int line,
  @@ -155,37 +192,36 @@
   
       /** re-throw the exception and record the current pos.
        *  in the stack trace
  +     *  XXX Not implemented/not used
        */
       void (JK_METHOD *jkReThrow)( jk_env_t *env,
                                    const char *file, int line );
   
       /* Last exception that occured
  +     *  XXX Not implemented/not used
        */
       struct jk_exception *(JK_METHOD *jkException)( jk_env_t *env );
   
       /** Clear the exception state
  +     *  XXX Not implemented/not used
        */
       void (JK_METHOD *jkClearException)( jk_env_t *env );
       
  -    
  -    /** Global properties ( similar with System properties in java)
  -     */
  -    /*   jk_map_t *properties; */
  -    /** Factory to create an instance of a particular type.
  -     * 
  -     */
  -    jk_env_objectFactory_t 
  -    (JK_METHOD *getFactory)( jk_env_t *env, const char *type,
  -                             const char *name );
  -
       /** Create an object instance. It'll first get the factory, then
           call it. This is a very frequent operation.
       */
       void *
  -    (JK_METHOD *getInstance)( jk_env_t *env, struct jk_pool *pool,
  -                              const char *type,
  -                              const char *name );
  +    (JK_METHOD *createInstance)( jk_env_t *env, struct jk_pool *pool,
  +                                 const char *type, const char *name );
  +
  +    void *
  +    (JK_METHOD *getByName)( jk_env_t *env, const char *name );
   
  +    /** Return the configuration object
  +     */
  +    struct jk_bean *
  +    (JK_METHOD *getMBean)( jk_env_t *env, const char *name );
  +    
       /** Report an error. 
        *   TODO: create a 'stack trace' (i.e. a stack of errors )
        *   TODO: set 'error state'
  @@ -199,7 +235,6 @@
       /** Register a factory for a type ( channel, worker ).
        */
       void (JK_METHOD *registerFactory)( jk_env_t *env, const char *type,
  -                                       const char *name, 
                                          jk_env_objectFactory_t factory);
       
       
  @@ -213,7 +248,9 @@
       
       /* private */
       struct jk_map *_registry;
  +    struct jk_map *_objects;
       struct jk_exception *lastException;
  +    int id;
   };
   
   void JK_METHOD jk2_registry_init(jk_env_t *env);
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to