Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 324126

Summary: JPA diagram editor fails to update new entity in persistence.xml
Product: [WebTools] Dali JPA Tools Reporter: Ram Venkataswamy <ram.venkataswamy>
Component: Diagram EditorAssignee: Stefan Dimov <stefan.dimov>
Status: RESOLVED FIXED QA Contact: Stefan Dimov <stefan.dimov>
Severity: normal    
Priority: P3    
Version: 0.5   
Target Milestone: 0.5 RC3   
Hardware: PC   
OS: Windows 7   
Whiteboard:
Attachments:
Description Flags
patch
none
patch
none
patch
none
Register Entity in persistence.xml patch
none
fix tests
none
Register Entities in XML none

Description Ram Venkataswamy CLA 2010-08-31 15:16:14 EDT
Build Identifier: M20100818-0800

JPA diagram editor fails to update new entity in persistence.xml

Reproducible: Always

Steps to Reproduce:
- Create a JPA project

- Project | Properties | Java Persistence, under "Persistence class management" select "Annotated classes must be listed in persistence.xml"

- Click Apply/ok

- Now, open JPA diagram editor and create a new entity mapped to a table 

- save jpa diagram

It fails to update the newly created entity in persistence.xml file. As a result a validation error is reported "Class <name> is mapped, but is not included in any persistence unit"

Expected: The JPA diagram to honor "Persistence class management" selection.
Comment 1 Petya Sabeva CLA 2010-09-09 02:47:44 EDT
Created attachment 178482 [details]
patch
Comment 2 Stefan Dimov CLA 2010-09-10 05:19:20 EDT
I've tried the patch and when you create a new entity it's being successfully registered in the persistence.xml, but after that when I rename the entity it's name doesn't change in the persistence.xml and I get error like this:

org.eclipse.core.internal.resources.ResourceException: Resource '/JPA10/src/org/persistence/Entity1.java' does not exist.
at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:326)
at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:200)
at org.eclipse.core.internal.resources.File.getContents(File.java:291)
at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1186)
at org.eclipse.jdt.internal.core.CompilationUnit.getContents(CompilationUnit.java:649)
at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1110)
at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:801)
at org.eclipse.jpt.core.internal.utility.jdt.ASTTools.buildASTRoot(ASTTools.java:50)
at org.eclipse.jpt.core.internal.resource.java.source.SourceCompilationUnit.buildASTRoot(SourceCompilationUnit.java:183)
at org.eclipse.jpt.core.internal.context.java.AbstractJavaPersistentType.buildASTRoot(AbstractJavaPersistentType.java:654)
at org.eclipse.jpt.core.internal.context.java.AbstractJavaPersistentType.validate(AbstractJavaPersistentType.java:595)
at org.eclipse.jpt.core.internal.jpa1.context.persistence.GenericClassRef.validateJavaPersistentType(GenericClassRef.java:293)
at org.eclipse.jpt.core.internal.jpa1.context.persistence.GenericClassRef.validate(GenericClassRef.java:287)
at org.eclipse.jpt.core.internal.context.persistence.AbstractPersistenceUnit.validateClassRefs(AbstractPersistenceUnit.java:1522)
at org.eclipse.jpt.core.internal.context.persistence.AbstractPersistenceUnit.validate(AbstractPersistenceUnit.java:1458)
at org.eclipse.jpt.core.internal.jpa1.context.persistence.GenericPersistence.validatePersistenceUnit(GenericPersistence.java:282)
at org.eclipse.jpt.core.internal.jpa1.context.persistence.GenericPersistence.validate(GenericPersistence.java:234)
at org.eclipse.jpt.core.internal.jpa1.context.persistence.GenericPersistenceXml.validate(GenericPersistenceXml.java:226)
at org.eclipse.jpt.core.internal.jpa1.context.GenericRootContextNode.validate(GenericRootContextNode.java:201)
at org.eclipse.jpt.core.internal.AbstractJpaProject.validate(AbstractJpaProject.java:1303)
at org.eclipse.jpt.core.internal.AbstractJpaProject.validationMessages(AbstractJpaProject.java:1294)
at org.eclipse.jpt.core.internal.validation.JpaValidator.validationMessages(JpaValidator.java:107)
at org.eclipse.jpt.core.internal.validation.JpaValidator.validate(JpaValidator.java:91)
at org.eclipse.jpt.core.internal.validation.JpaValidator.validate(JpaValidator.java:72)
at org.eclipse.wst.validation.Validator$V2.validate(Validator.java:1159)
at org.eclipse.wst.validation.internal.ValManager.validate(ValManager.java:704)
at org.eclipse.wst.validation.internal.ValManager$1.visit(ValManager.java:665)
at org.eclipse.wst.validation.internal.ValManager.accept(ValManager.java:783)
at org.eclipse.wst.validation.internal.ValManager.validate(ValManager.java:669)
at org.eclipse.wst.validation.internal.ValBuilderJob$Visitor.visit(ValBuilderJob.java:321)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:68)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:48)
at org.eclipse.wst.validation.internal.ValBuilderJob.deltaBuild(ValBuilderJob.java:211)
at org.eclipse.wst.validation.internal.ValBuilderJob.run(ValBuilderJob.java:179)
at org.eclipse.wst.validation.internal.ValBuilderJob.runInWorkspace(ValBuilderJob.java:126)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Comment 3 Petya Sabeva CLA 2010-09-10 10:20:23 EDT
Created attachment 178612 [details]
patch

