Ci sono due directory in cui è possibile depositare archivi JAR (Java Archive) per estendere le funzionalità di Mirth Connect, nel mio caso la libreria che consente di connettersi a MySQL:
custom-lib/
e server-lib/database/
.
Le due directory hanno scopi leggermente differenti e vengono utilizzate per gestire librerie personalizzate o di sistema in maniera modulare:
Sommario
1. custom-lib/
:
- Scopo: Questa directory è destinata a contenere librerie personalizzate che potresti voler aggiungere a Mirth Connect. Ad esempio, se stai utilizzando un driver JDBC o altre librerie esterne specifiche per il tuo progetto o personalizzazioni, puoi inserirle qui.
- Utilizzo: È particolarmente utile quando hai bisogno di integrare librerie che non sono incluse di default in Mirth Connect, come connettori o altre dipendenze che il sistema non gestisce autonomamente.
2. server-lib/database/
:
- Scopo: Questa directory è destinata alle librerie di database utilizzate da Mirth Connect per la connessione a varie tipologie di database, come MySQL, PostgreSQL, Oracle, ecc. Mirth Connect cerca automaticamente qui i driver di database necessari per i connettori
Database Reader
oDatabase Writer
. - Utilizzo: È il percorso preferito per i driver JDBC. Se stai lavorando principalmente con database e hai bisogno di specificare i driver JDBC, questa è la directory in cui vanno posizionati.
Differenze chiave:
custom-lib/
: Per librerie personalizzate o aggiuntive non incluse di default.server-lib/database/
: Per driver di database JDBC, generalmente gestiti dal sistema.
Quando usarle:
- Se hai bisogno di aggiungere librerie specifiche per il tuo progetto o personalizzazioni (non solo JDBC), usa
custom-lib/
. - Per i driver JDBC destinati ai connettori
Database Reader/Writer
, il posto più appropriato èserver-lib/database/
.
Perché la libreria deve stare in una sola delle due directory:
Mantenere una singola versione della libreria in una sola directory evita conflitti di classpath e sovraccarico nella gestione delle classi. Se una libreria è presente in entrambe le directory, Mirth potrebbe non sapere quale utilizzare, provocando errori come il NoClassDefFoundError
che ho riscontrato. Un problema silente al deploy del canale che però si verificava a runtime.
Tra i tentativi che ho fatto ci sono stati quelli di trovare una liberia compatibile con la VM ma non era qui il problema.
Scrivendo un breve programma Java, la connessione si stabiliva e si riusciva a anche a tirare le query: il problema non era la libreria in sé, né la VM
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; public class MySQLConnectionTest { public static void main(String[] args) { String jdbcUrl = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Europe/Rome"; String username = "myuser"; String password = "mypassword"; Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { // Carica il driver MySQL Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("Driver MySQL caricato correttamente."); // Effettua la connessione connection = DriverManager.getConnection(jdbcUrl, username, password); System.out.println("Connessione al database riuscita."); // Crea uno statement e esegui la query "SELECT 1" statement = connection.createStatement(); resultSet = statement.executeQuery("SELECT 1"); // Mostra i risultati while (resultSet.next()) { int result = resultSet.getInt(1); System.out.println("Risultato della query SELECT 1: " + result); } } catch (ClassNotFoundException e) { System.out.println("Errore: il driver MySQL non è stato trovato."); e.printStackTrace(); } catch (SQLException e) { System.out.println("Errore: impossibile connettersi al database."); e.printStackTrace(); } finally { // Chiudi il ResultSet, Statement e Connection try { if (resultSet != null) resultSet.close(); if (statement != null) statement.close(); if (connection != null) connection.close(); System.out.println("Connessione chiusa."); } catch (SQLException e) { e.printStackTrace(); } } } }
L’output è pulito:
$ java -cp .:/opt/mirthconnect4.2/custom-lib/mysql-connector-java-8.2.0.jar MySQLConnectionTest
Driver MySQL caricato correttamente.
Connessione al database riuscita.
Risultato della query SELECT 1: 1
Connessione chiusa.
Conclusione:
Le due directory sono utilizzate per scopi diversi e possono coesistere, ma è importante non duplicare le librerie tra di esse. Per i driver di database JDBC, come nel mio caso, server-lib/database/
è il posto più adatto!
Commenti recenti