This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 160237 - FodDataObjectFactory DataObjects do not override getLookup()
Summary: FodDataObjectFactory DataObjects do not override getLookup()
Status: RESOLVED FIXED
Alias: None
Product: ide
Classification: Unclassified
Component: Features On Demand (show other bugs)
Version: 6.x
Hardware: All All
: P1 blocker (vote)
Assignee: Jaroslav Tulach
URL:
Keywords:
: 160245 (view as bug list)
Depends on:
Blocks:
 
Reported: 2009-03-13 05:51 UTC by _ tboudreau
Modified: 2009-06-21 13:43 UTC (History)
2 users (show)

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description _ tboudreau 2009-03-13 05:51:06 UTC
Trunk build 090312.

I have some simple code which allows me to define a project template in a properties file
(relative/path/in/project=sfs/path/to/template).  I am using FreeMarker for templating.

With ergonomics disabled, this works fine.  With ergonomics enabled, project creation fails with the exception below. 
First there is the following warning:

WARNING [org.openide.loaders]: Should override getLookup() in class
org.netbeans.modules.ide.ergonomics.fod.FodDataObjectFactory$Cookies, e.g.:
[MultiDataObject.this.]getCookieSet().getLookup()

Then I get the exception below.

I must hold ProjectManager.mutex() while creating a project on disk.  But if ergonomics is enabled, the code that looks
up the file encoding calls the default DataObject.getLookup() which invokes getNodeDelegate().getLookup() - and acquires
Children.MUTEX, causing the exception.

I must not create the project outside of ProjectManager.mutex(), and I cannot instantiate a template inside
ProjectManager.mutex()... == I cannot create a project.  Probably either having FodDataObjectFactory's DataObjects
properly override getLookup(), or creating some code path to query file encoding would solve the problem.  But I wonder
how many more problems like this there are.


java.lang.IllegalStateException: Should not acquire Children.MUTEX while holding ProjectManager.mutex()
	at org.openide.nodes.Children$ProjectManagerDeadlockDetector.execute(Children.java:1805)
	at org.openide.util.Mutex.doWrapperAccess(Mutex.java:1320)
	at org.openide.util.Mutex.readAccess(Mutex.java:351)
	at org.openide.loaders.DataObject.getNodeDelegateImpl(DataObject.java:281)
	at org.openide.loaders.DataObject.getLookup(DataObject.java:1010)
	at
org.netbeans.modules.openide.loaders.DataObjectEncodingQueryImplementation.getEncoding(DataObjectEncodingQueryImplementation.java:111)
	at org.netbeans.api.queries.FileEncodingQuery.getEncoding(FileEncodingQuery.java:91)
	at
org.netbeans.modules.templates.ScriptingCreateFromTemplateHandler.createFromTemplate(ScriptingCreateFromTemplateHandler.java:80)
	at org.openide.loaders.MultiDataObject.handleCreateFromTemplate(MultiDataObject.java:711)
	at org.openide.loaders.DataObject$CreateAction.run(DataObject.java:1285)
	at org.openide.loaders.DataObjectPool$1WrapAtomicAction.run(DataObjectPool.java:258)
	at org.openide.filesystems.EventControl.runAtomicAction(EventControl.java:120)
	at org.openide.filesystems.FileSystem.runAtomicAction(FileSystem.java:509)
	at org.openide.loaders.DataObjectPool.runAtomicAction(DataObjectPool.java:270)
	at org.openide.loaders.DataObject.invokeAtomicAction(DataObject.java:873)
	at org.openide.loaders.DataObject.createFromTemplate(DataObject.java:805)
	at org.netbeans.modules.javacard.wizard.JavacardProjectGenerator$FileEntry.create(JavacardProjectGenerator.java:223)
	at org.netbeans.modules.javacard.wizard.JavacardProjectGenerator.doCreateProject(JavacardProjectGenerator.java:102)
	at org.netbeans.modules.javacard.wizard.JavacardProjectGenerator.access$000(JavacardProjectGenerator.java:42)
	at org.netbeans.modules.javacard.wizard.JavacardProjectGenerator$1$1.run(JavacardProjectGenerator.java:75)
	at org.netbeans.modules.javacard.wizard.JavacardProjectGenerator$1$1.run(JavacardProjectGenerator.java:72)
	at org.openide.util.Mutex.writeAccess(Mutex.java:433)
	at org.netbeans.modules.javacard.wizard.JavacardProjectGenerator$1.run(JavacardProjectGenerator.java:72)
	at org.openide.filesystems.EventControl.runAtomicAction(EventControl.java:120)
	at org.openide.filesystems.FileSystem.runAtomicAction(FileSystem.java:509)
	at org.netbeans.modules.javacard.wizard.JavacardProjectGenerator.createProject(JavacardProjectGenerator.java:67)
	at org.netbeans.modules.javacard.wizard.ProjectWizardIterator.instantiate(ProjectWizardIterator.java:118)
	at org.openide.loaders.TemplateWizard$InstantiatingIteratorBridge.instantiate(TemplateWizard.java:1016)
	at org.openide.loaders.TemplateWizard.handleInstantiate(TemplateWizard.java:588)
	at org.openide.loaders.TemplateWizard.instantiateNewObjects(TemplateWizard.java:409)
	at org.openide.loaders.TemplateWizardIterImpl.instantiate(TemplateWizardIterImpl.java:253)
	at org.openide.loaders.TemplateWizardIteratorWrapper.instantiate(TemplateWizardIteratorWrapper.java:165)
	at org.openide.WizardDescriptor.callInstantiateOpen(WizardDescriptor.java:1513)
	at org.openide.WizardDescriptor.callInstantiate(WizardDescriptor.java:1470)
	at org.openide.WizardDescriptor.access$1700(WizardDescriptor.java:121)
	at org.openide.WizardDescriptor$Listener$2$1.run(WizardDescriptor.java:2041)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:573)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1005)
Comment 1 Jaroslav Tulach 2009-03-13 09:31:55 UTC
*** Issue 160245 has been marked as a duplicate of this issue. ***
Comment 2 Jaroslav Tulach 2009-03-13 13:28:28 UTC
ergonomics#e400dd195d74

Btw. ergonomics build is currently intentionally unstable and it may take while for the change to propagate. In case 
you rely on it, transplant this change set to your own repository.
Comment 3 _ tboudreau 2009-03-13 17:20:54 UTC
> Btw. ergonomics build is currently intentionally unstable

By "ergonomics build" you mean http://hg.netbeans.org/main/ ?

If so, what repository should I be using?
Comment 4 Quality Engineering 2009-03-17 08:23:00 UTC
Integrated into 'main-golden', will be available in build *200903170201* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress)
Changeset: http://hg.netbeans.org/main/rev/e400dd195d74
User: Jaroslav Tulach <jtulach@netbeans.org>
Log: #160237: Overriding getLookup() in the FoD data object