2016-05-05 8 views
1

Ich versuche, eine Verbindung Pool mit Vibur-Dbcp für eine App für Desktop in JavaFX zu erstellen, ich habe eine MySQL-Datenbank in AWS und funktioniert gut, wenn ich verbinde von Workbench Hintern, wenn ich von der App verbinden die Antwortzeit inkrementiert, überprüfe ich meinen Code und der Grund ist, weil die App zu vielen Verbindungen schafft zu viel Überhitzung erstellen (vor der App haben eine eingebettete SQLite Datenbank und die Verbindungen waren kein Problem) Ich remake die Struktur meines Codes Hintern muss ich noch eine Menge von Verbindungen machen.Konnte keinen Verbindungspool in Java + MySQL + Vibur-dbcp erstellen

Suche nach einer Lösung Ich finde, dass conection Pool ist der Weg, ich finde eine gute Anzahl von Lösungen Apache Commons, C3P0, HikariCP und Vibur DBCP ich versuche alle zu verwenden, aber im Moment kann ich nicht einen zu arbeiten Ich suche nach einem Tutorial, aber ich finde nur alte Implementierungen (Java 6 oder älter) für Servlets und nur Snippets und alle sind sehr verwirrend für mich (ich bin ein Anfänger in DB), meine Lieblingsoption ist HikariCP, aber ich kann den Pool machen um zu arbeiten, meine nächste Wahl ist Vibur im Moment habe ich diesen Code für die Verbindung.

private Connection connection; 

//creates the pool 
public DataSource createDataSourceWithStatementsCache() { 
ViburDBCPDataSource ds = new ViburDBCPDataSource(); 

ds.setJdbcUrl("dbURL"); 
ds.setUsername("dbUser"); 
ds.setPassword("dbPass"); 

ds.setPoolInitialSize(10); 
ds.setPoolMaxSize(100); 

ds.setConnectionIdleLimitInSeconds(30); 
ds.setTestConnectionQuery("isValid"); 

ds.setLogQueryExecutionLongerThanMs(500); 
ds.setLogStackTraceForLongQueryExecution(true); 

ds.setStatementCacheMaxSize(200); 

ds.start(); 
return ds; 
} 

//Getts the conection 
public Connection conectarBD(){ 
    try { 
     connection = createDataSourceWithStatementsCache().getConnection(); 
    } catch (SQLException ex) { 
     Logger.getLogger(coneccionBD.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return connection; 
} 


public void desconectarBD(){ 
    try { 
     connection.close(); 
    } catch (SQLException ex) { 
     Logger.getLogger(coneccionBD.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

ich diesen Fehler erhalten

Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/vibur/objectpool/listener/Listener 
    at HE.MVC.Modelo.Laboratoriales.Conexion.createDataSourceWithStatementsCache(Conexion.java:36) 
    at HE.MVC.Modelo.Laboratoriales.Conexion.conectarBD(Conexion.java:63) 
    at HE.MVC.Modelo.MedicamentosAbituales.cargaTabla(MedicamentosAbituales.java:186) 
    at HE.MVC.Vistas.Paciente.NuevopacienteController.iniciaTablas(NuevopacienteController.java:351) 
    at HE.MVC.Vistas.Paciente.NuevopacienteController.initialize(NuevopacienteController.java:1156) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
    at HE.HEstadistica.LanzaNuevoPaciente(HEstadistica.java:304) 
    at HE.MVC.Vistas.Paciente.EscenaPacientesController$7$1.run(EscenaPacientesController.java:347) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: org.vibur.objectpool.listener.Listener 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 17 more 

was im fragen ist zwei Dinge

1.-, was ich in diesem Code falsch machen ?.

2.- gibt es ein Buch, Handbuch, Seite o Videos zum Lernen ceancction pool (HikariCP Erklärung für Anfänger es wäre wunderbar) wo kann ich lernen, wie dies funktioniert?

+2

Die 'ClassNotFoundException' für' org.vibur.objectpool.listener.Listener' schlägt vor, dass sie nicht im Klassenpfad gefunden werden kann. Meine Vermutung ist, dass es von 'ViburDBCPDataSource' referenziert wird. Werfen Sie einen Blick auf [diesen Artikel] (http://zeroturnaround.com/rebellabs/rebell-labs-tutorial-do-you-really-get-classloaders/4/) durch Nullumdrehung. – hotzst

Antwort

1

@CorrOrtiz, in Bezug auf Ihre erste Frage, was @hotzst in seinem Kommentar unten Ihre Frage richtig ist. Für Vibur DBCP gibt es zwei JAR-Dateien, die Sie als Abhängigkeiten für Ihre Anwendung benötigen: vibur-dbcp-9.0.jar und vibur-object-pool-9.0.jar. Die Ausnahme, die du bekommst, bedeutet, dass du höchstwahrscheinlich die zweite Abhängigkeit verpasst. Wenn du jedoch die vibur-dbcp-Abhängigkeit über Maven hinzugefügt hast, solltest du auch die zweite Abhängigkeit transitiv bekommen haben.

Verwandte Themen