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>