recientemente generé un ejecutable .jar de una aplicación, el cual está dando problemas al conectar a la base de datos; El detalle está que al correrla desde el IDE funciona correctamente. Uso netBeans como IDE, jpa para la conexión a la base de datos, y postgreSQL.
Intente abrirla desde la consola con permisos de administrador, pero no funcionó.
Les dejo el archivo de persistencia, la clase que se conecta a la base de datos y el rastro de la excepción.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="claseInterfacesPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>clases.ArqueoDeCaja</class>
<class>clases.ArqueoDeCajaDetalle</class>
<class>clases.Caja</class>
<class>clases.CambioDePrecio</class>
<class>clases.Cliente</class>
<class>clases.ControlDeCajero</class>
<class>clases.CuentaPorCobrar</class>
<class>clases.Empleado</class>
<class>clases.EmpleadoCaja</class>
<class>clases.Empresa</class>
<class>clases.Factura</class>
<class>clases.FacturaDetalle</class>
<class>clases.FamiliaDeProducto</class>
<class>clases.FlujoDeCaja</class>
<class>clases.FlujoDeCajaDetalle</class>
<class>clases.FormaDeCobro</class>
<class>clases.Impuesto</class>
<class>clases.MedioDePago</class>
<class>clases.MovimientoDeNotaDeCredito</class>
<class>clases.NivelDeUsuario</class>
<class>clases.NotaDeCredito</class>
<class>clases.NotaDeCreditoDetalle</class>
<class>clases.PrecioDeProducto</class>
<class>clases.Producto</class>
<class>clases.Sesion</class>
<class>clases.TablaImpresora</class>
<class>clases.TipoDeImpuesto</class>
<class>clases.TipoDePrecio</class>
<class>clases.TransaccionDeCaja</class>
<class>clases.UnidadDeMedida</class>
<class>clases.UnidadDePeso</class>
</persistence-unit>
</persistence>
package clasesDao;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.*;
public class DatabaseHelper implements Serializable
{
private static final long serialVersionUID=1L;
private static EntityManagerFactory emf;
private static final String unidadDePersistencia="clasesInterfacesPU";
private static Map<String,String> propiedades=new HashMap<>();
private static final String driverJDBC[]={"javax.persistence.jdbc.driver","org.postgresql.Driver"};
private static final String proveedorDePersistencia[]= {"hibernate.cache.provider_class","org.hibernate.cache.NoCacheProvider"};
private static String usuario[]={"javax.persistence.jdbc.user","postgres"};
private static String contrasenha[]={"javax.persistence.jdbc.password","1234"};
private static String url[]={"javax.persistence.jdbc.url",""};
private static String servidor=" ";
//constructores
public DatabaseHelper()
{
}
public DatabaseHelper(String servidor)
{
setServidor(servidor);
}
public static void setServidor(String servidor)
{
DatabaseHelper.servidor = servidor;
}
public void initEMF()
{
initUrl();
initPropiedades();
emf=Persistence.createEntityManagerFactory(unidadDePersistencia, propiedades);
}
public void cerrar()
{
emf.close();
}
public static EntityManager crearEM()
{
return emf.createEntityManager();
}
private void initUrl()
{
/*la url de una base de datos PostgreSQL se forma de las siguientes partes
1.- el driver JDBC
2.- el nombre del sevidor de base de datos
3.- el número de puerto en escucha
4.- el nombre de la base de datos
Ejemplo: "jdbc:postgresql://localhost:5432/hola"
*/
/*1.-driver JDBC*/
url[1]="jdbc:postgresql://";
/*2.- el nombre del sevidor de base de datos*/
url[1]+=servidor;
/*3.- el número de puerto en escucha*/
url[1]+=":5432";
/*4.- el nombre de la base de datos*/
url[1]+="/hola";
}
private void initPropiedades()
{
propiedades.clear();
propiedades.put(driverJDBC[0], driverJDBC[1]);
propiedades.put(proveedorDePersistencia[0], proveedorDePersistencia[1]);
propiedades.put(usuario[0],usuario[1]);
propiedades.put(contrasenha[0],contrasenha[1]);
propiedades.put(url[0],url[1]);
propiedades.put("javax.persistence.schema-generation.database.action", "none");
}
}
javax.persistence.PersistenceException: No Persistence provider for EntityManager named clasesInterfacesPU
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
at clasesDao.DatabaseHelper.initEMF(DatabaseHelper.java:47)
at gui.principal.Principal.initBaseDeDatos(Principal.java:95)
at gui.principal.Principal.init(Principal.java:42)
at gui.principal.Principal.main(Principal.java:31)