Sistema de Nombrado en Java (JNDI) y II

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR