2011-04-12 3 views
0

Nous avons développé un conteneur d'application qui crée un nouveau chargeur de classe pour chaque application indépendante exécutée dans le conteneur. Lorsqu'une application spécifique est appelée, le chargeur de classe de contexte du Thread est défini de manière appropriée avec le chargeur de classe de l'application. Pour éviter l'utilisation de ThreadLocal, il est possible de stocker des propriétés dans un chargeur de classe, de sorte que vous puissiez récupérer, dans ce cas, des propriétés spécifiques à l'application directement à partir du classloader.Propriétés spécifiques au chargeur de classe

Par exemple, je veux être en mesure de sauver en quelque sorte, puis récupérer plus tard propriétés lors de l'accès au classloader contexte:

Thread.currentThread().getContextClassLoader() 

Est-ce possible? Ou ThreadLocal est-il la seule option viable?

Répondre

0

Que diriez-vous de sous-classer le classloader de contexte, en l'étendant avec le support de propriété dont vous avez besoin, puis en castant le Thread.currentThread(). GetContextClassLoader()?

1

Plutôt que de lancer le chargeur de classe, vous pouvez charger une classe de propriétés personnalisée, par ex.

public class AppClassloaderProperties 
{ 
    static Properties appProperties = loadAppProperties(); 

    static private Properties loadAppProperties() { 
     // fetch app properties - does not need to be thread-safe, since each invocation 
     // of this method will be on a different .class instance 
    } 

    static public final Properties getApplicationProperties() { 
     // this method should be thread-safe, returning the immutable properties is simplest 
     return new Properties(appProperteis); 
    } 
} 

Étant donné que cette classe est chargée dans le classloader de l'application, une nouvelle classe est fournie pour chaque application. La classe AppClassloaderProperties pour chaque application sera distincte. Chaque application peut alors obtenir ses propriétés classloader en appelant

Properties props = AppClassloaderProperties.getApplicationProperties(); 
// use the properties 

Pas besoin pour les habitants de fil ou la coulée du classloader.

Questions connexes