Saludos Gus, gracias por tu respuesta y perdón el retraso por responder, mucho lío en el trabajo.
La cuestión es que me pidieron una librería que fuera lo más independiente posible, ten sencilla como importarla desde maven y solo indicarle los datos de configuración que son el nombre de la tabla (que por nomenclatura varía de una aplicación a otra) y la ruta donde se guardan los informes.
Al final he hecho una clase Configuración con patron singlenton que obtiene la configuración de los parametros indicados en el web.xml (init-parameters) cuando arranca la app. Luego desde el dao obtengo el nombre de la tabla de la clase. Cuando se importa la librería lo único que hay que hacer es añadir esos parámetros al web.xml de cada aplicación y listo. No utilizo JPA, sino un DAO más clásico que obtiene la conexion de un datasource.
te pongo el código de una versión casi final, la que tenía en casa, la del trabajo le he retocado cuatro detalles.
Código PHP:
package es.jose.lib.informes.dao;
import es.jose.lib.informes.interfaces.iGenericDAO;
import es.jose.lib.informes.oraclejdbc.OracleConnUtils;
import es.jose.lib.informes.utils.ReportsConfig;
import es.jose.lib.informes.vo.ReportsVO;
import java.sql.Connection;
import java.util.List;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.sql.ResultSet;
import java.util.ArrayList;
public class ReportsDAO implements iGenericDAO<ReportsVO>{
private PreparedStatement searchStmtFilter;
private PreparedStatement searchStmt;
private PreparedStatement removeStmt;
private PreparedStatement insertStmt;
public ReportsDAO(){
Connection conn = OracleConnUtils.getOracleConnection();
ReportsConfig config= ReportsConfig.getInstance();
try {
searchStmtFilter = conn.prepareStatement("SELECT * FROM " +config.getTableName() + " WHERE DESCRIPCIO = ? AND IDIOMA = ? AND NOM_FITXER = ?");
searchStmt = conn.prepareStatement("SELECT * FROM "+ config.getTableName());
insertStmt = conn.prepareStatement("INSERT INTO " +config.getTableName()+ "(DESCRIPCIO, IDIOMA, NOM_FITXER)VALUES(?, ?, ?)");
removeStmt = conn.prepareStatement("DELETE FROM "+ config.getTableName() +" WHERE NOM_FITXER = ?");
} catch (SQLException ex) {
Logger.getLogger(ReportsDAO.class.getName()).log(Level.ALL, null, ex);
}
}
@Override
public List<ReportsVO> search(ReportsVO vo) {
List<ReportsVO> reportsList = null;
try {
reportsList = new ArrayList<>();
ResultSet result = searchStmt.executeQuery();
while (result.next()){
ReportsVO report = new ReportsVO();
report.setDescripcio(result.getString("DESCRIPCIO"));
report.setIdioma(result.getString("IDIOMA"));
report.setNomFitxer(result.getString("NOM_FITXER"));
reportsList.add(report);
}
} catch (SQLException ex) {
Logger.getLogger(ReportsDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return reportsList;
}
public List<ReportsVO> searchFilter(ReportsVO vo) {
List<ReportsVO> reportsList = null;
try {
Connection conn = OracleConnUtils.getOracleConnection();
searchStmt = conn.prepareStatement("SELECT * FROM RUM_REPORTS WHERE DESCRIPCIO = ? AND IDIOMA = ? AND NOM_FITXER = ?");
reportsList = new ArrayList<>();
searchStmt.setString(1, vo.getDescripcio());
searchStmt.setString(2, vo.getIdioma());
searchStmt.setString(3, vo.getNomFitxer());
ResultSet result = searchStmt.executeQuery();
while (result.next()){
ReportsVO report = new ReportsVO();
report.setDescripcio(result.getString("DESCRIPCIO"));
report.setIdioma(result.getString("IDIOMA"));
report.setNomFitxer(result.getString("NOM_FITXER"));
reportsList.add(report);
}
} catch (SQLException ex) {
Logger.getLogger(ReportsDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return reportsList;
}
@Override
public void remove(ReportsVO vo) {
try {
removeStmt.setString(1, vo.getNomFitxer());
removeStmt.executeQuery();
} catch (SQLException ex) {
Logger.getLogger(ReportsDAO.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void insert(ReportsVO vo) {
try {
insertStmt.setString(1, vo.getDescripcio());
insertStmt.setString(2, vo.getIdioma());
insertStmt.setString(3, vo.getNomFitxer());
insertStmt.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(ReportsDAO.class.getName()).log(Level.SEVERE, null, ex);
}
}
}