Problemas com Persistencia no NetBeans

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:

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ç!!

Dark Neo,

Obrigado pelas dicas eu estarei verificando e retorno.

:idea:

[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:

[b]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…

[/b]

[code]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();[/code]

[b]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!
[/b] :roll: :slight_smile:

[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: