Categorías destacadas
programacion php    
Artículo
1
¡votar!

 Sistema de Nombrado en Java (JNDI) y II


Parámetros y Valores de Retorno

Cuando escribimos un proveedor de servicio, debemos tener en mente ciertas reglas sobre cómo tratar los parámetros de entrada y los valores de retorno. Estas reglas no sólo afectan a la corrección del proveedor de servicio y por último a la corrección del programa que lo usa, sino que también tienen implicaciones de seguridad. Estas reglas se aplican a llamadas a métodos sobre el interface Context y sus subinterfaces y se explican en las siguientes páginas.

. Los Parámeteros son Propiedad del LLamador

Cuando un proveedor de servicio acepta un parámetro del llamador como parte de una llamada a método, no debe modificar los contenidos del parámetro. Supongamos que un proveedor de servicio recibe un java.util.Hashtable como un parámetro de entorno. El no debe añadir, borrar o modificar ningún ítem del Hashtable. Si el proveedor debe usar una versión modificada del Hashtable (por ejemplo, borrando cualquier propiedad relacionada con la seguridad), debe hacer esto sólo después de clonar el Hashtable.

En otro ejemplo, cuando el proveedor obtiene un parámetro Name, no debe añadir, borrar o modificar ningún componente del nombre.

. Los Parámetros son Sólo Válidos Durante la Llamada

Un proveedor de servicio no debe manetener punteros a parámetros más allá de la llamada a método. Si el proveedor de servicio debe retener cierta información pasada en los parámetros, debe clonar o copiar la información a variables accesibles localmente.

Por ejemplo, si un llamador invoca a LdapContext.setRequestControls() con un valor no-null Control[], el proveedor de servicio debería copiar el array antes de volver de la llamada. Después de la llamada, cualquier cambio que el llamador haga en su array no debería afectar al proveedor de servicio y viceversa.

. Los Valores de Retorno son Propiedad del Llamador

Cuando un proveedor de servicio devuelve un objeto al llamador, debería darle la propiedad del objeto. Entonces el llamador es libre de hacer cambios en el objeto devuelto, y dichos cambios no deberían afectar al proveedor de servicio.

Por ejemplo, si dos llamadores invocan a LdapContext.getRequestControls(), entonces el Control[] que recibe cada uno es su propia copia. Cada llamador puede manipular ese resultado sin afectar al otro llamador. De forma similar, si dos llamadores invocan a Context.getEnvironment(), entonces el java.util.Hashtable que recibe cada uno puede ser manipulado independientemente sin que el otro llamador se vea afectado.

Para soportar este comportamiento, el proveedor de servicio normalmente necesita clonar un resultado mutable (que puede ser devuelto a varios llamadores) antes de devolverlo.

Publicado por:
Ricard Lou Torrijos
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon