Problemas com Persistencia no NetBeans

5 respostas
analistaadilson

Amigos,

Criei uma aplicação desktop no Netbeans, que é um cadastro simples de pessoas. Jurava que o framework de persistencia estava embutido na construção mas,
na hora de rodar não gera as tabelas no meu bd MySql…a IDE mostra um erro dizendo que falta fazer a persistencia de dados!
Alguém sabe como faço isso numa aplicação que já está semi pronta? Ou será melhor abandonar a persistencia via frameworks e criar as tabelas no banco manualmente ?
Detalhe: a conexão com MySql está funcionando normalmente…

Abraços e Obrigado… :roll:

5 Respostas

D

fala bruce… cara o seguinte qual o frameWork de persistencia vc esta usando??

se estiver usando JPA vc pode escolher atraves de um arquivo de configurção qual o ORM vc quer usar
ex: Hibernate , toplink

no hibernate tem uma opção de crias as DDL do banco atraves de suas classes mapeadas

hibernate.hbm2ddl.auto=update

este comando cria ou atualiza as DDL do banco.

abrç!!

analistaadilson

Dark Neo,

Obrigado pelas dicas eu estarei verificando e retorno.

:idea:

analistaadilson

[b]Caro Dark Neo,

Revi a minha aplicação mas, não consegui saber qual o framework utilizado ou se há algum, existe algum procedimento que eu deva fazer para que a essa altura, com a aplicação semi-pronta a Ide me de essa informação? Desculpa a minha ignorancia, não conheço bem a Ide Netbeans…No código vi algumas Anotations e bens criados, as classes de entidade tb mas, não consegui ver qual a origem do problema. Há apenas um erro num trecho de código que reproduzo:[/b]

private class SaveTask extends Task { SaveTask(org.jdesktop.application.Application app) { super(app); } @Override protected Void doInBackground() { try { entityManager.getTransaction().commit(); entityManager.getTransaction().begin(); } catch (RollbackException rex) { rex.printStackTrace(); entityManager.getTransaction().begin(); List<membrosdb.User> merged = new ArrayList<membrosdb.User>(list.size()); for (membrosdb.User u : list) { merged.add(entityManager.merge(u)); } list.clear(); list.addAll(merged); } return null; }

O netbeans não consegue achar a “Application app” … :cry:

analistaadilson

Caros, um pouco do código da aplicação MembrosDB que mostra uma interface para cadastro de usuários armazenados a partir de um Bd Mysql, rodando sob o Netbeans...

public class MembrosDBTESTE {
	/*
	 * MembrosDBView.java
	 */

	import org.jdesktop.application.Action;
	import org.jdesktop.application.ResourceMap;
	import org.jdesktop.application.SingleFrameApplication;
	import org.jdesktop.application.FrameView;
	import org.jdesktop.application.TaskMonitor;
	import org.jdesktop.application.Task;
	import java.awt.event.ActionEvent;
	import java.awt.event.ActionListener;
	import java.util.ArrayList;
	import java.util.List;
	import javax.persistence.RollbackException;
	import javax.swing.Timer;
	import javax.swing.Icon;
	import javax.swing.JDialog;
	import javax.swing.JFrame;
	import javax.swing.event.ListSelectionEvent;
	import javax.swing.event.ListSelectionListener;
	import org.jdesktop.beansbinding.AbstractBindingListener;
	import org.jdesktop.beansbinding.Binding;
	import org.jdesktop.beansbinding.PropertyStateEvent;

	/**
	 * The application's main frame.
	 */
	public class MembrosDBView extends FrameView {
	    
	    public MembrosDBView(SingleFrameApplication app) {
	        super(app);

	        initComponents();

	        // status bar initialization - message timeout, idle icon and busy animation, etc
	        ResourceMap resourceMap = getResourceMap();
	        int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
		messageTimer = new Timer(messageTimeout, new ActionListener() {
	            public void actionPerformed(ActionEvent e) {
	                statusMessageLabel.setText("");
	            }
	        });
		messageTimer.setRepeats(false);
	        int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
	        for (int i = 0; i < busyIcons.length; i++) {
	            busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
	        }
	        busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
	            public void actionPerformed(ActionEvent e) {
	                busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
	                statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
	            }
	        }); 
	        idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
	        statusAnimationLabel.setIcon(idleIcon);
	        progressBar.setVisible(false);

