On 3/26/09 3:50 AM, Jeremias Maerki wrote:
Hmm, I've just built FileInstall from SVN and the class loading issue disappeared. Sorry for that part of the noise. However, the activate->deactivate->activate is still there.
Update stops an active bundle, then restarts it after the update. Then you typically get a refresh, which also stops an active bundle and restarts it. Yes, this sucks, but it is spec.
-> richard
On 26.03.2009 12:26:06 Jeremias Maerki wrote:I'm currently looking at a strange effect that I'm not sure how to deal with. Maybe someone has an idea: I'm using the FileInstall 0.9.0 bundle with Felix 1.4.1. I have a bundle containing an LPR (line printer, port 515) server. Its uses Declarative Services. When I change something in that bundle I rebuild it and copy the JAR (same name and version) into the directory observed by FileInstall. FileInstall notices that and updates the bundle. But when I then send a print job to the LPR server I get this: [lpr.service.osgi.LPRServerImpl] INFO Stopping LPR server...ch.jm.lpr.service.osgi.lprserveri...@a33ce2 [lpr.service.impl.LPRServerImpl] INFO LPR server shutting down... [org.apache.felix.fileinstall] ERROR Updated C:\Dev\xxxxxxxxx\xxxxxx\load\ch.jm.lpr.service.jar [lpr.service.osgi.LPRServerImpl] INFO Starting LPR server...ch.jm.lpr.service.osgi.lprserveri...@151dcd6 [lpr.service.impl.LPRServerImpl] INFO LPR server is listening at port 515 [lpr.service.osgi.LPRServerImpl] INFO Stopping LPR server...ch.jm.lpr.service.osgi.lprserveri...@151dcd6 [lpr.service.osgi.LPRServerImpl] INFO Starting LPR server...ch.jm.lpr.service.osgi.lprserveri...@8d2280 [lpr.service.impl.LPRServerImpl] INFO LPR server is listening at port 515 ERROR: JarContent: Unable to open JAR file. (java.util.zip.ZipException: The system cannot find the path specified) java.util.zip.ZipException: The system cannot find the path specified at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:203) at java.util.jar.JarFile.<init>(JarFile.java:132) at java.util.jar.JarFile.<init>(JarFile.java:97) at org.apache.felix.framework.util.JarFileX.<init>(JarFileX.java:36) at org.apache.felix.framework.util.SecureAction.openJAR(SecureAction.java:515) at org.apache.felix.framework.cache.JarContent.openJarFile(JarContent.java:471) at org.apache.felix.framework.cache.JarContent.getEntryAsBytes(JarContent.java:165) at org.apache.felix.framework.searchpolicy.ContentClassLoader.findClass(ContentClassLoader.java:157) at org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClassFromModule(ContentClassLoader.java:94) at org.apache.felix.framework.searchpolicy.ContentLoaderImpl.getClass(ContentLoaderImpl.java:166) at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:471) at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:185) at org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45) at org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClass(ContentClassLoader.java:118) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at ch.jm.lpr.service.impl.LPRServerImpl.handleConnection(LPRServerImpl.java:69) at ch.jm.lpr.service.impl.LPRServerImpl.access$200(LPRServerImpl.java:21) at ch.jm.lpr.service.impl.LPRServerImpl$1.run(LPRServerImpl.java:54) Exception in thread "LPR Server Thread" java.lang.NoClassDefFoundError: ch/jm/lpr/service/impl/LPRServerImpl$2 at ch.jm.lpr.service.impl.LPRServerImpl.handleConnection(LPRServerImpl.java:69) at ch.jm.lpr.service.impl.LPRServerImpl.access$200(LPRServerImpl.java:21) at ch.jm.lpr.service.impl.LPRServerImpl$1.run(LPRServerImpl.java:54) Debugging, I found that the ModuleImpl's m_contentLoader (ContentLoaderImpl) has a m_content (JarContent) that displays: JAR .\felix-cache\bundle28\version23.1\bundle.jar However, looking at the Felix cache, version23.1 has been removed and replaced by version24.0. It is as if the refresh was incomplete somehow. The component works fine when Felix is freshly started. So it looks to me like the class loader is not replaced and after the update the class loader tries to load from an inexistent/deleted JAR file. The component declaration just in case: <component name="ch.jm.lpr.server"> <implementation class="ch.jm.lpr.service.osgi.LPRServerImpl"/> <property name="service.description" value="JM :: LPR Server"/> <property name="service.vendor" value="Jeremias Märki"/> </component> Am I missing anything? BTW, any reason why the update action of FileInstall is logging with "ERROR" level and not "INFO"? And another thing you can see above: After the update the LPR server is started (activate(ComponentContext)) and stopped (deactivate(ComponentContext)) immediately after that, only to be reactivated again. I'm seeing the same behaviour (but at startup) with another component. Any hints? Thanks a lot, Jeremias MaerkiJeremias Maerki --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

