[ https://issues.apache.org/jira/browse/CLEREZZA-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13105293#comment-13105293 ]
Daniel Spicar commented on CLEREZZA-617: ---------------------------------------- Yes, the WebRenderingService Component does not cause this issue per se. The issue arises from SSPs using a WebRenderingService. When these SSPs are compiled, Felix creates a dependency on the package providing the WebRenderingService (which is correct and to be expected). The issue is however, that in the current implementation not the WebRenderingConsumer is wired to the WebRenderingService but instead the Scala Scripting bundle is wired to the WebRenderingService. Because many bundles import (depend on) the Scala scripting bundle, this causes a cascade of refreshes, when the WebRenderingService Provider bundle is refreshed and as a consequence the Scala scripting bundle is refreshed as well. I did not yet try what sorts of side effects would appear but just using the classloader of the bundle that provides the SSP when an SSP is compiled, will have an effect on dependencies created for every bundle registering an SSP. In the described case with the Webrenderingservice, we should get the expected dependency of the consumer on the provider. But irrespective of whether any webrenderingservice is used, dependencies inside SSPs will not not be wired from scala scripting to the respective packages but from the bundles that register the SSP to the respective packages. Now I did not try this but I would expect all bundles registering an SSP to be wired to various scala packages at least and possibly other ones. While this seems to be correct logically it is different from how it used to be until now. Therefore I say there may be unwanted side effects but I don't know. It needs to be tested. > Bug in org.apache.clerezza.platform.typerendering.WebRenderingService causes > a refresh of all bundles > ----------------------------------------------------------------------------------------------------- > > Key: CLEREZZA-617 > URL: https://issues.apache.org/jira/browse/CLEREZZA-617 > Project: Clerezza > Issue Type: Bug > Environment: Mac OSx 10.6.6 > java version "1.6.0_26" > Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425) > Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode) > Reporter: Tsuyoshi Ito > Priority: Critical > Attachments: refreshes.png, renderingservice.zip > > > Updating a bundle which provides a WebrenderingService causes an update of > all bundles (after refresh). Even thougth there are no dependencies between > most of the bundles. > test bundles to reproduce the bug attached. > How to reproduce it: > parent version 0.3-incubating-SNAPSHOT is used in test bundles (probably you > need 0.2-incubating-SNAPSHOT). > attempt 1 > 1. Install and start bundle org.clerezza.app.webrenderingservice > 2. Install and start bundle org.clerezza.app.webrenderingserviceconsumer > 3. Go to http://localhost:8080/admin/renderingtest, The WebrenderingService > produces the text "hello test". WebrenderingService is used in an ssp in the > webrenderingserviceconsumer bundle > 4. update org.clerezza.app.webrenderingservice, > 5. enter ":f refresh", a refresh is necessary. all bundles are updated > Furthermore the following error occured, which makes Clerezza Console > unavailable. > org.apache.clerezza.shell.InterruptibleInputStream$$anon$1@2053076f: caught > java.io.IOException: Bad file descriptor > java.io.IOException: Bad file descriptor > at sun.nio.ch.FileDispatcher.read0(Native Method) > at sun.nio.ch.FileDispatcher.read(FileDispatcher.java:26) > at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:202) > at sun.nio.ch.IOUtil.read(IOUtil.java:175) > at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:144) > at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:48) > at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:92) > at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:86) > at java.io.InputStream.read(InputStream.java:85) > at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:64) > at > org.apache.clerezza.shell.InterruptibleInputStream$$anon$1$$anonfun$act$1$$anonfun$apply$1.apply(InterruptibleInputStream.scala:40) > at > org.apache.clerezza.shell.InterruptibleInputStream$$anon$1$$anonfun$act$1$$anonfun$apply$1.apply(InterruptibleInputStream.scala:35) > at scala.actors.ReactorTask.run(ReactorTask.scala:34) > at scala.actors.Reactor$class.resumeReceiver(Reactor.scala:129) > at > org.apache.clerezza.shell.InterruptibleInputStream$$anon$1.scala$actors$ReplyReactor$$super$resumeReceiver(InterruptibleInputStream.scala:32) > at scala.actors.ReplyReactor$class.resumeReceiver(ReplyReactor.scala:69) > at > org.apache.clerezza.shell.InterruptibleInputStream$$anon$1.resumeReceiver(InterruptibleInputStream.scala:32) > at scala.actors.Actor$class.searchMailbox(Actor.scala:478) > at > org.apache.clerezza.shell.InterruptibleInputStream$$anon$1.searchMailbox(InterruptibleInputStream.scala:32) > at > scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.apply(Reactor.scala:114) > at > scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.apply(Reactor.scala:114) > at scala.actors.ReactorTask.run(ReactorTask.scala:36) > at > scala.concurrent.forkjoin.ForkJoinPool$AdaptedRunnable.exec(ForkJoinPool.java:611) > at > scala.concurrent.forkjoin.ForkJoinTask.quietlyExec(ForkJoinTask.java:422) > at > scala.concurrent.forkjoin.ForkJoinWorkerThread.mainLoop(ForkJoinWorkerThread.java:340) > at > scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:325) > Because Clerezza Console is unavailable I have used > http://localhost:8080/system/console/shell > attempt 2 > 1 .Update bundle org.clerezza.app.webrenderingservice again without visiting > http://localhost:8080/admin/renderingtest first (not compiling the ssp) > 2. enter refresh => no refresh necessary -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira