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

Max Rydahl Andersen max.andersen at jboss.com
Thu Jul 20 17:18:50 EDT 2006


On Thu, 20 Jul 2006 22:15:54 +0200, Robert Stryker <rob.stryker at jboss.com>  
wrote:

> Yes... at least if the stacktrace you provided is the only way it's  
> slowing
> you down. If it continues to slow you down after the workspace is fully
> loaded and the server plugin is loaded as well, try to get another stack
> trace.
>
> But I really have been unable to get it to cache more than once. If it  
> *is*
> caching more than once, then thats a big problem and I need to find out
> about it.

I might just be seeing this once per startup (i'm restarting my debug  
eclipse often).

But why do we(?) need to open the jar archives every time ? Do/can't we  
cache that info
between startups?

/max

> On 7/20/06, Max Rydahl Andersen <max.andersen at jboss.com> wrote:
>>
>>
>> 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
>>



-- 
--
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