Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbvosburgh2007-11-30 03:46:46 +0000
committerbvosburgh2007-11-30 03:46:46 +0000
commite8f0b2b42169f1bb8c0df264a9c506a99cd1d40d (patch)
treecf67e9aafa9ef28e6c6ccaeb9ff9b6c699c3491d /jpa/plugins/org.eclipse.jpt.core
parent7ddc1527a1d3ede9bf05bc31c479755802d73f89 (diff)
downloadwebtools.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.java44
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

Back to the top