[jbosside-dev] Slooow when i changes stuff...

Max Rydahl Andersen max.andersen at jboss.com
Thu Jul 20 15:31:40 EDT 2006


so this should only affect me *once* per eclipse start ?

/max

> Max:
>
> The big bottleneck in that stacktrace is obviously the following lines:
>
>
>        ArchiveModuleFactory(JBossModuleFactory).cacheModules() line: 86
>        ArchiveModuleFactory(JBossModuleFactory).getModules() line: 66
>        ModuleFactory.getModules() line: 133
>
>
> The problem here is that no matter what I do, I cant get "cacheModules"  
> to
> be called more than once in any session. That method should *only* be  
> called
> once, at the very startup of the model, and I admit it is a decently
> long-running method which goes through the entire workspace looking for
> jars.
>
> (I know what you're going to say... why even go through and LOOK for jars
> all at once? Why not just respond with a module upon request... and the
> reason here is the way I understand WTP to work... the factory has a  
> method
> getModules which obviously gets called at random times, so I kind of  
> need to
> have all possible modules on hand all the time. But a module, the way I  
> use
> it, is basically just a wrapper. Currently all I do is open the file and  
> if
> it's a jar, I say poof... you're a module. )
>
> Anyway... as I said before... cacheModules is only called upon startup of
> the factory. I've tried deleting projects, adding projects, pasting in
> multiple jars at once (which would trigger a whole bunch of resource  
> change
> events etc), and no matter what I do, I *cannot* get cacheModules to be
> called a second time.
>
>
> Some more details:
>
> cacheModules is only called if a variable named pathToModule (a hashmap)  
> is
> null. This is a field inside my ModuleFactoryDelegate  
> (JBossModuleFactory),
> which is an extension point who's constructor is only called once by the  
> wtp
> structure, so there's no question here about multiple factory instances
> being created without my knowledge, each trying to create their own  
> cache.
>
> The variable itself is protected, and there's absolutely no point in my  
> code
> where it is set to null. It starts as null, however once the cache is
> filled, it is never emptied or reset. If you dig into it you'll actually
> find there's two caches. My own cache in JBossModuleFactory, and the wtp
> cache in ModuleFactory. I do reset the wtp cache, but then it just asks  
> me
> for a list of modules again, and I send it my current local cache.  I  
> *have*
> gotten that scenerio to occur, but I've not once been able to get
> cacheModules to be called more than once a session.
>
> Marshall suggests you send me your workspace and a list of repeatable  
> steps
> I could use.
>
> - Rob
>
>
>
> On 7/20/06, Max Rydahl Andersen <max.andersen at jboss.com> wrote:
>>
>>
>> In a decent sized workspace (basically just hibernate labs) I get to  
>> wait
>> many times :(
>>
>> The stacktrace are mostly like this:
>>
>> Is this "just" WTP having fun (i see .getModules() calls) or are we  
>> doing
>> something bad ?
>>
>> Thread [main] (Suspended)
>>         ZipFile.open(String, int, long) line: not available [native
>> method]
>>         JarFile(ZipFile).<init>(File, int) line: 203
>>         JarFile.<init>(File, boolean, int) line: 132
>>         JarFile.<init>(File) line: 97
>>         ArchiveModuleFactory.supports(IResource) line: 65
>>         ArchiveModuleFactory.acceptAddition(IResource) line: 33
>>         JBossModuleFactory$1.visit(IResource) line: 88
>>         Resource$2.visit(IResourceProxy) line: 105
>>         Resource$1.visitElement(ElementTree, IPathRequestor, Object)  
>> line:
>> 57
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 81
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.doIteration(DataTreeNode,
>> IElementContentVisitor)
>> line: 85
>>         ElementTreeIterator.iterate(IElementContentVisitor) line: 126
>>         Project(Resource).accept(IResourceProxyVisitor, int) line: 67
>>         Project(Resource).accept(IResourceVisitor, int, int) line: 103
>>         Project(Resource).accept(IResourceVisitor) line: 87
>>         ArchiveModuleFactory(JBossModuleFactory).cacheModules() line: 86
>>         ArchiveModuleFactory(JBossModuleFactory).getModules() line: 66
>>         ModuleFactory.getModules() line: 133
>>         ServerUtil.getModules() line: 247
>>         ServerUtil.getModule(IProject) line: 47
>>         ResourceManager.publishHandleProjectChange(IResourceDelta) line:
>> 916
>>         ResourceManager$1.visit(IResourceDelta) line: 110
>>         ResourceDelta.accept(IResourceDeltaVisitor, int) line: 67
>>         ResourceDelta.accept(IResourceDeltaVisitor, int) line: 76
>>         ResourceDelta.accept(IResourceDeltaVisitor) line: 48
>>
>>         ResourceManager$ServerResourceChangeListener.resourceChanged(IResourceChangeEvent)
>> line: 104
>>         NotificationManager$2.run() line: 280
>>         SafeRunner.run(ISafeRunnable) line: 37
>>         NotificationManager.notify
>> (ResourceChangeListenerList$ListenerEntry[],
>> IResourceChangeEvent, boolean) line: 274
>>         NotificationManager.broadcastChanges(ElementTree,
>> ResourceChangeEvent,
>> boolean) line: 148
>>         Workspace.broadcastPostChange() line: 256
>>         Workspace.endOperation(ISchedulingRule, boolean,  
>> IProgressMonitor)
>> line:
>> 958
>>         Workspace.run(IWorkspaceRunnable, ISchedulingRule, int,
>> IProgressMonitor)
>> line: 1746
>>
>>         WorkspaceModifyDelegatingOperation(WorkspaceModifyOperation).run(IProgressMonitor)
>> line: 113
>>         WorkspaceOperationRunner.run(boolean, boolean,
>> IRunnableWithProgress,
>> ISchedulingRule) line: 73
>>         WorkspaceOperationRunner.run(boolean, boolean,
>> IRunnableWithProgress)
>> line: 63
>>
>>         CompilationUnitDocumentProvider(TextFileDocumentProvider).executeOperation(TextFileDocumentProvider$DocumentProviderOperation,
>> IProgressMonitor) line: 460
>>
>>         CompilationUnitDocumentProvider(TextFileDocumentProvider).saveDocument(IProgressMonitor,
>> Object, IDocument, boolean) line: 744
>>         CompilationUnitEditor(AbstractTextEditor).performSave(boolean,
>> IProgressMonitor) line: 3796
>>         CompilationUnitEditor.performSave(boolean, IProgressMonitor)  
>> line:
>> 1343
>>         CompilationUnitEditor.doSave(IProgressMonitor) line: 1396
>>         DefaultSaveable.doSave(IProgressMonitor) line: 50
>>         EditorManager$6.run(IProgressMonitor) line: 1247
>>         SaveableHelper$4.run(IProgressMonitor) line: 252
>>         ModalContext.runInCurrentThread(IRunnableWithProgress,
>> IProgressMonitor)
>> line: 369
>>         ModalContext.run(IRunnableWithProgress, boolean,  
>> IProgressMonitor,
>> Display) line: 313
>>         ApplicationWindow$1.run() line: 763
>>         BusyIndicator.showWhile(Display, Runnable) line: 67
>>         WorkbenchWindow(ApplicationWindow).run(boolean, boolean,
>> IRunnableWithProgress) line: 760
>>         WorkbenchWindow.run(boolean, boolean, IRunnableWithProgress)  
>> line:
>> 2283
>>         SaveableHelper.runProgressMonitorOperation(String,
>> IRunnableWithProgress,
>> IWorkbenchWindow) line: 258
>>         EditorManager.saveAll(List, boolean, boolean, IWorkbenchWindow)
>> line:
>> 1260
>>         EditorManager.saveAll(boolean, boolean) line: 1055
>>         WorkbenchPage.saveAllEditors(boolean) line: 2968
>>         SaveAllAction.run() line: 132
>>         SaveAllAction(Action).runWithEvent(Event) line: 499
>>         ActionHandler.execute(ExecutionEvent) line: 119
>>         Command.executeWithChecks(ExecutionEvent) line: 461
>>         ParameterizedCommand.executeWithChecks(Object, Object) line: 424
>>         HandlerService.executeCommand(ParameterizedCommand, Event) line:
>> 160
>>         WorkbenchKeyboard.executeCommand(Binding, Event) line: 466
>>         WorkbenchKeyboard.press(List, Event) line: 799
>>         WorkbenchKeyboard.processKeyEvent(List, Event) line: 846
>>         WorkbenchKeyboard.filterKeySequenceBindings(Event) line: 564
>>         WorkbenchKeyboard.access$3(WorkbenchKeyboard, Event) line: 506
>>         WorkbenchKeyboard$KeyDownFilter.handleEvent(Event) line: 122
>>         EventTable.sendEvent(Event) line: 66
>>         Display.filterEvent(Event) line: 982
>>         StyledText(Widget).sendEvent(Event) line: 927
>>         StyledText(Widget).sendEvent(int, Event, boolean) line: 952
>>         StyledText(Widget).sendEvent(int, Event) line: 937
>>         StyledText(Widget).sendKeyEvent(int, int, int, int, Event) line:
>> 965
>>         StyledText(Widget).sendKeyEvent(int, int, int, int) line: 961
>>         StyledText(Widget).wmChar(int, int, int) line: 1275
>>         StyledText(Control).WM_CHAR(int, int) line: 3346
>>         StyledText(Control).windowProc(int, int, int, int) line: 3246
>>         Display.windowProc(int, int, int, int) line: 4025
>>         OS.DispatchMessageW(MSG) line: not available [native method]
>>         OS.DispatchMessage(MSG) line: 1923
>>         Display.readAndDispatch() line: 2966
>>         Workbench.runEventLoop(Window$IExceptionHandler, Display) line:
>> 1914
>>         Workbench.runUI() line: 1878
>>         Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line:
>> 419
>>         PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor)  
>> line:
>> 149
>>         IDEApplication.run(Object) line: 95
>>         PlatformActivator$1.run(Object) line: 78
>>         EclipseAppLauncher.runApplication(Object) line: 92
>>         EclipseAppLauncher.start(Object) line: 68
>>         EclipseStarter.run(Object) line: 400
>>         EclipseStarter.run(String[], Runnable) line: 177
>>         NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line:
>> not
>> available [native method]
>>         NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
>>         DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
>>         Method.invoke(Object, Object...) line: 585
>>         Main.invokeFramework(String[], URL[]) line: 336
>>         Main.basicRun(String[]) line: 280
>>         Main.run(String[]) line: 977
>>         Main.main(String[]) line: 952
>>
>>
>> --
>> --
>> Max Rydahl Andersen
>> callto://max.rydahl.andersen
>>
>> Hibernate
>> max at hibernate.org
>> http://hibernate.org
>>
>> JBoss Inc
>> max.andersen at jboss.com
>> _______________________________________________
>> jbosside-dev mailing list
>> jbosside-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/jbosside-dev
>>



-- 
--
Max Rydahl Andersen
callto://max.rydahl.andersen

Hibernate
max at hibernate.org
http://hibernate.org

JBoss Inc
max.andersen at jboss.com



More information about the jbosstools-dev mailing list