diff options
author | bvosburgh | 2007-11-30 03:46:46 +0000 |
---|---|---|
committer | bvosburgh | 2007-11-30 03:46:46 +0000 |
commit | e8f0b2b42169f1bb8c0df264a9c506a99cd1d40d (patch) | |
tree | cf67e9aafa9ef28e6c6ccaeb9ff9b6c699c3491d /jpa/plugins/org.eclipse.jpt.core | |
parent | 7ddc1527a1d3ede9bf05bc31c479755802d73f89 (diff) | |
download | webtools.dali-e8f0b2b42169f1bb8c0df264a9c506a99cd1d40d.tar.gz webtools.dali-e8f0b2b42169f1bb8c0df264a9c506a99cd1d40d.tar.xz webtools.dali-e8f0b2b42169f1bb8c0df264a9c506a99cd1d40d.zip |
[211532] create persistence.xml and orm.xml in jobs to fix(?) deadlock
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java index d7f3718019..74c9be8134 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/JpaModel.java @@ -20,6 +20,10 @@ import org.eclipse.core.resources.IResourceProxy; import org.eclipse.core.resources.IResourceProxyVisitor; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.jdt.core.ElementChangedEvent; @@ -207,23 +211,38 @@ public class JpaModel // ********** Facet events ********** + // create persistence.xml and orm.xml in jobs so we don't deadlock + // with the Resource Change Event that comes in from another + // thread after the Eclipse project is created by the project facet + // wizard (which happens before the wizard notifies us); the Artifact + // Edits will hang during #save(), waiting for the workspace lock held + // by the Resource Change Notification loop synchronized void jpaFacetedProjectPostInstall(IProjectFacetActionEvent event) { IProject project = event.getProject().getProject(); IDataModel dataModel = (IDataModel) event.getActionConfig(); - this.createPersistenceXml(project); + this.buildPersistenceXmlJob(project).schedule(); if (dataModel.getBooleanProperty(IJpaFacetDataModelProperties.CREATE_ORM_XML)) { - this.createOrmXml(project); + this.buildOrmXmlJob(project).schedule(); } // assume(?) this is the first event to indicate we need to add the JPA project to the JPA model this.addJpaProject(project); } - private void createPersistenceXml(IProject project) { - PersistenceArtifactEdit pae = - PersistenceArtifactEdit.getArtifactEditForWrite(project); + private Job buildPersistenceXmlJob(final IProject project) { + return new Job("Create persistence.xml") { + @Override + protected IStatus run(IProgressMonitor monitor) { + JpaModel.this.createPersistenceXml(project); + return Status.OK_STATUS; + } + }; + } + + /* private */ void createPersistenceXml(IProject project) { + PersistenceArtifactEdit pae = PersistenceArtifactEdit.getArtifactEditForWrite(project); PersistenceResource resource = pae.getPersistenceResource(JptCorePlugin.persistenceXmlDeploymentURI(project)); // 202811 - do not add content if it is already present @@ -245,9 +264,18 @@ public class JpaModel return resource.getContents(); } - private void createOrmXml(IProject project) { - OrmArtifactEdit oae = - OrmArtifactEdit.getArtifactEditForWrite(project); + private Job buildOrmXmlJob(final IProject project) { + return new Job("Create orm.xml") { + @Override + protected IStatus run(IProgressMonitor monitor) { + JpaModel.this.createOrmXml(project); + return Status.OK_STATUS; + } + }; + } + + /* private */ void createOrmXml(IProject project) { + OrmArtifactEdit oae = OrmArtifactEdit.getArtifactEditForWrite(project); OrmResource resource = oae.getOrmResource(JptCorePlugin.ormXmlDeploymentURI(project)); // 202811 - do not add content if it is already present |