This patch fix this exception...
Comment 4 Stefan Dimov CLA 2010-09-10 12:03:49 EDT
Seems that the patch works, but it messes up with something else.

1. Apply the patch
2. Create JPA project and leave the option, which requires the entities to be listed in the pers...xml
3. Open the diagram for that editor
4. Create two entities through the diagram
5. Create 1-1 bidir rel between them
6. Rename the owner
7. Create a third entity in the diagram
8. Try to create 1-1 bidir rel from the owner of the first rel to the new entity.

Result: The diagram freezes for a while, the rel won't be created and in the error log appears:

java.lang.NullPointerException
at org.eclipse.jpt.ui.diagrameditor.util.JpaArtifactFactory.addOneToOneRelation(JpaArtifactFactory.java:126)
at org.eclipse.jpt.ui.diagrameditor.util.JpaArtifactFactory.addOneToOneBidirectionalRelation(JpaArtifactFactory.java:116)
at org.eclipse.jpt.ui.diagrameditor.relations.OneToOneBiDirRelation.createRelation(OneToOneBiDirRelation.java:95)
at org.eclipse.jpt.ui.diagrameditor.relations.OneToOneBiDirRelation.<init>(OneToOneBiDirRelation.java:37)
at org.eclipse.jpt.ui.diagrameditor.feature.CreateOneToOneBiDirRelationFeature.createRelation(CreateOneToOneBiDirRelationFeature.java:53)
at org.eclipse.jpt.ui.diagrameditor.feature.CreateOneToOneBiDirRelationFeature.createRelation(CreateOneToOneBiDirRelationFeature.java:1)
at org.eclipse.jpt.ui.diagrameditor.feature.CreateRelationFeature.create(CreateRelationFeature.java:57)
at org.eclipse.graphiti.features.impl.AbstractCreateConnectionFeature.execute(AbstractCreateConnectionFeature.java:96)
at org.eclipse.graphiti.internal.command.GenericFeatureCommandWithContext.execute(GenericFeatureCommandWithContext.java:64)
at org.eclipse.graphiti.internal.command.GFPreparableCommand.doExecute(GFPreparableCommand.java:37)
at org.eclipse.emf.transaction.RecordingCommand.execute(RecordingCommand.java:135)
at org.eclipse.emf.workspace.EMFCommandOperation.doExecute(EMFCommandOperation.java:119)
at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:150)
at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:511)
at org.eclipse.emf.workspace.impl.WorkspaceCommandStackImpl.doExecute(WorkspaceCommandStackImpl.java:208)
at org.eclipse.emf.transaction.impl.AbstractTransactionalCommandStack.execute(AbstractTransactionalCommandStack.java:165)
at org.eclipse.graphiti.ui.internal.editor.GFWorkspaceCommandStackImpl.execute(GFWorkspaceCommandStackImpl.java:47)
at org.eclipse.emf.transaction.impl.AbstractTransactionalCommandStack.execute(AbstractTransactionalCommandStack.java:219)
at org.eclipse.graphiti.ui.internal.editor.GFWorkspaceCommandStackImpl.execute(GFWorkspaceCommandStackImpl.java:39)
at org.eclipse.graphiti.internal.command.CommandExec.executeCommand(CommandExec.java:74)
at org.eclipse.graphiti.ui.internal.command.CreateConnectionCommand.execute(CreateConnectionCommand.java:166)
at org.eclipse.gef.commands.CommandStack.execute(CommandStack.java:197)
at org.eclipse.gef.tools.AbstractTool.executeCommand(AbstractTool.java:426)
at org.eclipse.gef.tools.AbstractTool.executeCurrentCommand(AbstractTool.java:443)
at org.eclipse.gef.tools.AbstractConnectionCreationTool.handleCreateConnection(AbstractConnectionCreationTool.java:256)
at org.eclipse.gef.tools.ConnectionCreationTool.handleButtonDown(ConnectionCreationTool.java:77)
at org.eclipse.gef.tools.AbstractTool.mouseDown(AbstractTool.java:1097)
at org.eclipse.gef.EditDomain.mouseDown(EditDomain.java:245)
at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMousePressed(DomainEventDispatcher.java:348)
at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDown(LightweightSystem.java:523)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:185)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Comment 5 Petya Sabeva CLA 2010-09-16 02:48:50 EDT
Created attachment 178998 [details]
patch
Comment 6 Stefan Dimov CLA 2010-09-16 05:04:06 EDT
I'm still able to reproduce the problem, although more rarely than before. Besides, the patch breaks the test plugin - it's no more compileable.
Comment 7 Petya Sabeva CLA 2010-10-04 02:40:22 EDT
Created attachment 180131 [details]
Register Entity in persistence.xml patch
Comment 8 Petya Sabeva CLA 2010-10-04 02:40:43 EDT
Created attachment 180132 [details]
fix tests
Comment 9 Stefan Dimov CLA 2010-10-08 10:25:44 EDT
Created attachment 180489 [details]
Register Entities in XML

The previous patch seems ok with a little correction in it, so I'm attaching this new one, which also merges the previous one with the tests patch
Comment 10 Stefan Dimov CLA 2010-10-08 10:55:00 EDT
Patch committed