Hi There, I'm Starting a Web Project with GWT and some problems about datastore delete by ID.
do not know why having this problem. I think it should be the primary key generation. OBS: getters and setters were not placed in this post Class GRUPO: import javax.jdo.PersistenceManager; import javax.jdo.annotations.Extension; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; import javax.jdo.listener.StoreCallback; import com.metadot.book.connectr.shared.GrupoDTO; @PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true") public class Grupo implements StoreCallback { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) @Extension(vendorName = "datanucleus", key = "gae.encoded- pk", value = "true") private String id; @Persistent private String GrupoNome; @SuppressWarnings("unused") @Persistent private UserAccount userAccount; public Grupo() { } public Grupo(GrupoDTO grupoDTO) { this(); this.setBasicInfo(grupoDTO.getGrupoNome()); } } Class GrupoList.java: import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.metadot.book.connectr.shared.GrupoDTO; public class GrupoList extends Composite { private static GrupoListUiBinder uiBinder = GWT .create(GrupoListUiBinder.class); interface GrupoListUiBinder extends UiBinder<Widget, GrupoList> { } @UiField VerticalPanel gruposPanel; private List<GrupoDTO> grupoDTOs; private final static GrupoServiceAsync grupoService = GWT .create(GrupoService.class); public GrupoList() { initWidget(uiBinder.createAndBindUi(this)); } public GrupoList(List<GrupoDTO> grupoDTOs) { this(); this.grupoDTOs = grupoDTOs; displayGrupos(); } public void showGrupos() { grupoService .getGrupos(new AsyncCallback<List<GrupoDTO>>() { public void onFailure(Throwable caught) { Window.alert("An error occurred"); } public void onSuccess(List<GrupoDTO> result) { grupoDTOs = result; displayGrupos(); } }); } private void displayGrupos() { for (final GrupoDTO grupo: grupoDTOs) { gruposPanel.add(new GrupoItem(grupo)); } } } Class GrupoItem.java: import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import com.metadot.book.connectr.shared.GrupoDTO; public class GrupoItem extends Composite { private static GrupoItemUiBinder uiBinder = GWT .create(GrupoItemUiBinder.class); interface GrupoItemUiBinder extends UiBinder<Widget, GrupoItem> { } @UiField Label title; @UiField Button delete, edit; GrupoDTO grupo; private final static GrupoServiceAsync grupoService = GWT .create(GrupoService.class); public GrupoItem() { initWidget(uiBinder.createAndBindUi(this)); } public GrupoItem(String title, String id) { this(); this.title.setText(title); } public GrupoItem(GrupoDTO grupoDTO) { this(); this.grupo = grupoDTO; this.title.setText(grupo.getGrupoNome()); } public GrupoItem(String title) { this(); this.title.setText(title); } private static void deleteGrupo(GrupoDTO grupo) { grupoService.deleteGrupo(grupo.getId(), new AsyncCallback<Boolean>() { public void onFailure(Throwable caught) { Window.alert("An error occurred"); } public void onSuccess(Boolean result) { ConnectrApp.get().cancelEditFriend(); } }); } @UiHandler("delete") void onDeleteClick(ClickEvent e) { if (Window.confirm("Deseja mesmo cancelar?")) { deleteGrupo(grupo); } } @UiHandler("edit") void onEditClick(ClickEvent e) { // handle click ConnectrApp.get().showEditGrupo(grupo.getId()); } } at last the class GrupoServiceImpl.Java: import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.jdo.PersistenceManager; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.metadot.book.connectr.client.GrupoService; import com.metadot.book.connectr.server.domain.Grupo; import com.metadot.book.connectr.server.domain.UserAccount; import com.metadot.book.connectr.shared.GrupoDTO; @SuppressWarnings("serial") public class GrupoServiceImpl extends RemoteServiceServlet implements GrupoService{ public GrupoServiceImpl() { AppMisc.populateDataStoreOnce(); } public GrupoDTO updateGrupo(GrupoDTO grupoDTO) { if (grupoDTO.getId() == null){ Grupo newGrupo = addGrupo(grupoDTO); return newGrupo.toDTO(); } PersistenceManager pm = PMF.get().getPersistenceManager(); Grupo grupo = null; try { grupo = pm.getObjectById(Grupo.class, grupoDTO.getId()); grupo.updateFromDTO(grupoDTO); } catch (Exception e) { e.printStackTrace(); } finally { pm.close(); } return grupoDTO; } //AQUI E O DELETE public Boolean deleteGrupo(String id) { PersistenceManager pm = PMF.get().getPersistenceManager(); try { Grupo grupo = pm.getObjectById(Grupo.class, id); if (grupo != null) { pm.deletePersistent(pm.getObjectById(Grupo.class, id)); } } finally { pm.close(); } return true; } // criando novo Grupo object no Datastore private Grupo addGrupo(GrupoDTO grupoDTO) { PersistenceManager pm = PMF.get().getPersistenceManager(); Grupo grupo = null; try { //usando um user default UserAccount currentUser = UserAccount.getDefaultUser(); // detached object currentUser = pm.makePersistent(currentUser); // attach grupo = new Grupo(grupoDTO); currentUser.getGrupos().add(grupo); } finally { pm.close(); } return grupo; } public List<GrupoDTO> getGrupos() { List<GrupoDTO> listaGrupos = new ArrayList<GrupoDTO>(); PersistenceManager pm = PMF.get().getPersistenceManager(); try { UserAccount user = UserAccount.getDefaultUser(pm); Set<Grupo> grupos = user.getGrupos(); for (Grupo grupo : grupos) { listaGrupos.add(grupo.getGrupoNomeObj()); } } finally { pm.close(); } return listaGrupos; } } I do not know if I let go of some information. let me know anything I'll post here Grateful now! -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.