You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2002/03/18 19:28:37 UTC

cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_env.c

costin      02/03/18 10:28:37

  Modified:    jk/native2/common jk_env.c
  Log:
  Update for the new config mechanism.
  
  Each jk component is created using jk_env->createInstance(), which registers
  the name of the component. You can then set(and soon get) attributes for
  each component transparently.
  
  Type 'dcop' on a KDE computer to get an idea how it'll work ( or use the
  openjmx html interface )
  
  Revision  Changes    Path
  1.11      +74 -49    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.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- jk_env.c	21 Feb 2002 11:10:12 -0000	1.10
  +++ jk_env.c	18 Mar 2002 18:28:37 -0000	1.11
  @@ -91,87 +91,112 @@
   }
   
   static jk_env_objectFactory_t JK_METHOD jk2_env_getFactory(jk_env_t *env, 
  -                                                           const char *type,
  -                                                           const char *name)
  +                                                           const char *type )
   {
  -  jk_env_objectFactory_t result;
  -  /* malloc/free: this is really temporary, and is executed only at setup
  -     time, not during request execution. We could create a subpool or alloc
  -     from stack */
  -  char *typeName=
  -      (char *)malloc( (strlen(name) + strlen(type) + 2 ) * sizeof( char ));
  -
  -  strcpy(typeName, type );
  -  strcat( typeName, "/" );
  -  strcat( typeName, name );
  -
  -  if( type==NULL || name==NULL ) {
  -    // throw NullPointerException
  -    return NULL;
  +  if( type==NULL ) {
  +      env->l->jkLog(env, env->l, JK_LOG_ERROR,
  +                      "env.getFactory(): NullPointerException\n");
  +      return NULL;
     }
   
  -  /** XXX add check for the type */
  -  result=(jk_env_objectFactory_t)env->_registry->get( env, env->_registry,
  -                                                      typeName);
  -  free( typeName );
  -  return result;
  +  return (jk_env_objectFactory_t)env->_registry->get( env, env->_registry, type);
   }
   
  -static void *jk2_env_getInstance(jk_env_t *_this, jk_pool_t *pool,
  -                                 const char *type, const char *name)
  +static void *jk2_env_createInstance(jk_env_t *env, jk_pool_t *pool,
  +                                    const char *type, const char *name)
   {
       jk_env_objectFactory_t fac;
  -    void *result;
  +    jk_bean_t *result;
  +    
  +    if( type==NULL  ) {
  +        env->l->jkLog(env, env->l, JK_LOG_ERROR,
  +                        "env.createInstance(): NullPointerException\n");
  +        return NULL;
  +    }
   
  -    /* prevent core... */
  -    if (name==NULL)
  -        return(NULL);
  +    if( name==NULL ) {
  +        name=pool->calloc( env, pool, 10 );
  +        snprintf( name, 10, "%s.%d", type, env->id++ );
  +    }
   
  -    fac=_this->getFactory( _this, type, name);
  +    fac=jk2_env_getFactory( env, type);
       if( fac==NULL ) {
  -        if( _this->l )
  -            _this->l->jkLog(_this, _this->l, JK_LOG_ERROR,
  +        if( env->l ) {
  +            env->l->jkLog(env, env->l, JK_LOG_ERROR,
                               "Error getting factory for %s:%s\n", type, name);
  +        } else {
  +            fprintf( stderr, "Error getting factory for %s \n",  type );
  +        }
           return NULL;
       }
   
  -    fac( _this, pool, &result, type, name );
  -    if( result==NULL ) {
  -        if( _this->l )
  -            _this->l->jkLog(_this, _this->l, JK_LOG_ERROR,
  +    result=(jk_bean_t *)pool->calloc( NULL, pool, sizeof( jk_bean_t ));
  +    result->type=type;
  +    result->name=name;
  +    
  +    fac( env, pool, result, type, name );
  +    if( result->object==NULL ) {
  +        if( env->l )
  +            env->l->jkLog(env, env->l, JK_LOG_ERROR,
                                   "Error getting instance for %s:%s\n", type, name);
           return NULL;
       }
  +
  +    env->_objects->put( env, env->_objects, name, result, NULL );
       
  -    return result;
  +    return result->object;
   }
   
  +static void *jk2_env_getByName(jk_env_t *env, const char *name)
  +{
  +    jk_bean_t *result;
  +
  +    if( name==NULL ) {
  +        env->l->jkLog(env, env->l, JK_LOG_ERROR,
  +                        "env.getByName(): NullPointerException\n");
  +        return NULL;
  +    }
  +
  +    
  +    result=(jk_bean_t *)env->_objects->get( env, env->_objects, name );
  +    if( result==NULL ) return NULL;
  +    
  +    return result->object;
  +}    
  +
  +static jk_bean_t JK_METHOD *jk2_env_getBean(jk_env_t *env, const char *name)
  +{
  +    if( name==NULL ) {
  +        env->l->jkLog(env, env->l, JK_LOG_ERROR,
  +                        "env.getByName(): NullPointerException\n");
  +        return NULL;
  +    }
  +
  +    return (jk_bean_t *)env->_objects->get( env, env->_objects, name );
  +}    
   
   static void JK_METHOD jk2_env_registerFactory(jk_env_t *env, 
                                                const char *type,
  -                                             const char *name, 
                                                jk_env_objectFactory_t fact)
   {
  -  void *old;
  -  char *typeName;
  -  int size=( sizeof( char ) * (strlen(name) + strlen(type) + 2 ));
  -
  -  typeName=(char *)env->globalPool->calloc(env, env->globalPool, size);
  -
  -
  -  strcpy(typeName, type );
  -  strcat( typeName, "/" );
  -  strcat( typeName, name );
  -  env->_registry->put( env, env->_registry, typeName, fact, &old );
  +    if( type==NULL || fact==NULL ) {
  +        env->l->jkLog(env, env->l, JK_LOG_ERROR,
  +                        "env.registerFactory(): NullPointerException\n");
  +        return;
  +    }
  +    env->_registry->put( env, env->_registry, type, fact, NULL );
   }
   
   static void jk2_env_initEnv( jk_env_t *env, char *id ) {
     /*   env->logger=NULL; */
     /*   map_alloc( & env->properties ); */
  -  env->getFactory= jk2_env_getFactory; 
     env->registerFactory= jk2_env_registerFactory;
  -  env->getInstance= jk2_env_getInstance; 
  +  env->getByName= jk2_env_getByName; 
  +  env->getMBean= jk2_env_getBean; 
  +  env->createInstance= jk2_env_createInstance;
  +  env->id=0;
     jk2_map_default_create( env, & env->_registry, env->globalPool );
  +  jk2_map_default_create( env, & env->_objects, env->globalPool );
     jk2_registry_init(env);
   }
   
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>