	        // connecting action tasks to status bar via TaskMonitor
	        TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
	        taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
	            public void propertyChange(java.beans.PropertyChangeEvent evt) {
	                String propertyName = evt.getPropertyName();
	                if ("started".equals(propertyName)) {
	                    if (!busyIconTimer.isRunning()) {
	                        statusAnimationLabel.setIcon(busyIcons[0]);
	                        busyIconIndex = 0;
	                        busyIconTimer.start();
	                    }
	                    progressBar.setVisible(true);
	                    progressBar.setIndeterminate(true);
	                } else if ("done".equals(propertyName)) {
	                    busyIconTimer.stop();
	                    statusAnimationLabel.setIcon(idleIcon);
	                    progressBar.setVisible(false);
	                    progressBar.setValue(0);
	                } else if ("message".equals(propertyName)) {
	                    String text = (String)(evt.getNewValue());
	                    statusMessageLabel.setText((text == null) ? "" : text);
	                    messageTimer.restart();
	                } else if ("progress".equals(propertyName)) {
	                    int value = (Integer)(evt.getNewValue());
	                    progressBar.setVisible(true);
	                    progressBar.setIndeterminate(false);
	                    progressBar.setValue(value);
	                }
	            }
	        });

	        // tracking table selection
	        masterTable.getSelectionModel().addListSelectionListener(
	            new ListSelectionListener() {
	                public void valueChanged(ListSelectionEvent e) {
	                    firePropertyChange("recordSelected", !isRecordSelected(), isRecordSelected());
	                }
	            });

	        // tracking changes to save
	        bindingGroup.addBindingListener(new AbstractBindingListener() {
	            @Override
	            public void targetChanged(Binding binding, PropertyStateEvent event) {
	                // save action observes saveNeeded property
	                setSaveNeeded(true);
	            }
	        });

	        // have a transaction started
	        entityManager.getTransaction().begin();
	    }


	    public boolean isSaveNeeded() {
	        return saveNeeded;
	    }

	    private void setSaveNeeded(boolean saveNeeded) {
	        if (saveNeeded != this.saveNeeded) {
	            this.saveNeeded = saveNeeded;
	            firePropertyChange("saveNeeded", !saveNeeded, saveNeeded);
	        }
	    }

	    public boolean isRecordSelected() {
	        return masterTable.getSelectedRow() != -1;
	    }
	    

	    @Action
	    public void newRecord() {
	        membrosdb.User u = new membrosdb.User();
	        entityManager.persist(u);
	        list.add(u);
	        int row = list.size()-1;
	        masterTable.setRowSelectionInterval(row, row);
	        masterTable.scrollRectToVisible(masterTable.getCellRect(row, 0, true));
	        setSaveNeeded(true);
	    }

	    @Action(enabledProperty = "recordSelected")
	    public void deleteRecord() {
	        int[] selected = masterTable.getSelectedRows();
	        List<membrosdb.User> toRemove = new ArrayList<membrosdb.User>(selected.length);
	        for (int idx=0; idx<selected.length; idx++) {
	            membrosdb.User u = list.get(masterTable.convertRowIndexToModel(selected[idx]));
	            toRemove.add(u);
	            entityManager.remove(u);
	        }
	        list.removeAll(toRemove);
	        setSaveNeeded(true);
	    }
	    

	    @Action(enabledProperty = "saveNeeded")
	    public Task save() {
	        return new SaveTask(getApplication());
	    }

	    private class SaveTask extends Task {
	        SaveTask(org.jdesktop.application.Application app) {
	            super(app);
	        }
	        @Override protected Void doInBackground() {
	            try {
	                entityManager.getTransaction().commit();
	                entityManager.getTransaction().begin();
	            } catch (RollbackException rex) {
	                rex.printStackTrace();
	                entityManager.getTransaction().begin();
	                List><membrosdb.User> merged = new ArrayList<membrosdb.User>(list.size());
	                for (membrosdb.User u : list) {
	                    merged.add(entityManager.merge(u));
	                }
	                list.clear();
	                list.addAll(merged);
	            }
	            return null;
	        }
	        @Override protected void finished() {
	            setSaveNeeded(false);
	        }
	    }

	    /**
	     * An example action method showing how to create asynchronous tasks
	     * (running on background) and how to show their progress. Note the
	     * artificial 'Thread.sleep' calls making the task long enough to see the
	     * progress visualization - remove the sleeps for real application.
	     */
	    @Action
	    public Task refresh() {
	       return new RefreshTask(getApplication());
	    }

	    private class RefreshTask extends Task {
	        RefreshTask(org.jdesktop.application.Application app) {
	            super(app);
	        }
	        @SuppressWarnings("unchecked")
	        @Override protected Void doInBackground() {
	            try {
	                setProgress(0, 0, 4);
	                setMessage("Rolling back the current changes...");
	                setProgress(1, 0, 4);
	                entityManager.getTransaction().rollback();
	                Thread.sleep(1000L); // remove for real app
	                setProgress(2, 0, 4);

	                setMessage("Starting a new transaction...");
	                entityManager.getTransaction().begin();
	                Thread.sleep(500L); // remove for real app
	                setProgress(3, 0, 4);

	                setMessage("Fetching new data...");
	                java.util.Collection data = query.getResultList();
	                for (Object entity : data) {
	                    entityManager.refresh(entity);
	                }
	                Thread.sleep(1300L); // remove for real app
	                setProgress(4, 0, 4);

	                Thread.sleep(150L); // remove for real app
	                list.clear();
	                list.addAll(data);
	            } catch(InterruptedException ignore) { }
	            return null;
	        }
	        @Override protected void finished() {
	            setMessage("Done.");
	            setSaveNeeded(false);
	        }
	    }

	    @Action
	    public void showAboutBox() {
	        if (aboutBox == null) {
	            JFrame mainFrame = MembrosDBApp.getApplication().getMainFrame();
	            aboutBox = new MembrosDBAboutBox(mainFrame);
	            aboutBox.setLocationRelativeTo(mainFrame);
	        }
	        MembrosDBApp.getApplication().show(aboutBox);
	    }

	    /** This method is called from within the constructor to
	     * initialize the form.
	     * WARNING: Do NOT modify this code. The content of this method is
	     * always regenerated by the Form Editor.
	     */
	    @SuppressWarnings("unchecked")
	    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
	    private void initComponents() {
	        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

Problemas apareceram na chamada a Application app...se alguém ja enfrentou esse tipo de problemas no aprendizado
por favor deem uma luz pois, ficaria feliz em Ouvi-los...
Obs.: Suprimi o restante do código pois ficaria grande demais para postar junto com a listagem de componentes de interface utilizados + listagem de colunas a criar...

Abraços e Obrigado!
:roll: :)

analistaadilson

[b]Dark,

Devo criar a tabela na mão e após achar um framework que ele crie as entidades?
como resolver esse probleminha ai amigos?

abraço.[/b] :roll:

Criado 28 de novembro de 2011
Ultima resposta 1 de dez. de 2011
Respostas 5
Participantes 2