Community
Participate
Working Groups
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.
Created attachment 178482 [details] patch
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)
Created attachment 178612 [details] patch This patch fix this exception...
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)
Created attachment 178998 [details] patch
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.
Created attachment 180131 [details] Register Entity in persistence.xml patch
Created attachment 180132 [details] fix tests
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
Patch committed