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]>