You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by bu...@apache.org on 2003/10/31 15:42:10 UTC

DO NOT REPLY [Bug 24293] New: - CastorRegistryService deadlocks when calling changeBase method on early init

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24293>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24293

CastorRegistryService deadlocks when calling changeBase method on early init

           Summary: CastorRegistryService deadlocks when calling changeBase
                    method on early init
           Product: Jetspeed
           Version: 1.4b4
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Blocker
          Priority: Other
         Component: Registry
        AssignedTo: jetspeed-dev@jakarta.apache.org
        ReportedBy: vissielmoro@yahoo.es


Hi!

I'm running the JPortal tutorial over JetSpeed version v1.4 b4 along with JBoss-
3.2.2RC2. I have applied the tutorial-1 and tutorial-2 ant targets to the 
jportal base and deployed it to the JBoss server. When running the server 
(Tomcat 4.1.27) it never finishes initializing the Registry and causes a 
deadlock. The server never finishes initializing so no requests can be 
performed.

The problem seems to be that while doing early initialization of the 
CastorRegistryService it tries to change the base directory that contains 
the .xreg files (and therefore initializing the portlets contained over there) 
before setting the init field to true (setInit(true)). I've detected that as a 
part of that changeBase() process a fragment gets loaded that calls again the 
init() method of the CastorRegistryService (this time called late 
initalization) and since this method does nothing but wait until the service 
itself is initialized so a deadlock appears because the same thread who calls 
the changeBase() method on init(ServletConfig) it also finishes calling init() 
and never being able to call the setInit(true).

Here is the calling stack in reverse order:

Thread.sleep(long) line: not available [native method]
CastorRegistryService.init() line: 529    <----
TurbineServices(BaseServiceBroker).getService(String) line: 304
Registry.getService() line: 101
Registry.getEntry(String, String) line: 135
BasePortletEntry.getParentEntry() line: 327
BasePortletEntry.getClassname() line: 223
GeneratedMethodAccessor112.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object[]) line: 324
FieldHandlerImpl.getValue(Object) line: 373
FieldValidator.validate(Object, ValidationContext) line: 190
XMLClassDescriptorAdapter(XMLClassDescriptorImpl).validate(Object, 
ValidationContext) line: 885
FieldValidator(Validator).validate(Object, ValidationContext) line: 122
FieldValidator.validate(Object, ValidationContext) line: 233
XMLClassDescriptorAdapter(XMLClassDescriptorImpl).validate(Object, 
ValidationContext) line: 885
Validator.validate(Object, ValidationContext) line: 122
UnmarshalHandler.endElement(String) line: 690
DOMEventProducer.process(Element, DocumentHandler) line: 249
DOMEventProducer.process(Node, DocumentHandler) line: 182
DOMEventProducer.processChildren(Node, DocumentHandler) line: 333
DOMEventProducer.process(Document, DocumentHandler) line: 134
DOMEventProducer.process(Node, DocumentHandler) line: 170
DOMEventProducer.start() line: 110
Unmarshaller.unmarshal(EventProducer) line: 507
Unmarshaller.unmarshal(Node) line: 591
CastorRegistryService.loadFragment(String) line: 601
RegistryWatcher.findFiles(File) line: 249
RegistryWatcher.changeBase(File) line: 214
CastorRegistryService.init(ServletConfig) line: 458   <-----
CastorRegistryService(TurbineBaseService).init(Object) line: 108
TurbineServices(BaseInitableBroker).initClass(String, Object) line: 149
TurbineServices(BaseServiceBroker).doInitService(Object, String) line: 224
TurbineServices(BaseServiceBroker).initServices(Object, boolean) line: 193
Turbine.init() line: 257
....

I have applied the FixPack #20076 that sincrhonizes the watcher but same 
behaviour.
I have also placed the call to setInit(true) before the changeBase() call and 
it seems to work but I´m getting lots of NullPointerExceptions while getEntry() 
looks for some fragments that are not yet initialized.

Can someone look at this please?

Thanks mates.

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org