J'ai essayé d'implémenter une méthode de classe singleton, qui est invoquée par une classe de filtre. La classe de filtre et le reste des classes sont ajoutés à WLS en tant que bibliothèque partagée.comment implémenter un singleton - dans weblogic
Et j'ai deux applications Web distinctes en cours d'exécution - servlets avec filtre - les deux sur le même serveur géré.
Ainsi, tout fonctionne correctement, sauf que le singleton est instancié deux fois. plz trouverez ci-dessous l'extrait de code.
public class Test
{
private static Test ref ;
private DataSource X;
static int Y;
long Z ;
private Test()
{
// Singleton
Z= 100 ;
}
public static synchronized Test getinstance() throws NamingException, SQLException
{
if(ref == null)
{
ref = new Test() ;
InitialContext ic = new InitialContext();
ref.X = (DataSource)ic.lookup ("jdbc/Views");
}
return ref ;
}
public Object clone()throws CloneNotSupportedException
{
throw new CloneNotSupportedException();
}
public int sampleMethod (int X) throws SQLException
{
}
}
méthode du filtre:
public final class Filter implements Filter
{
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException
{
try
{
Test ref = Test.getinstance();
log.logNow(ref.toString());
.......
}
}
}
Dans le journal me fais deux références différentes - par exemple
test @ f1a2e06 test @ f180f10
que je fais quelque chose qui cloche? Toute aide est la bienvenue.
Quelle version de WebLogic est-ce? L'étiquette indique 10.x, mais cela pourrait être 10.0 ou 10.3 ou 11gR1 (10.3.x). –
Un singleton fait d'ailleurs pas de sens absolu ici. Si vous voulez une seule instance par contexte de servlet, utilisez 'ServletContextListener'. Si vous voulez une seule instance par serveur d'applications, utilisez JNDI comme le suggère Bozho. – BalusC
11gR1 (10.3.3). – Tom