David, Tony; We have looked into this and there are concurrency issues
with threading file registry tasks.  Therefore, the current behavior
cannot be changed.  FileRegistry operations should be pretty quick,
with the exception of slow database connectors.  If some of the
connectors are not necessary for doing your build, a potential
workaround is to place these database connectors in a separate project
and close the project when running the build.  We have accelerated the
introspection time for various databases for 3.4 so that it can
retrieve some metadata by simply opening the connector file
(e.g. .tdb) instead of going to the database to register the base URI.

-- Scott

On Jan 10, 12:39 pm, David <[email protected]> wrote:
> Hi, TBC folks.
>
> Back in July 2010, my colleague mailed an issue to the TBC support
> email list, and Scott confirmed that it was a bug.  I'm pinging you
> now to see if any progress was made on fixing this bug.  The details
> of the July support interaction are quoted below.
>
>    -David Lum
>
> =============================================================
> From: Scott Henninger [mailto:[email protected]]
> Sent: Wednesday, July 28, 2010 10:56 PM
> To: Tony Clarke
> Subject: Re: reporting a defect with composer
>
> Tony, we appear to have two defect reports here.  The first is that
> some FileRegistry tasks are not placed in the background.  This has
> been logged and we will look into possible fixes after the 3.4
> released, which is scheduled for September.
>
> The second is that somehow that you got the email
> [email protected], and that it somehow maps to a
> [email protected].  I'll look into that as well.
>
> For the record it's [email protected] - 
> seehttp://www.topquadrant.com/products/support.html
>
> -- Scott
>
> On 7/28/10 5:07 PM, Tony Clarke wrote:
> Ref: Defect 455
>
> Hi Support,
> I would like to report a usability defect with Topbraid composer. I
> couldn’t find any other place to report defects so I decided to email
> support directly. I have a license and my license key is
>
> The defect exists in the standard edition 3.3.1 and maestro editor
> 3.3.2.
>
> Here is what I observer….
>
> The Topbraid editor registers a workspace change listener:
> org.topbraidcomposer.core.io.TBCFileRegistry
>
> Here is an example stack of where Topbraid registers the workspace
> change listener.
>
> Thread [main] (Suspended (breakpoint at line 67 in
> org.eclipse.core.internal.events.ResourceChangeListenerList))
>
> org.eclipse.core.internal.events.ResourceChangeListenerList.add(org.eclipse.core.resources.IResourceChangeListener,
> int) line: 67
>
> org.eclipse.core.internal.events.NotificationManager.addListener(org.eclipse.core.resources.IResourceChangeListener,
> int) line: 108
>
> org.eclipse.core.internal.resources.Workspace.addResourceChangeListener(org.eclipse.core.resources.IResourceChangeListener)
> line: 260
>                 org.topbraidcomposer.core.io.TBCFileRegistry.init()
> line: 280
>
> org.topbraidcomposer.live.server.TBCMEPersonality(org.topbraid.core.TBPersonality).init()
> line: 283
>
> org.topbraidcomposer.live.server.TBCMEPersonality(org.topbraidcomposer.editors.utils.AbstractTBCPersonality).init()
> line: 44
>                 org.topbraid.core.TB.<clinit>() line:
> 116
>
> org.topbraidcomposer.core.session.DisplayLabelsUpdater.get() line:
> 37
>
> org.topbraidcomposer.navigation.subclassestree.SubClassesTreeView(org.topbraidcomposer.navigation.AbstractPredicateTreeView).<init>(com.hp.hpl.jena.rdf.model.Property)
> line: 89
>
> org.topbraidcomposer.navigation.subclassestree.SubClassesTreeView.<init>()
> line: 114
>
> sun.reflect.NativeConstructorAccessorImpl.newInstance0(java.lang.reflect.Constructor,
> java.lang.Object[]) line: not available [native method]
>
> sun.reflect.NativeConstructorAccessorImpl.newInstance(java.lang.Object[])
> line: 39
>
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(java.lang.Object[])
> line: 27
>
> java.lang.reflect.Constructor<T>.newInstance(java.lang.Object...)
> line: 513
>                 java.lang.Class<T>.newInstance0() line: 355
>                 java.lang.Class<T>.newInstance() line: 308
>
> org.eclipse.core.internal.registry.osgi.EquinoxRegistryStrategy(org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI).createExecutableExtension(org.eclipse.core.runtime.spi.RegistryContributor,
> java.lang.String, java.lang.String) line: 170
>
> org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(org.eclipse.core.runtime.spi.RegistryContributor,
> java.lang.String, java.lang.String) line: 874
>
> org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(java.lang.String)
> line: 243
>
> org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(java.lang.String)
> line: 51
>                 org.eclipse.ui.internal.WorkbenchPlugin$1.run() line:
> 267
>
> org.eclipse.swt.custom.BusyIndicator.showWhile(org.eclipse.swt.widgets.Display,
> java.lang.Runnable) line: 70
>
> org.eclipse.ui.internal.WorkbenchPlugin.createExtension(org.eclipse.core.runtime.IConfigurationElement,
> java.lang.String) line: 263
>
> org.eclipse.ui.internal.registry.ViewDescriptor.createView() line:
> 63
>
> org.eclipse.ui.internal.ViewReference.createPartHelper() line:
> 324
>                 org.eclipse.ui.internal.ViewReference.createPart()
> line: 226
>
> org.eclipse.ui.internal.ViewReference(org.eclipse.ui.internal.WorkbenchPartReference).getPart(boolean)
> line: 595
>
> org.eclipse.ui.internal.ViewPane(org.eclipse.ui.internal.PartPane).setVisible(boolean)
> line: 313
>                 org.eclipse.ui.internal.ViewPane.setVisible(boolean)
> line: 529
>
> org.eclipse.ui.internal.presentations.PresentablePart.setVisible(boolean)
> line: 180
>
> org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(org.eclipse.ui.presentations.IPresentablePart)
> line: 270
>
> org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(org.eclipse.ui.presentations.IPresentablePart)
> line: 65
>
> org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(org.eclipse.ui.presentations.IPresentablePart)
> line: 473
>
> org.eclipse.ui.internal.ViewStack(org.eclipse.ui.internal.PartStack).refreshPresentationSelection()
> line: 1256
>
> org.eclipse.ui.internal.ViewStack(org.eclipse.ui.internal.PartStack).createControl(org.eclipse.swt.widgets.Composite,
> org.eclipse.ui.presentations.StackPresentation) line:
> 668
>
> org.eclipse.ui.internal.ViewStack(org.eclipse.ui.internal.PartStack).createControl(org.eclipse.swt.widgets.Composite)
> line: 576
>
> org.eclipse.ui.internal.ViewSashContainer(org.eclipse.ui.internal.PartSashContainer).createControl(org.eclipse.swt.widgets.Composite)
> line: 568
>
> org.eclipse.ui.internal.PerspectiveHelper.activate(org.eclipse.swt.widgets.Composite)
> line: 272
>                 org.eclipse.ui.internal.Perspective.onActivate() line:
> 982
>                 org.eclipse.ui.internal.WorkbenchPage.onActivate()
> line: 2626
>                 org.eclipse.ui.internal.WorkbenchWindow$27.run() line:
> 2965
>
> org.eclipse.swt.custom.BusyIndicator.showWhile(org.eclipse.swt.widgets.Display,
> java.lang.Runnable) line: 70
>
> org.eclipse.ui.internal.WorkbenchWindow.setActivePage(org.eclipse.ui.IWorkbenchPage)
> line: 2946
>                 org.eclipse.ui.internal.WorkbenchWindow
> $21.runWithException() line: 2263
>                 org.eclipse.ui.internal.WorkbenchWindow
> $21(org.eclipse.ui.internal.StartupThreading$StartupRunnable).run()
> line: 31
>                 org.eclipse.swt.widgets.RunnableLock.run() line:
> 35
>
> org.eclipse.ui.internal.UISynchronizer(org.eclipse.swt.widgets.Synchronizer).runAsyncMessages(boolean)
> line: 134
>
> org.eclipse.swt.widgets.Display.runAsyncMessages(boolean) line:
> 3855
>                 org.eclipse.swt.widgets.Display.readAndDispatch()
> line: 3476
>
> org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor(org.eclipse.ui.application.WorkbenchAdvisor).openWindows()
> line: 803
>                 org.eclipse.ui.internal.Workbench
> $28.runWithException() line: 1384
>                 org.eclipse.ui.internal.Workbench
> $28(org.eclipse.ui.internal.StartupThreading$StartupRunnable).run()
> line: 31
>                 org.eclipse.swt.widgets.RunnableLock.run() line:
> 35
>
> org.eclipse.ui.internal.UISynchronizer(org.eclipse.swt.widgets.Synchronizer).runAsyncMessages(boolean)
> line: 134
>
> org.eclipse.swt.widgets.Display.runAsyncMessages(boolean) line:
> 3855
>                 org.eclipse.swt.widgets.Display.readAndDispatch()
> line: 3476
>                 org.eclipse.ui.internal.Workbench.runUI() line:
> 2316
>                 org.eclipse.ui.internal.Workbench.access
> $4(org.eclipse.ui.internal.Workbench) line: 2221
>                 org.eclipse.ui.internal.Workbench$5.run() line:
> 500
>
> org.eclipse.core.databinding.observable.Realm.runWithDefault(org.eclipse.core.databinding.observable.Realm,
> java.lang.Runnable) line: 332
>
> org.eclipse.ui.internal.Workbench.createAndRunWorkbench(org.eclipse.swt.widgets.Display,
> org.eclipse.ui.application.WorkbenchAdvisor) line: 493
>
> org.eclipse.ui.PlatformUI.createAndRunWorkbench(org.eclipse.swt.widgets.Display,
> org.eclipse.ui.application.WorkbenchAdvisor) line: 149
>
> org.eclipse.ui.internal.ide.application.IDEApplication.start(org.eclipse.equinox.app.IApplicationContext)
> line: 113
>
> org.eclipse.equinox.internal.app.EclipseAppHandle.run(java.lang.Object)
> line: 194
>
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(java.lang.Object)
> line: 110
>
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(java.lang.Object)
> line: 79
>
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(java.lang.Object)
> line: 368
>
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(java.lang.String[],
> java.lang.Runnable) line: 179
>
> sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method,
> java.lang.Object, java.lang.Object[]) line: not available [native
> method]
>
> sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object,
> java.lang.Object[]) line: 39
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object,
> java.lang.Object[]) line: 25
>                 java.lang.reflect.Method.invoke(java.lang.Object,
> java.lang.Object...) line: 597
>
> org.eclipse.equinox.launcher.Main.invokeFramework(java.lang.String[],
> java.net.URL[]) line: 559
>
> org.eclipse.equinox.launcher.Main.basicRun(java.lang.String[]) line:
> 514
>
> org.eclipse.equinox.launcher.Main.run(java.lang.String[]) line:
> 1311
>
> Then later during a project build the TBCRegistry runs as follows:
>
> Thread [main] (Suspended (breakpoint at line 363 in
> org.eclipse.jface.operation.ModalContext))
>
> org.eclipse.jface.operation.ModalContext.run(org.eclipse.jface.operation.IRunnableWithProgress,
> boolean, org.eclipse.core.runtime.IProgressMonitor,
> org.eclipse.swt.widgets.Display) line: 363
>
> org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog(org.eclipse.jface.dialogs.ProgressMonitorDialog).run(boolean,
> boolean, org.eclipse.jface.operation.IRunnableWithProgress) line:
> 507
>
> org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(boolean,
> boolean, org.eclipse.jface.operation.IRunnableWithProgress) line:
> 275
>                 org.eclipse.ui.internal.progress.ProgressManager
> $4.run() line: 966
>
> org.eclipse.swt.custom.BusyIndicator.showWhile(org.eclipse.swt.widgets.Display,
> java.lang.Runnable) line: 70
>
> org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(java.lang.Runnable,
> org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog) line:
> 1001
>
> org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(org.eclipse.jface.operation.IRunnableWithProgress)
> line: 976
>                 org.topbraidcomposer.core.io.TBCFileRegistry$6.run()
> line: 380
>                 org.eclipse.swt.widgets.RunnableLock.run() line:
> 35
>
> org.eclipse.ui.internal.UISynchronizer(org.eclipse.swt.widgets.Synchronizer).runAsyncMessages(boolean)
> line: 134
>
> org.eclipse.swt.widgets.Display.runAsyncMessages(boolean) line:
> 3855
>                 org.eclipse.swt.widgets.Display.readAndDispatch()
> line: 3476
>
> org.eclipse.ui.internal.Workbench.runEventLoop(org.eclipse.jface.window.Window
> $IExceptionHandler, org.eclipse.swt.widgets.Display) line:
> 2405
>                 org.eclipse.ui.internal.Workbench.runUI() line:
> 2369
>                 org.eclipse.ui.internal.Workbench.access
> $4(org.eclipse.ui.internal.Workbench) line: 2221
>                 org.eclipse.ui.internal.Workbench$5.run() line:
> 500
>
> org.eclipse.core.databinding.observable.Realm.runWithDefault(org.eclipse.core.databinding.observable.Realm,
> java.lang.Runnable) line: 332
>
> org.eclipse.ui.internal.Workbench.createAndRunWorkbench(org.eclipse.swt.widgets.Display,
> org.eclipse.ui.application.WorkbenchAdvisor) line: 493
>
> org.eclipse.ui.PlatformUI.createAndRunWorkbench(org.eclipse.swt.widgets.Display,
> org.eclipse.ui.application.WorkbenchAdvisor) line: 149
>
> org.eclipse.ui.internal.ide.application.IDEApplication.start(org.eclipse.equinox.app.IApplicationContext)
> line: 113
>
> org.eclipse.equinox.internal.app.EclipseAppHandle.run(java.lang.Object)
> line: 194
>
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(java.lang.Object)
> line: 110
>
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(java.lang.Object)
> line: 79
>
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(java.lang.Object)
> line: 368
>
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(java.lang.String[],
> java.lang.Runnable) line: 179
>
> sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method,
> java.lang.Object, java.lang.Object[]) line: not available [native
> method]
>
> sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object,
> java.lang.Object[]) line: 39
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object,
> java.lang.Object[]) line: 25
>                 java.lang.reflect.Method.invoke(java.lang.Object,
> java.lang.Object...) line: 597
>
> org.eclipse.equinox.launcher.Main.invokeFramework(java.lang.String[],
> java.net.URL[]) line: 559
>
> org.eclipse.equinox.launcher.Main.basicRun(java.lang.String[]) line:
> 514
>
> org.eclipse.equinox.launcher.Main.run(java.lang.String[]) line:
> 1311
>
> From the code you can see that this sets the mouse pointer is set to a
> busy icon.
>
> I don’t know what this call back does exactly but I observe that  if a
> user is doing a build in the background and use the mouse to open a
> menu, e.g. the Workbench File menu, then as soon as the TBCRegistry
> call back happens the menu will lose focus. If the user tries to open
> the menu again (or any other UI operation) the same loss of focus will
> occur; as long as the build is ongoing.
>
> The impact is that we effectively lose the ability to do builds in the
> background.
>
> Tony

-- 
You received this message because you are subscribed to the Google
Group "TopBraid Suite Users", the topics of which include TopBraid Composer,
TopBraid Live, TopBraid Ensemble, SPARQLMotion and SPIN.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/topbraid-users?hl=en

Reply via email to