From: Michel D'H. <mic...@tr...> - 2004-05-28 07:55:37
|
Manuel Santillan Palencia wrote: >We 've got bundle A and B. Bundle B has got a class C, which he exports, >and bundle A imports it. > >Suppose A is already started. > How does A import class C? Is it through a dynamic-import in the manifest? Otherwise, it means that either B is already INSTALLED, or package of class C is exported by another bundle. >Now we start bundle B. In its activator, it contacts bundle B > you mean "it contacts bundle A", I guess! >via RMI and tells him to instantiate class C (by >reflection). The problem is that while bundle B is starting, bundle A >cannot instantiate classes exported by bundle B. > Well, according to me, it could, as explained below. >Usually, this is not a >problem, because the call just waits until bundle B finishes starting. >But in this case, a deadlock occurs, because bundle B won't finish until >bundle A instantiates that class, and A won't instantiate that class >until bundle B finishes. > > >I think it has to do with the fact that while a bundle is STARTING it >is not RESOLVED nor INSTALLED, and therefore no classes can be exported. >Am I right? > > The sequence is INSTALLED, RESOLVED then STARTING. If you take as an example the case of a library bundle, just being INSTALLED is enough to export packages, so bundle A could access class C as soon as bundle B is installed. >I mean, is this "my fault" in the sense that the spec states that the >platform should act in this way, or is it a bug? > > I am just wondering why you are using RMI between bundles. Besides, I miss deeper knowledge on how class C is shared. Regards Michel |