-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 
Author Message
 Post subject: Seltsamer C3P0-Fehler
PostPosted: Fri Oct 27, 2006 4:50 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,
wir bekommen fast(?) bei jedem Start folgende Warning.

10:40:04,546 WARN ActiveManagementCoordinator:54 - Failed to set up C3P0RegistryManagerMBean. [c3p0 will still functioning normally, but management via JMX may not be possible.]
javax.management.InstanceAlreadyExistsException: com.mchange.v2.c3p0:type=C3P0Registry
at com.sun.jmx.mbeanserver.RepositorySupport.addMBean(RepositorySupport.java:452)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1410)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:936)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:337)
at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:497)
at com.mchange.v2.c3p0.management.ActiveManagementCoordinator.attemptManageC3P0Registry(ActiveManagementCoordinator.java:49)
at com.mchange.v2.c3p0.C3P0Registry.banner(C3P0Registry.java:148)
at com.mchange.v2.c3p0.C3P0Registry.reregister(C3P0Registry.java:170)
at com.mchange.v2.c3p0.impl.DriverManagerDataSourceBase.<init>(DriverManagerDataSourceBase.java:221)
at com.mchange.v2.c3p0.DriverManagerDataSource.<init>(DriverManagerDataSource.java:58)
at com.mchange.v2.c3p0.DriverManagerDataSource.<init>(DriverManagerDataSource.java:54)
at com.mchange.v2.c3p0.DataSources.unpooledDataSource(DataSources.java:145)
at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:96)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:397)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1933)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1216)
[..]

Unser Programm funktioniert aber.
Muß ich mir hier irgendwie Sorgen machen?

Danke für alle Hinweise und Tips.

Ciao
Peter Schütt


Top
 Profile  
 
 Post subject:
PostPosted: Fri Oct 27, 2006 8:16 am 
Senior
Senior

Joined: Fri May 14, 2004 9:37 am
Posts: 122
Location: Cologne, Germany
Sorry wenn ich das so sage, aber wer lesen kann ist klar im Vorteil. Bewahrheitet sich beim Programmieren immer wieder. :)
InstanceAlreadyExistsException will sagen, dass schon eine Instanz vorhanden ist und das es eigentlich nur ein geben sollte. Das Programm arbeitet weiter (c3p0 will still functioning normally), aber es ist möglich das JMX für C3P0 nicht funktioniert. (but management via JMX may not be possible). Du solltest vielleicht mal nachschauen wieso zwei Instanzen angelegt werden. Sieht mir nach einem doppelten Configeintrag aus.

_________________
regards

Olaf

vote if it helped


Top
 Profile  
 
 Post subject: 2 Instanzen?
PostPosted: Fri Oct 27, 2006 8:46 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,
wie soll das denn doppelt konfiguriert sein?
Ich habe 2 SessionFactorys habe, weil ich im Programm auf zwei verschiedene Datenbanken zugreifen muß, und an jede übergebe ich eine unterschiedliche Properties-Menge und dann muß ich doch für
beide SessionFactory die C3P0-Parameter angeben.
Ich arbeite nicht mit einer globalen hibernate.properties - Datei.

Da ich auch mehrere ClassLoader in einem Programm verwende, kann es auch sein, daß manchmal mehrere SessionFactorys für diesselbe Datenbank erzeuge. Aber auch da muß ich doch die C3P0-Parameter angeben.

Oder habe ich hier einen Denkfehler?
Danke für alle weiteren Hinweise und Tips.

Ciao
Peter Schütt


Top
 Profile  
 
 Post subject:
PostPosted: Mon Oct 30, 2006 8:45 am 
Senior
Senior

Joined: Fri May 14, 2004 9:37 am
Posts: 122
Location: Cologne, Germany
Also mehere SessionFactories für die gleiche Datenbank, sorry wenn ich das mal so sage, hört sich lustig an. Hast Du mal etwas von Singletons gehört ? Da gibt es nur eine Instanz und nicht mehrere. Das Du eine Sessionfactory pro Datenbank hast ist ja ok, aber ich glaube nicht, dass Du pro Classloader eine Sessionfactory benötigst, daher wohl auch das Verhalten das es hin und wieder keine Meldung von C3P0 gibt.
Daher als Tip Singleton Pattern für die SessionFactories benutzen, so daß die erste aufrufende Klasse eine Instanz erzeugt und die nachfolgenden Klassen die selbe Instanz benutzen und egal welchen Classloader sie benutzen.

Noch als Zusatz, da Du ja schon gesagt hast das Du pro Classloader schon mal eine SessionFactory erzeugst und die Configuration bestimmt nicht dynamisch ist, wie soll dann bitte C3P0 eine andere Konfigurations pro Factory Instanz benutzen ? Schon mal daran gedacht ? Ich denke das hilft ;)

_________________
regards

Olaf

vote if it helped


Top
 Profile  
 
 Post subject:
PostPosted: Wed Nov 08, 2006 4:49 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,
mit den Singletons ist das nicht so einfach, wenn man mehrere ClassLoader verwendet.

Man hat eine Klasse MyClass mit der statischen Methode

public static MyClass getInstance()
{
if (instance == null)
{
instance = new MyClass();
}
return instance;
}

Schwierig wird es, wenn die Klasse mit einem anderen ClassLoader noch mal geladen wird.
Dann ist nämlich die Klassen-Variable instance bei der neu geladenen Klassen-Instanz nicht gesetzt und es wird beim Zugriff auf getInstance() eine zweite Instanz erzeugt.

Dieser Fall tritt bei mir auf und das könnte natürlich sein, daß in den c3p0-Klassen bestimmte Datenbank-Verbindungs-Instanzen angelegt werden, die es nur einmal geben darf.

Ciao
Peter Schütt


Top
 Profile  
 
 Post subject:
PostPosted: Wed Nov 08, 2006 8:02 am 
Senior
Senior

Joined: Fri May 14, 2004 9:37 am
Posts: 122
Location: Cologne, Germany
Also eigentlich sollte innerhalb einer VM es keine Probleme geben, selbst über die ClassLoader hinweg (sychronized ist hier das Stichwort, damit keine Nebenläufigkeit erzeugt wird), allerdings kann es bei zwei verschiedene VM's geben bzw. innerhalb eines Applikationserver es auch Umstände geben kann, wo es mit unter Problematisch werden kann. (Hot-Deployment)

_________________
regards

Olaf

vote if it helped


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.