Ich habe versucht, eine Singleton-Klasse-Methode, die von einer Filterklasse aufgerufen wird, zu implementieren. Die Filterklasse und der Rest der Klassen werden WLS als gemeinsam genutzte Bibliothek hinzugefügt.Wie ein Singleton zu implementieren - in Weblogic
Und ich habe zwei separate Web-Anwendungen laufen - Servlets mit Filter - beide auf dem gleichen verwalteten Server.
Also alles funktioniert gut außer, das Singleton wird zweimal instanziiert. PLZ finden Sie unter dem Code-Snippet.
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
{
}
}
Filter-Methode:
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());
.......
}
}
}
Im Protokoll ist immer zwei verschiedene Referenzen - sagt
-Test @ f1a2e06-Test @ f180f10
Bin ich etwas falsch hier? Jede Hilfe wäre großartig.
Welche Version von WebLogic ist das? Das Tag zeigt 10.x an, aber das könnte 10.0 oder 10.3 oder 11gR1 (10.3.x) sein. –
Ein Singleton macht übrigens hier keinen Sinn. Wenn Sie eine einzelne Instanz pro Servletkontext verwenden möchten, verwenden Sie 'ServletContextListener'. Wenn Sie eine einzelne Instanz pro Anwendungsserver wünschen, verwenden Sie JNDI, wie Bozho es empfiehlt. – BalusC
11gR1 (10.3.3). – Tom