costin      02/03/24 19:35:11

  Modified:    jk/native2/common jk_config.c jk_env.c
  Log:
  Moved the create method, use the more acurate method to extract the object
  type.
  
  Revision  Changes    Path
  1.6       +6 -54     jakarta-tomcat-connectors/jk/native2/common/jk_config.c
  
  Index: jk_config.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_config.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- jk_config.c       24 Mar 2002 19:24:26 -0000      1.5
  +++ jk_config.c       25 Mar 2002 03:35:11 -0000      1.6
  @@ -58,7 +58,7 @@
   /***************************************************************************
    * Description: General purpose config object                                 *
    * Author:      Gal Shachor <[EMAIL PROTECTED]>                           *
  - * Version:     $Revision: 1.5 $                                           *
  + * Version:     $Revision: 1.6 $                                           *
    ***************************************************************************/
   
   #include "jk_global.h"
  @@ -229,58 +229,6 @@
       return JK_TRUE;
   }
   
  -/** Create a jk component using the name prefix
  - */
  -static jk_bean_t *jk2_config_createInstance( jk_env_t *env, jk_config_t *cfg,
  -                                             char *objName )
  -{
  -    jk_pool_t *workerPool;
  -    jk_bean_t *w=NULL;
  -    int i;
  -    char *type=NULL;
  -        
  -    /** New object. Create it using the prefix
  -     */
  -    for( i=0; i< env->_registry->size( env, env->_registry ) ; i++ ) {
  -        char *factName=env->_registry->nameAt( env, env->_registry, i );
  -        int len=strlen(factName );
  -        
  -        if( (strncmp( objName, factName, len) == 0) &&
  -            ( (objName[len] == '.') ||
  -              (objName[len] == ':') ||
  -              (objName[len] == '_') ||
  -              (objName[len] == '\0') )  ) {
  -            /* We found the factory. */
  -            type=factName;
  -            /*             env->l->jkLog(env, env->l, JK_LOG_INFO, */
  -            /*                               "Found %s  %s %s %d %d\n", type, 
objName, */
  -            /*                           factName, len, strncmp( objName, factName, 
len)); */
  -            break;
  -        }
  -    }
  -    if( type==NULL ) {
  -        env->l->jkLog(env, env->l, JK_LOG_ERROR,
  -                      "config.createInstance(): Can't find type for %s \n", 
objName);
  -        return NULL;
  -    } 
  -    
  -    workerPool=cfg->pool->create(env, cfg->pool, HUGE_POOL_SIZE);
  -    
  -    env->l->jkLog(env, env->l, JK_LOG_INFO,
  -                  "config.createInstance(): Create [%s] %s\n", type, objName);
  -    env->createInstance( env, workerPool, type, objName );
  -    w=env->getMBean( env, objName );
  -    if( w==NULL ) {
  -        env->l->jkLog(env, env->l, JK_LOG_ERROR,
  -                      "config.createInstance(): Error creating  [%s] %s\n", 
objName, type);
  -        return NULL;
  -    }
  -    if( w->settings == NULL )
  -        jk2_map_default_create(env, &w->settings, cfg->pool);
  -
  -    return w;
  -}
  -
   
   /** Set a property on a bean. Call this when you know the bean.
       The name and values will be saved in the config tables.
  @@ -350,14 +298,18 @@
       
       mbean=env->getMBean( env, objName );
       if( mbean==NULL ) {
  -        mbean=jk2_config_createInstance( env, cfg, objName );
  +        mbean=env->createBean( env, cfg->pool, objName );
       }
  +
       if( mbean == NULL ) {
           /* Can't create it, save the value in our map */
           jk2_config_setProperty( env, cfg, cfg->mbean, name, value );
           return JK_FALSE;
       }
   
  +    if( mbean->settings == NULL )
  +        jk2_map_default_create(env, &mbean->settings, cfg->pool);
  +    
       return jk2_config_setProperty( env, cfg, mbean, propName, value );
   }
   
  
  
  
  1.15      +71 -3     jakarta-tomcat-connectors/jk/native2/common/jk_env.c
  
  Index: jk_env.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_env.c,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- jk_env.c  24 Mar 2002 19:24:26 -0000      1.14
  +++ jk_env.c  25 Mar 2002 03:35:11 -0000      1.15
  @@ -102,11 +102,74 @@
     return (jk_env_objectFactory_t)env->_registry->get( env, env->_registry, type);
   }
   
  +/** Create a jk component, using only the name.
  + *  Now things are simpler - the 'type' is the prefix, separated by ':' - no
  + *  guessing involved.
  + */
  +static jk_bean_t *jk2_env_createBean( jk_env_t *env, jk_pool_t *pool, char *objName 
)
  +{
  +    jk_bean_t *w=NULL;
  +    int i;
  +    char *type=NULL;
  +    void *obj;
  +    char *localName;
  +
  +    localName=strchr( objName, ':' );
  +    if( localName==NULL ) {
  +        type=objName;
  +    } else {
  +        /* Funny pointer arithmetic. I hope I got it right */
  +        type=pool->calloc( env, pool, localName - objName + 2 );
  +        strncpy( type, objName, localName - objName );
  +    }
  +    
  +/*     for( i=0; i< env->_registry->size( env, env->_registry ) ; i++ ) { */
  +/*         char *factName=env->_registry->nameAt( env, env->_registry, i ); */
  +/*         int len=strlen(factName ); */
  +        
  +/*         if( (strncmp( objName, factName, len) == 0) && */
  +/*             ( (objName[len] == '.') || */
  +/*               (objName[len] == ':') || */
  +/*               (objName[len] == '_') || */
  +/*               (objName[len] == '\0') )  ) { */
  +            /* We found the factory. */
  +/*             type=factName; */
  +            /*             env->l->jkLog(env, env->l, JK_LOG_INFO, */
  +            /*                               "Found %s  %s %s %d %d\n", type, 
objName, */
  +            /*                           factName, len, strncmp( objName, factName, 
len)); */
  +/*             break; */
  +/*         } */
  +/*     } */
  +/*     if( type==NULL ) { */
  +/*         env->l->jkLog(env, env->l, JK_LOG_ERROR, */
  +/*                       "env.createBean(): Can't find type for %s \n", objName); */
  +/*         return NULL; */
  +/*     }  */
  +    
  +    env->l->jkLog(env, env->l, JK_LOG_INFO,
  +                  "env.createBean(): Create [%s] %s\n", type, objName);
  +
  +    obj=env->createInstance( env, pool, type, objName );
  +
  +    /* This is a bit twisted, createInstance should be replaced with a method
  +       returning jk_bean
  +     */
  +    w=env->getMBean( env, objName );
  +    if( (obj==NULL) || (w==NULL) ) {
  +        env->l->jkLog(env, env->l, JK_LOG_ERROR,
  +                      "env.createBean(): Error creating  [%s] %s\n", objName, type);
  +        return NULL;
  +    }
  +    return w;
  +}
  +
  +
   static void *jk2_env_createInstance(jk_env_t *env, jk_pool_t *pool,
                                       const char *type, const char *name)
   {
       jk_env_objectFactory_t fac;
       jk_bean_t *result;
  +    jk_pool_t *workerPool;
   
       if( type==NULL  ) {
           env->l->jkLog(env, env->l, JK_LOG_ERROR,
  @@ -114,9 +177,11 @@
           return NULL;
       }
   
  +    /** Generate a unique name if none is specified
  +     */
       if( name==NULL ) {
  -        name=pool->calloc( env, pool, 10 );
  -        snprintf( (char *)name, 10, "%s.%d", type, env->id++ );
  +        name=pool->calloc( env, pool, strlen( type ) + 6 );
  +        sprintf( (char *)name, "%s.%d", type, env->id++ );
       }
   
       fac=jk2_env_getFactory( env, type);
  @@ -137,7 +202,9 @@
       result->getAttributeInfo=NULL;
       result->setAttributeInfo=NULL;
       
  -    fac( env, pool, result, type, name );
  +    workerPool=pool->create(env, pool, HUGE_POOL_SIZE);
  +    
  +    fac( env, workerPool, result, type, name );
       if( result->object==NULL ) {
           if( env->l )
               env->l->jkLog(env, env->l, JK_LOG_ERROR,
  @@ -197,6 +264,7 @@
     env->getByName= jk2_env_getByName; 
     env->getMBean= jk2_env_getBean; 
     env->createInstance= jk2_env_createInstance;
  +  env->createBean= jk2_env_createBean;
     env->id=0;
     jk2_map_default_create( env, & env->_registry, env->globalPool );
     jk2_map_default_create( env, & env->_objects, env->globalPool );
  
  
  

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

Reply via email to