incubator-clerezza-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Spicar (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CLEREZZA-617) Bug in org.apache.clerezza.platform.typerendering.WebRenderingService causes a refresh of all bundles
Date Thu, 15 Sep 2011 08:38:08 GMT

    [ https://issues.apache.org/jira/browse/CLEREZZA-617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13105211#comment-13105211
] 

Daniel Spicar commented on CLEREZZA-617:
----------------------------------------

Further debugging revealed the cause of the unintended dependency:

SSPs are compiled with the CompilerService in the Scala OSGi Services (org.apache.clerezza.scala.scripting)
bundle.
The CompilerService uses TrackingCompiler.scala and on line 81 a ClassLoader of the org.apache.clerezza.scala.scripting
bundle is used to load the compiled SSP class.

Next the class gets instantiated in Platform ScalaServerPages Renderlet (platform.typerendering.scalaserverpages)
bundle at line 186. At this point, Felix creates the package dependency from org.apache.clerezza.scala.scripting
to the bundle providing the the WebRenderingService (here: org.apache.clerezza.org.clerezza.app.webrenderingservice).

My hypothesis is that this is because in the SSP using the WebRenderingService the WebRenderingService
is referenced via fully qualified classname or that the OSGi service lookup is resolved at
the SSPs compile time. Nevertheless there is obviously a reference on org.apache.clerezza.org.clerezza.app.webrenderingservice
in the consuming SSP. Because the compiled SSP is loaded with the classloader of org.apache.clerezza.scala.scripting,
the dependency is not as one would expect.

Intuitively one would expect a dependency from org.apache.clerezza.org.clerezza.app.webrenderingconsumer
on org.apache.clerezza.org.clerezza.app.webrenderingservice. Now the straight forward approach
would be to use the classloader of org.apache.clerezza.org.clerezza.app.webrenderingconsumer
to load the compiled SSP. However this approach would change dependencies on all compiled
SSPs and may have currently unknown side effects.

I don't currently know another viable solution. I though of only referencing the WebRenderingService
as a String in the consuming SSP and ensure, the dependency gets resolved dynamically at execution
time but when the scala scrpiting bundle does not import the webrenderingservice's package
there may be a ClassNotFoundException, as its classloader does not know about the WebRenderingService's
class.

Any thought on this are welcome.

> 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

        

Mime
View raw message