[
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