Hello,

We solved our problem!
We had to set the classloader to the classes' classloader and put some
internal class in the bootdelegation. Hopefully this post is usefull
for others.

Activator.java:

        final ClassLoader cl = this.getClass().getClassLoader();

        Thread thread = new Thread() {
            @Override
            public void run() {
                Thread.currentThread().setContextClassLoader(cl);

                PrifesPrinterService serv = new PrifesPrinterService();
                PrifesPrinter pp = serv.getPrifesPrinterPort();
                System.out.println(pp.sendData(1, 1, "Test"));
            }
        };

        thread.start();

master bundle:

...
configMap.put(Constants.FRAMEWORK_BOOTDELEGATION,
"com.sun.xml.internal.ws.api.message");
...
Felix felix = new Felix(configMap, list);
...

Greetings,

Stefan


On 4/10/08, bitrain _ <[EMAIL PROTECTED]> wrote:
> Hello,
>
>  I cleaned up the sources a bit and pasted them below. The code for the
>  master bundle is not very interesting (it shows a gui with a fileopen
>  button), apart from the method which loads the bundles and the method
>  which loads felix.  Both are at the bottom of the post.
>
>  Hopefully somebody can help us.
>
>  Greetings,
>
>  Stefan
>
>  Activator.java for dynamically loaded bundle:
>
>
>  package nl.prifes.printer.log;
>
>
> import org.osgi.framework.BundleActivator;
>  import org.osgi.framework.BundleContext;
>
>  public class Activator implements BundleActivator{
>     private BundleContext m_context = null;
>
>     public void start(BundleContext context) throws Exception {
>         System.out.println("Loading log bundle");
>         m_context = context;
>
>
>         final ClassLoader cl = context.getClass().getClassLoader();
>
>         System.out.println(cl);
>
>         Thread thread = new Thread() {
>             @Override
>             public void run() {
>                 System.out.println("pre" +
>  Thread.currentThread().getContextClassLoader());
>
>                 Thread.currentThread().setContextClassLoader(cl);
>
>                 PrifesPrinterService serv = new PrifesPrinterService();
>
>                 System.out.println("cla" +
>  Thread.currentThread().getContextClassLoader());
>                 PrifesPrinter pp = serv.getPrifesPrinterPort();
>                 System.out.println("sendpre");
>
>                 System.out.println(pp.sendData(1, 1, "Test"));
>             }
>         };
>
>         thread.start();
>     }
>
>
>     public void stop(BundleContext context) throws Exception {
>         System.out.println("Stopping log bundle");
>         m_context = null;
>     }
>  }
>
>  pom.xml for dynamically loaded bundle:
>
>  <project>
>   <modelVersion>4.0.0</modelVersion>
>   <packaging>bundle</packaging>
>   <name>PRIFES Printer log</name>
>   <description>Does something with logs</description>
>   <groupId>nl.prifes.printer</groupId>
>   <artifactId>printerlogbundle</artifactId>
>   <version>1.0.0</version>
>
>   <dependencies>
>     <dependency>
>       <groupId>org.apache.felix</groupId>
>       <artifactId>org.osgi.core</artifactId>
>       <version>1.0.0</version>
>     </dependency>
>     <dependency>
>       <groupId>nl.prifes.printer</groupId>
>       <artifactId>prifesprinter</artifactId>
>       <version>1.0.0</version>
>     </dependency>
>     <dependency>
>           <groupId>com.sun.xml.ws</groupId>
>           <artifactId>jaxws-rt</artifactId>
>           <version>2.0_03-SNAPSHOT</version>
>     </dependency>
>   </dependencies>
>
>   <build>
>     <plugins>
>       <plugin>
>         <groupId>org.apache.felix</groupId>
>         <artifactId>maven-bundle-plugin</artifactId>
>         <version>1.4.0</version>
>         <extensions>true</extensions>
>         <configuration>
>           <instructions>
>             <Private-Package>nl.prifes.printer.log</Private-Package>
>             
> <Bundle-Activator>nl.prifes.printer.log.Activator</Bundle-Activator>
>             
> <Import-Package>javax.jws,javax.xml.bind,javax.xml.bind.annotation,javax.xml.namespace,javax.xml.ws,nl.prifes.printer.host.service,org.osgi.framework;version="1.3"</Import-Package>
>           </instructions>
>         </configuration>
>       </plugin>
>
>           <plugin>
>                 <groupId>org.codehaus.mojo</groupId>
>                 <artifactId>jaxws-maven-plugin</artifactId>
>                 <executions>
>                         <execution>
>                                 <goals>
>                                         <goal>wsimport</goal>
>                                 </goals>
>                                 <configuration>
>                                         <wsdlUrls>
>                                                 
> <wsdlUrl>http://localhost:8084/prifesserver/PrifesPrinter?wsdl</wsdlUrl>
>                                         </wsdlUrls>
>                                         
> <packageName>nl.prifes.printer.log</packageName>
>                                 </configuration>
>                         </execution>
>                 </executions>
>       </plugin>
>
>       <plugin>
>         <artifactId>maven-compiler-plugin</artifactId>
>         <version>RELEASE</version>
>         <configuration>
>           <source>1.5</source>
>           <target>1.5</target>
>         </configuration>
>       </plugin>
>     </plugins>
>   </build>
>
>   <repositories>
>       <repository>
>           <id>maven-repository.dev.java.net</id>
>           <name>maven</name>
>           <url>http://download.java.net/maven/1/</url>
>           <layout>legacy</layout>
>       </repository>
>       <repository>
>           <id>maven2-repository.dev.java.net</id>
>           <name>maven2</name>
>           <url>http://download.java.net/maven/2/</url>
>       </repository>
>   </repositories>
>   <pluginRepositories>
>       <pluginRepository>
>           <id>maven2-repository.dev.java.net</id>
>           <url>http://download.java.net/maven/2/</url>
>       </pluginRepository>
>   </pluginRepositories>
>  </project>
>
>  Bundle load method:
>
>     private void actionPerformed(java.awt.event.ActionEvent evt) {
>         if(evt.getSource()  == openButton){
>             JFileChooser fc = new JFileChooser();
>             int retVal = fc.showOpenDialog(ServiceList.this);
>             if(retVal == JFileChooser.APPROVE_OPTION){
>                 File file = fc.getSelectedFile();
>                 final String filePath = file.toURI().toString();
>                 System.out.println(filePath);
>
>                 try {
>                     Bundle b = m_act.getContext().installBundle(filePath);
>                     System.out.println(b.getHeaders().toString());
>                     ServiceItem si = new ServiceItem(m_act, b);
>                     addItem(si);
>                 }
>                 catch (BundleException ex) {
>
>  Logger.getLogger(ServiceList.class.getName()).log(Level.SEVERE, "Boem
>  while installing service", ex);
>                 }
>             }
>         }
>     }
>
>
>  Felix load method:
>
>  public static void main(String[] argv) throws Exception{
>         final File cachedir =
>  File.createTempFile("felix.example.servicebased", null);
>         cachedir.delete();
>         Runtime.getRuntime().addShutdownHook(new Thread() {
>             @Override
>             public void run(){
>                 deleteFileOrDir(cachedir);
>             }
>         });
>
>         Map configMap = new StringMap(false);
>         configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
>             "org.osgi.framework; version=1.3.0," +
>             "org.osgi.service.packageadmin; version=1.2.0," +
>             "org.osgi.service.startlevel; version=1.0.0," +
>             "org.osgi.service.url; version=1.0.0," +
>             "org.osgi.util.tracker; version=1.3.2," +
>             "nl.prifes.printer.host.service; version=1.0.0," +
>             "javax.swing," +
>             
> "javax.jws,javax.xml.bind.annotation,javax.xml.bind,javax.xml.ws,javax.xml.namespace"
>             );
>         configMap.put(AutoActivator.AUTO_START_PROP + ".1",""
>             );
>         configMap.put(FelixConstants.LOG_LEVEL_PROP, "1");
>         configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP,
>  cachedir.getAbsolutePath());
>
>         // Create list to hold custom framework activators.
>         List list = new ArrayList();
>         // Add activator to process auto-start/install properties.
>         list.add(new AutoActivator(configMap));
>         // Add our own activator.
>         list.add(new Activator());
>
>         try{
>             // Now create an instance of the framework.
>             Felix felix = new Felix(configMap, list);
>             felix.start();
>         }
>         catch (Exception ex){
>             System.err.println("Could not create framework: " + ex);
>             ex.printStackTrace();
>             System.exit(-1);
>
>         }
>     }
>
>  On 4/10/08, Marcel Offermans <[EMAIL PROTECTED]> wrote:
>  > Hello Stefan,
>  >
>  >  On Apr 9, 2008, at 13:05 , bitrain _ wrote:
>  >
>  >
>  > > We tried setting the classloader in our own thread:
>  > >
>  > >       final ClassLoader cl =
>  > context.getClass().getClassLoader();
>  > >       Thread thread = new Thread() {
>  > >           public void run() {
>  > >
>  > Thread.currentThread().setContextClassLoader(cl);
>  > >
>  > >               PrifesPrinterService serv = new PrifesPrinterService();
>  > >               PrifesPrinter pp = serv.getPrifesPrinterPort();
>  > >               System.out.println(pp.sendData(1, 1,
>  > "Test"));
>  > >           }
>  > >       };
>  > >       thread.start();
>  > >
>  > > The context is the bundlecontext from the bundle which contains the
>  > > classes. We also tried getting the classloader from the master bundle,
>  > > but they all produce the same runtime modeler error.
>  > >
>  >
>  >  Hard to tell from just your messages what is going on exactly. The best
>  > advice I can give you is to use the debugger to figure out exactly what's
>  > going on inside that code. Try and instrument your classloaders if
>  > necessary.
>  >
>  >
>  >  Greetings, Marcel
>  >
>  >
>  > ---------------------------------------------------------------------
>  >  To unsubscribe, e-mail:
>  > [EMAIL PROTECTED]
>  >  For additional commands, e-mail: [EMAIL PROTECTED]
>  >
>  >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to