Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Consulta sobre singleton y persistencia

Hola buenos dias. Soy novato en cuanto a java (soy analista de sistemas y simpre he visto pascal, visual fox, visual basic; he leido sobre POO, etc y he estado siguiendo tutoriales y videotutoriales y demas con netbeans 6 y 7).

Mi consulta viene a que estoy empezando hacer una aplicacion de escritorio (la tipica clientes, proveedores, stock algo sencillo para empezar)
Tengo la persistecia.xml y creo la clase Clientes (desde Nuevo---Persistencia---entity classes from database) y el clientesJpaController
(desde Nuevo---Persistencia---jpa controller classes from entity classes) pero mi consulta es que dentro del JDialog (formulario cliente) leyendo bastante por ahi que no es bueno crear el
factory=Persistence.createEntityManagerFactory("pruebaPU");
porque crearia varios factory cada vez que abre el jdialog (la cual el create,edit etc del ClientesJpaController al llamarlo desde el JDialog funciona bien)
y si es necesario implentar singleton (patrón o anti-patrón según opiniones) para que cree una sola vez esta clase y pueda usarse en toda la aplicación o como es la correcta forma de hacerlo y trabajar bien con persistencia; algún ejemplo de como podria ser me vendria bien.

Disculpen si escribi demasiado es para explicar bien mi problema...
Espero que alguien me pueda ayudar ya que me intereza mucho avanzar e ir aprendiedo java.
Saludos

marzo 13, 2013 | Registered Commenterfederico1983

Comento para que sea mas entendible mi consulta que el codigo de la clase "clientes" y el "clientesJpaController" es el generico que me crea el mismo netbeans con el asistente como decia anteriormente (agregar------nuevo-----persistencia-----etc) sin modificar nada; la base es en mysql se llama prueba; la tabla se llama clientes y solo tiene unos campos de prueba como CodigoCliente (integer de longitud 4 y es clave primaria), ApellidoyNombre, Direccion, Ciudad, y Telefono (todos estos son varchar de longitug 20)
Obviamente aca no existe nada de MVC porque es solamente de prueba con persistencia para luego empezar a trabajar correctamente con MVC
y aca muestro parte del codigo de el jdialog
Saludos


package factusis;

import factusis.exceptions.PreexistingEntityException;
import java.beans.Beans;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.RollbackException;
import javax.swing.JOptionPane;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
*
* @author fede
*/
public class GestionClientes extends javax.swing.JDialog {

private EntityManagerFactory factory;

private ClientesJpaController daoProgram;
/**
* Creates new form GestionClientes
*/
public GestionClientes(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
this.setLocationRelativeTo(null);
if (!Beans.isDesignTime()) {
entityManager.getTransaction().begin();
}
factory = Persistence.createEntityManagerFactory("pruebaPU"); //------>esto es lo que comentan que esta mal cargado aqui en los foros
daoProgram = new ClientesJpaController(factory);
list = daoProgram.findClientesEntities();

}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
// ----------------------------con toda la declaraciones------------------------------
bindingGroup.bind();
pack();
}// </editor-fold>

private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {
try {

factusis.Clientes c = new factusis.Clientes();
c.setCodigoCliente(Integer.parseInt (this.TxtCodigoCliente.getText()));
c.setApellidoyNombre(this.TxtApellidoyNombre.getText());
c.setCuidad(this.TxtCiudad.getText());
c.setDireccion(this.TxtDireccion.getText());
c.setTelefono(this.TxtTelefono.getText());
daoProgram.create(c);

} catch (PreexistingEntityException ex) {
Logger.getLogger(GestionClientes.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(GestionClientes.class.getName()).log(Level.SEVERE, null, ex);
}
}
............
...............
.....................
}

marzo 14, 2013 | Unregistered Commenterfederico