You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by fabiolf <fa...@gmail.com> on 2012/04/14 18:08:07 UTC

Using iPOJO API to create components and instances

Hi All,

I'm trying to create components and an instances using the iPOJO API. My
objective is to build a layer able to create and instantiate ipojo
components from regular deployed bundles. So, in this scenery, I have a
bundle who provides a service and another bundle that consumes the service.
I want to create two ipojo components, one provider and one consumer. My
code for creating my provider is shown below (got it from the tutorial):

new PrimitiveComponentType()
.setBundleContext(m_context)
.setClassName(ProviderA.class.getName())
.setValidateMethod("start")
.setInvalidateMethod("stop")
.addService(new Service())
.createInstance("TestProviderA");


In my first attempt to archive my objective I have received an exception: 

java.lang.IllegalStateException: An interface cannot be loaded

The interface can be found in a started bundle. So I got the bundle context
from that bundle with m_context.getBundle(55).getBundleContext(). Then I
received another exception:

java.lang.IllegalStateException: An exception occurs during implementation
class manipulation : cannot found the class file
org/test/iPOJO/providerA/ProviderA.class

I realized, then, that the code to create the ipojo component must be inside
the same bundle who will contain the component. I think this is due to using
multiple class loaders. Am I right? Why can't I create a component for a
bundle inside another bundle? Are there any plans to let this happen?

Thanks in advance!
Fabio

--
View this message in context: http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4881802.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Using iPOJO API to create components and instances

Posted by fabiolf <fa...@gmail.com>.
Hello!

It worked! It seems that I was messing up with my providerA, the class I
was trying to instantiate with the API. Because of that, the API wasn't
able to create a instance of it. Now everything is right! Thanks for the
detailed example!

Beste Regards,
Fabio

On Tue, Apr 17, 2012 at 3:37 AM, clement escoffier [via Apache Felix] <
ml-node+s18485n4889185h51@n6.nabble.com> wrote:

> Hi,
>
> Here is an example:
>
> package org.apache.felix.ipojo.test.api;
>
> import org.apache.felix.ipojo.ComponentInstance;
> import org.apache.felix.ipojo.ConfigurationException;
> import org.apache.felix.ipojo.MissingHandlerException;
> import org.apache.felix.ipojo.UnacceptableConfiguration;
> import org.apache.felix.ipojo.annotations.Component;
> import org.apache.felix.ipojo.annotations.Instantiate;
> import org.apache.felix.ipojo.annotations.Invalidate;
> import org.apache.felix.ipojo.annotations.Validate;
> import org.apache.felix.ipojo.api.ComponentType;
> import org.apache.felix.ipojo.api.PrimitiveComponentType;
> import org.osgi.framework.Bundle;
> import org.osgi.framework.BundleContext;
>
> @Component
> @Instantiate
> public class Creator {
>
>     ComponentType type;
>     ComponentInstance instance;
>     private BundleContext context;
>
>     public Creator(BundleContext bc) {
>         context = bc;
>     }
>
>     @Validate
>     public void start() throws MissingHandlerException,
> ConfigurationException, UnacceptableConfiguration {
>
>         Bundle bundle = getBundle();
>         if (bundle == null) {
>             System.err.println("Cannot find the bundle");
>             return;
>         }
>
>         type = new
> PrimitiveComponentType().setBundleContext(bundle.getBundleContext())
>                 .setComponentTypeName("raw.type")
>                 .setClassName("org.apache.felix.ipojo.test.asm.Raw")
>                 .setImmediate(true);
>         type.start();
>
>         instance = type.createInstance();
>     }
>
>     @Invalidate
>     public void stop() {
>         if (instance != null) {
>             instance.dispose();
>             instance = null;
>         }
>         if (type != null) {
>             type.stop();
>             type = null;
>         }
>     }
>
>     private Bundle getBundle() {
>         for (Bundle b : context.getBundles()) {
>             if ("bundle-using-asm".equals(b.getSymbolicName())) {
>                 return b;
>             }
>         }
>         return null;
>
>     }
> }
>
> It just creates a component type and create an instance. The classname of
> the create type is "org.apache.felix.ipojo.test.asm.Raw". This class is not
>  in the bundle containing the "Raw" class (the Raw class is in another
> bundle named "bundle-using-asm".
>
> The bundle-using-asm is a regular bundle, containing my class. However it
> imports org.apache.felix.ipojo:
> <plugin>
>                 <groupId>org.apache.felix</groupId>
>                 <artifactId>maven-bundle-plugin</artifactId>
>                 <extensions>true</extensions>
>                 <configuration>
>                     <instructions>
>
> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
>
> <Private-Package>org.apache.felix.ipojo.test.asm</Private-Package>
>                         <Import-Package>org.apache.felix.ipojo,
> *</Import-Package>
>                     </instructions>
>                 </configuration>
> </plugin>
>
> This import is important as the class will be manipulated and will (After
> manipulation) rely on iPOJO classes.
>
> To avoid this manual import you can:
> 1) made this bundle an iPOJO bundle (it won't change the semantic of any
> classes) - the import is added during the manipulation
> 2) use the iPOJO url handler and so install the bundle with:
> ipojo://file:/the.path.to.my.bundle.jar
>
> Regards,
>
> Clement
>
> PS: just for completion here is the raw class:
>
> package org.apache.felix.ipojo.test.asm;
>
> public class Raw {
>
>     public Raw() {
>         System.out.println("Raw...");
>     }
>
> }
>
>
> On 17.04.2012, at 04:35, fabiolf wrote:
>
> > Hi Clement,
> >
> > What do you mean by "import"? Do you mean the Import-Package in bundle
> > metadata? Or the "import" keyword in java code? I am doing both, btw,
> and
> > still having the same error. :-/
> >
> > Regards,
> > Fabio
> >
> > On Sun, Apr 15, 2012 at 3:18 AM, clement escoffier [via Apache Felix] <
> > [hidden email] <http://user/SendEmail.jtp?type=node&node=4889185&i=0>>
> wrote:
> >
> >> Hi,
> >>
> >> Actually the error makes a lot more sense. Because iPOJO manipulation
> rely
> >> on some classes of org.apache.felix.ipojo, you need to import this
> package.
> >> All bundles intended to have iPOJO component, need to import:
> >> org.apache.felix.ipojo and org.apache.felix.ipojo.architecture.
> >>
> >> Regards,
> >>
> >> Clement
> >>
> >>
> >> On 15.04.2012, at 02:41, fabiolf wrote:
> >>
> >>> Hi Clement,
> >>>
> >>> I did as you said and I was surely doing something wrong because now
> the
> >>> error changed. My code now is:
> >>>
> >>>
> >>> Bundle bundle = m_context.getBundle(21);
> >>> BundleContext localContext = bundle.getBundleContext();
> >>> try {
> >>> System.out.println("myType");
> >>>
> >>> new PrimitiveComponentType()
> >>> .setBundleContext(localContext)
> >>> .setClassName(ProviderA.class.getName())
> >>> .setValidateMethod("start")
> >>> .setInvalidateMethod("stop")
> >>> .addService(new Service())
> >>> .createInstance("TestProviderA");
> >>>                 [...]
> >>>
> >>> The bundle 21 is the one that has the TestProviderA class. I'm getting
> >> the
> >>> following error:
> >>>
> >>> [ERROR] org.test.iPOJO.providerA.ProviderA :
> org/apache/felix/ipojo/Pojo
> >>> java.lang.NoClassDefFoundError: org/apache/felix/ipojo/Pojo
> >>> at java.lang.ClassLoader.defineClass1(Native Method)
> >>> at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
> >>> at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.defineClass(ComponentFactory.java:501)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.ComponentFactory.defineClass(ComponentFactory.java:215)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.ComponentFactory.loadClass(ComponentFactory.java:244)
>
> >>
> >>> at
> org.apache.felix.ipojo.InstanceManager.load(InstanceManager.java:575)
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.InstanceManager.getClazz(InstanceManager.java:887)
> >>> at
> org.apache.felix.ipojo.util.Callback.searchMethod(Callback.java:164)
> >>> at org.apache.felix.ipojo.util.Callback.call(Callback.java:223)
> >>> at org.apache.felix.ipojo.util.Callback.call(Callback.java:193)
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:472)
> >>> at
> >> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:354)
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:178)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
>
> >>
> >>> at
> >>>
> >>
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
>
> >>
> >>> at
> >>>
> >>
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
>
> >>
> >>> at java.lang.Thread.run(Thread.java:680)
> >>> Caused by: java.lang.ClassNotFoundException:
> org.apache.felix.ipojo.Pojo
> >> not
> >>> found by org.test.iPOJO.providerA [21]
> >>> at
> >>>
> >>
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>
> >>
> >>> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> >>> at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1723)
> >>> at
> org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:926)
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.loadClass(ComponentFactory.java:528)
>
> >>
> >>> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> >>> ... 25 more
> >>> [ERROR] org.test.iPOJO.providerA.ProviderA :
> org/apache/felix/ipojo/Pojo
> >>> org.apache.felix.ipojo.ConfigurationException: The configuration is
> not
> >>> correct for the type org.test.iPOJO.providerA.ProviderA :
> >>> org/apache/felix/ipojo/Pojo
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:308)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
>
> >>
> >>> at
> >>>
> >>
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
>
> >>
> >>> at
> >>>
> >>
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
>
> >>
> >>> at
> >>>
> >>
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
>
> >>
> >>> at java.lang.Thread.run(Thread.java:680)
> >>>
> >>> I saw that the class org.apache.felix.ipojo.Pojo can be found in the
> >> iPOJO
> >>> bundle and I'm with it started as you can see below:
> >>>
> >>> -> ps
> >>> START LEVEL 1
> >>>  ID   State         Level  Name
> >>> [   0] [Active     ] [    0] System Bundle (4.0.2)
> >>> [   1] [Active     ] [    1] Apache Felix Bundle Repository (1.6.6)
> >>> [   2] [Active     ] [    1] Apache Felix iPOJO (1.9.0.SNAPSHOT)
> >>> [   3] [Active     ] [    1] Apache Felix iPOJO API (1.7.0.SNAPSHOT)
> >>> [   4] [Active     ] [    1] Apache Felix iPOJO Arch Command
> >>> (1.7.0.SNAPSHOT)
> >>> [   5] [Active     ] [    1] Apache Felix iPOJO Composite
> >> (1.9.0.SNAPSHOT)
> >>> [   6] [Active     ] [    1] Apache Felix Shell Service (1.4.2)
> >>> [   7] [Active     ] [    1] Apache Felix Shell TUI (1.4.1)
> >>> [   8] [Active     ] [    1] Java Utils (1.0.0)
> >>> [  19] [Active     ] [    1] Fabio Manipulator (1.0.0)
> >>> [  20] [Active     ] [    1] Testing iPOJO API: Services (1.0.0)
> >>> [  21] [Active     ] [    1] Testing iPOJO API: Provider A (1.0.0)
> >>> [  22] [Active     ] [    1] Testing iPOJO API: Provider B (1.0.0)
> >>> [  23] [Active     ] [    1] Testing iPOJO API: Consumer (1.0.0)
> >>>
> >>> I'm probably doing something wrong again...
> >>>
> >>> Thanks a lot!
> >>> Fabio
> >>>
> >>> --
> >>> View this message in context:
> >>
> http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4882641.html
> >>
> >>> Sent from the Apache Felix - Users mailing list archive at Nabble.com.
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: [hidden email]<
> http://user/SendEmail.jtp?type=node&node=4883007&i=0>
> >>> For additional commands, e-mail: [hidden email]<
> http://user/SendEmail.jtp?type=node&node=4883007&i=1>
> >>>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [hidden email]<
> http://user/SendEmail.jtp?type=node&node=4883007&i=2>
> >> For additional commands, e-mail: [hidden email]<
> http://user/SendEmail.jtp?type=node&node=4883007&i=3>
> >>
> >>
> >>
> >> ------------------------------
> >> If you reply to this email, your message will be added to the
> discussion
> >> below:
> >>
> >>
> http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4883007.html
> >> To unsubscribe from Using iPOJO API to create components and instances,
> click
> >> here<
>
> >> .
> >> NAML<
> http://apache-felix.18485.n6.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>
> >>
> >
> >
> > --
> > View this message in context:
> http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4888756.html
>
> > Sent from the Apache Felix - Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4889185&i=1>
> For additional commands, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4889185&i=2>
>
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4889185.html
>  To unsubscribe from Using iPOJO API to create components and instances, click
> here<http://apache-felix.18485.n6.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4881802&code=ZmFiaW8ubC5mb25zZWNhQGdtYWlsLmNvbXw0ODgxODAyfDE5NjM1NDUwODE=>
> .
> NAML<http://apache-felix.18485.n6.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>


--
View this message in context: http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4894093.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

Re: Using iPOJO API to create components and instances

Posted by Clement Escoffier <cl...@gmail.com>.
Hi,

Here is an example:

package org.apache.felix.ipojo.test.api;

import org.apache.felix.ipojo.ComponentInstance;
import org.apache.felix.ipojo.ConfigurationException;
import org.apache.felix.ipojo.MissingHandlerException;
import org.apache.felix.ipojo.UnacceptableConfiguration;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Validate;
import org.apache.felix.ipojo.api.ComponentType;
import org.apache.felix.ipojo.api.PrimitiveComponentType;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;

@Component
@Instantiate
public class Creator {

    ComponentType type;
    ComponentInstance instance;
    private BundleContext context;

    public Creator(BundleContext bc) {
        context = bc;
    }

    @Validate
    public void start() throws MissingHandlerException, ConfigurationException, UnacceptableConfiguration {

        Bundle bundle = getBundle();
        if (bundle == null) {
            System.err.println("Cannot find the bundle");
            return;
        }

        type = new PrimitiveComponentType().setBundleContext(bundle.getBundleContext())
                .setComponentTypeName("raw.type")
                .setClassName("org.apache.felix.ipojo.test.asm.Raw")
                .setImmediate(true);
        type.start();

        instance = type.createInstance();
    }

    @Invalidate
    public void stop() {
        if (instance != null) {
            instance.dispose();
            instance = null;
        }
        if (type != null) {
            type.stop();
            type = null;
        }
    }

    private Bundle getBundle() {
        for (Bundle b : context.getBundles()) {
            if ("bundle-using-asm".equals(b.getSymbolicName())) {
                return b;
            }
        }
        return null;

    }
}

It just creates a component type and create an instance. The classname of the create type is "org.apache.felix.ipojo.test.asm.Raw". This class is not  in the bundle containing the "Raw" class (the Raw class is in another bundle named "bundle-using-asm".

The bundle-using-asm is a regular bundle, containing my class. However it imports org.apache.felix.ipojo:
<plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
                        <Private-Package>org.apache.felix.ipojo.test.asm</Private-Package>
                        <Import-Package>org.apache.felix.ipojo, *</Import-Package>
                    </instructions>
                </configuration>
</plugin>

This import is important as the class will be manipulated and will (After manipulation) rely on iPOJO classes.

To avoid this manual import you can:
1) made this bundle an iPOJO bundle (it won't change the semantic of any classes) - the import is added during the manipulation
2) use the iPOJO url handler and so install the bundle with: ipojo://file:/the.path.to.my.bundle.jar

Regards,

Clement

PS: just for completion here is the raw class:

package org.apache.felix.ipojo.test.asm;

public class Raw {

    public Raw() {
        System.out.println("Raw...");
    }

}


On 17.04.2012, at 04:35, fabiolf wrote:

> Hi Clement,
> 
> What do you mean by "import"? Do you mean the Import-Package in bundle
> metadata? Or the "import" keyword in java code? I am doing both, btw, and
> still having the same error. :-/
> 
> Regards,
> Fabio
> 
> On Sun, Apr 15, 2012 at 3:18 AM, clement escoffier [via Apache Felix] <
> ml-node+s18485n4883007h33@n6.nabble.com> wrote:
> 
>> Hi,
>> 
>> Actually the error makes a lot more sense. Because iPOJO manipulation rely
>> on some classes of org.apache.felix.ipojo, you need to import this package.
>> All bundles intended to have iPOJO component, need to import:
>> org.apache.felix.ipojo and org.apache.felix.ipojo.architecture.
>> 
>> Regards,
>> 
>> Clement
>> 
>> 
>> On 15.04.2012, at 02:41, fabiolf wrote:
>> 
>>> Hi Clement,
>>> 
>>> I did as you said and I was surely doing something wrong because now the
>>> error changed. My code now is:
>>> 
>>> 
>>> Bundle bundle = m_context.getBundle(21);
>>> BundleContext localContext = bundle.getBundleContext();
>>> try {
>>> System.out.println("myType");
>>> 
>>> new PrimitiveComponentType()
>>> .setBundleContext(localContext)
>>> .setClassName(ProviderA.class.getName())
>>> .setValidateMethod("start")
>>> .setInvalidateMethod("stop")
>>> .addService(new Service())
>>> .createInstance("TestProviderA");
>>>                 [...]
>>> 
>>> The bundle 21 is the one that has the TestProviderA class. I'm getting
>> the
>>> following error:
>>> 
>>> [ERROR] org.test.iPOJO.providerA.ProviderA : org/apache/felix/ipojo/Pojo
>>> java.lang.NoClassDefFoundError: org/apache/felix/ipojo/Pojo
>>> at java.lang.ClassLoader.defineClass1(Native Method)
>>> at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>>> at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>>> at
>>> 
>> org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.defineClass(ComponentFactory.java:501)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.ComponentFactory.defineClass(ComponentFactory.java:215)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.ComponentFactory.loadClass(ComponentFactory.java:244)
>> 
>>> at org.apache.felix.ipojo.InstanceManager.load(InstanceManager.java:575)
>>> at
>>> 
>> org.apache.felix.ipojo.InstanceManager.getClazz(InstanceManager.java:887)
>>> at org.apache.felix.ipojo.util.Callback.searchMethod(Callback.java:164)
>>> at org.apache.felix.ipojo.util.Callback.call(Callback.java:223)
>>> at org.apache.felix.ipojo.util.Callback.call(Callback.java:193)
>>> at
>>> 
>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:472)
>>> at
>> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:354)
>>> at
>>> 
>> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:178)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
>> 
>>> at
>>> 
>> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
>> 
>>> at
>>> 
>> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
>> 
>>> at
>>> 
>> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
>> 
>>> at
>>> 
>> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
>> 
>>> at java.lang.Thread.run(Thread.java:680)
>>> Caused by: java.lang.ClassNotFoundException: org.apache.felix.ipojo.Pojo
>> not
>>> found by org.test.iPOJO.providerA [21]
>>> at
>>> 
>> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
>> 
>>> at
>>> 
>> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>> 
>>> at
>>> 
>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>> 
>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>>> at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1723)
>>> at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:926)
>>> at
>>> 
>> org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.loadClass(ComponentFactory.java:528)
>> 
>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>>> ... 25 more
>>> [ERROR] org.test.iPOJO.providerA.ProviderA : org/apache/felix/ipojo/Pojo
>>> org.apache.felix.ipojo.ConfigurationException: The configuration is not
>>> correct for the type org.test.iPOJO.providerA.ProviderA :
>>> org/apache/felix/ipojo/Pojo
>>> at
>>> 
>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:308)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
>> 
>>> at
>>> 
>> org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
>> 
>>> at
>>> 
>> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
>> 
>>> at
>>> 
>> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
>> 
>>> at
>>> 
>> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
>> 
>>> at
>>> 
>> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
>> 
>>> at java.lang.Thread.run(Thread.java:680)
>>> 
>>> I saw that the class org.apache.felix.ipojo.Pojo can be found in the
>> iPOJO
>>> bundle and I'm with it started as you can see below:
>>> 
>>> -> ps
>>> START LEVEL 1
>>>  ID   State         Level  Name
>>> [   0] [Active     ] [    0] System Bundle (4.0.2)
>>> [   1] [Active     ] [    1] Apache Felix Bundle Repository (1.6.6)
>>> [   2] [Active     ] [    1] Apache Felix iPOJO (1.9.0.SNAPSHOT)
>>> [   3] [Active     ] [    1] Apache Felix iPOJO API (1.7.0.SNAPSHOT)
>>> [   4] [Active     ] [    1] Apache Felix iPOJO Arch Command
>>> (1.7.0.SNAPSHOT)
>>> [   5] [Active     ] [    1] Apache Felix iPOJO Composite
>> (1.9.0.SNAPSHOT)
>>> [   6] [Active     ] [    1] Apache Felix Shell Service (1.4.2)
>>> [   7] [Active     ] [    1] Apache Felix Shell TUI (1.4.1)
>>> [   8] [Active     ] [    1] Java Utils (1.0.0)
>>> [  19] [Active     ] [    1] Fabio Manipulator (1.0.0)
>>> [  20] [Active     ] [    1] Testing iPOJO API: Services (1.0.0)
>>> [  21] [Active     ] [    1] Testing iPOJO API: Provider A (1.0.0)
>>> [  22] [Active     ] [    1] Testing iPOJO API: Provider B (1.0.0)
>>> [  23] [Active     ] [    1] Testing iPOJO API: Consumer (1.0.0)
>>> 
>>> I'm probably doing something wrong again...
>>> 
>>> Thanks a lot!
>>> Fabio
>>> 
>>> --
>>> View this message in context:
>> http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4882641.html
>> 
>>> Sent from the Apache Felix - Users mailing list archive at Nabble.com.
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4883007&i=0>
>>> For additional commands, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4883007&i=1>
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4883007&i=2>
>> For additional commands, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4883007&i=3>
>> 
>> 
>> 
>> ------------------------------
>> If you reply to this email, your message will be added to the discussion
>> below:
>> 
>> http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4883007.html
>> To unsubscribe from Using iPOJO API to create components and instances, click
>> here<http://apache-felix.18485.n6.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4881802&code=ZmFiaW8ubC5mb25zZWNhQGdtYWlsLmNvbXw0ODgxODAyfDE5NjM1NDUwODE=>
>> .
>> NAML<http://apache-felix.18485.n6.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>> 
> 
> 
> --
> View this message in context: http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4888756.html
> Sent from the Apache Felix - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Using iPOJO API to create components and instances

Posted by fabiolf <fa...@gmail.com>.
Hi Clement,

What do you mean by "import"? Do you mean the Import-Package in bundle
metadata? Or the "import" keyword in java code? I am doing both, btw, and
still having the same error. :-/

Regards,
Fabio

On Sun, Apr 15, 2012 at 3:18 AM, clement escoffier [via Apache Felix] <
ml-node+s18485n4883007h33@n6.nabble.com> wrote:

> Hi,
>
> Actually the error makes a lot more sense. Because iPOJO manipulation rely
> on some classes of org.apache.felix.ipojo, you need to import this package.
> All bundles intended to have iPOJO component, need to import:
> org.apache.felix.ipojo and org.apache.felix.ipojo.architecture.
>
> Regards,
>
> Clement
>
>
> On 15.04.2012, at 02:41, fabiolf wrote:
>
> > Hi Clement,
> >
> > I did as you said and I was surely doing something wrong because now the
> > error changed. My code now is:
> >
> >
> > Bundle bundle = m_context.getBundle(21);
> > BundleContext localContext = bundle.getBundleContext();
> > try {
> > System.out.println("myType");
> >
> > new PrimitiveComponentType()
> > .setBundleContext(localContext)
> > .setClassName(ProviderA.class.getName())
> > .setValidateMethod("start")
> > .setInvalidateMethod("stop")
> > .addService(new Service())
> > .createInstance("TestProviderA");
> >                  [...]
> >
> > The bundle 21 is the one that has the TestProviderA class. I'm getting
> the
> > following error:
> >
> > [ERROR] org.test.iPOJO.providerA.ProviderA : org/apache/felix/ipojo/Pojo
> > java.lang.NoClassDefFoundError: org/apache/felix/ipojo/Pojo
> > at java.lang.ClassLoader.defineClass1(Native Method)
> > at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
> > at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
> > at
> >
> org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.defineClass(ComponentFactory.java:501)
>
> > at
> >
> org.apache.felix.ipojo.ComponentFactory.defineClass(ComponentFactory.java:215)
>
> > at
> >
> org.apache.felix.ipojo.ComponentFactory.loadClass(ComponentFactory.java:244)
>
> > at org.apache.felix.ipojo.InstanceManager.load(InstanceManager.java:575)
> > at
> >
> org.apache.felix.ipojo.InstanceManager.getClazz(InstanceManager.java:887)
> > at org.apache.felix.ipojo.util.Callback.searchMethod(Callback.java:164)
> > at org.apache.felix.ipojo.util.Callback.call(Callback.java:223)
> > at org.apache.felix.ipojo.util.Callback.call(Callback.java:193)
> > at
> >
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
>
> > at
> >
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)
>
> > at
> >
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
>
> > at
> >
> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:472)
> > at
> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:354)
> > at
> >
> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:178)
>
> > at
> >
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)
>
> > at
> >
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
>
> > at
> >
> org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
>
> > at
> >
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
>
> > at
> >
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
>
> > at
> >
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
>
> > at
> >
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
>
> > at java.lang.Thread.run(Thread.java:680)
> > Caused by: java.lang.ClassNotFoundException: org.apache.felix.ipojo.Pojo
> not
> > found by org.test.iPOJO.providerA [21]
> > at
> >
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
>
> > at
> >
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>
> > at
> >
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>
> > at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> > at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1723)
> > at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:926)
> > at
> >
> org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.loadClass(ComponentFactory.java:528)
>
> > at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> > ... 25 more
> > [ERROR] org.test.iPOJO.providerA.ProviderA : org/apache/felix/ipojo/Pojo
> > org.apache.felix.ipojo.ConfigurationException: The configuration is not
> > correct for the type org.test.iPOJO.providerA.ProviderA :
> > org/apache/felix/ipojo/Pojo
> > at
> >
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:308)
>
> > at
> >
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
>
> > at
> >
> org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
>
> > at
> >
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
>
> > at
> >
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
>
> > at
> >
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
>
> > at
> >
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
>
> > at java.lang.Thread.run(Thread.java:680)
> >
> > I saw that the class org.apache.felix.ipojo.Pojo can be found in the
> iPOJO
> > bundle and I'm with it started as you can see below:
> >
> > -> ps
> > START LEVEL 1
> >   ID   State         Level  Name
> > [   0] [Active     ] [    0] System Bundle (4.0.2)
> > [   1] [Active     ] [    1] Apache Felix Bundle Repository (1.6.6)
> > [   2] [Active     ] [    1] Apache Felix iPOJO (1.9.0.SNAPSHOT)
> > [   3] [Active     ] [    1] Apache Felix iPOJO API (1.7.0.SNAPSHOT)
> > [   4] [Active     ] [    1] Apache Felix iPOJO Arch Command
> > (1.7.0.SNAPSHOT)
> > [   5] [Active     ] [    1] Apache Felix iPOJO Composite
> (1.9.0.SNAPSHOT)
> > [   6] [Active     ] [    1] Apache Felix Shell Service (1.4.2)
> > [   7] [Active     ] [    1] Apache Felix Shell TUI (1.4.1)
> > [   8] [Active     ] [    1] Java Utils (1.0.0)
> > [  19] [Active     ] [    1] Fabio Manipulator (1.0.0)
> > [  20] [Active     ] [    1] Testing iPOJO API: Services (1.0.0)
> > [  21] [Active     ] [    1] Testing iPOJO API: Provider A (1.0.0)
> > [  22] [Active     ] [    1] Testing iPOJO API: Provider B (1.0.0)
> > [  23] [Active     ] [    1] Testing iPOJO API: Consumer (1.0.0)
> >
> > I'm probably doing something wrong again...
> >
> > Thanks a lot!
> > Fabio
> >
> > --
> > View this message in context:
> http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4882641.html
>
> > Sent from the Apache Felix - Users mailing list archive at Nabble.com.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4883007&i=0>
> > For additional commands, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4883007&i=1>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4883007&i=2>
> For additional commands, e-mail: [hidden email]<http://user/SendEmail.jtp?type=node&node=4883007&i=3>
>
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4883007.html
>  To unsubscribe from Using iPOJO API to create components and instances, click
> here<http://apache-felix.18485.n6.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4881802&code=ZmFiaW8ubC5mb25zZWNhQGdtYWlsLmNvbXw0ODgxODAyfDE5NjM1NDUwODE=>
> .
> NAML<http://apache-felix.18485.n6.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>


--
View this message in context: http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4888756.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

Re: Using iPOJO API to create components and instances

Posted by Clement Escoffier <cl...@gmail.com>.
Hi,

Actually the error makes a lot more sense. Because iPOJO manipulation rely on some classes of org.apache.felix.ipojo, you need to import this package. All bundles intended to have iPOJO component, need to import: org.apache.felix.ipojo and org.apache.felix.ipojo.architecture.

Regards,

Clement


On 15.04.2012, at 02:41, fabiolf wrote:

> Hi Clement,
> 
> I did as you said and I was surely doing something wrong because now the
> error changed. My code now is:
> 
> 
> 		Bundle bundle = m_context.getBundle(21);
> 		BundleContext localContext = bundle.getBundleContext();
> 		try {
> 			System.out.println("myType");
> 
> 			new PrimitiveComponentType()
> 			.setBundleContext(localContext)
> 			.setClassName(ProviderA.class.getName())
> 			.setValidateMethod("start")
> 			.setInvalidateMethod("stop")
> 			.addService(new Service())
> 			.createInstance("TestProviderA");
>                  [...]
> 
> The bundle 21 is the one that has the TestProviderA class. I'm getting the
> following error:
> 
> [ERROR] org.test.iPOJO.providerA.ProviderA : org/apache/felix/ipojo/Pojo
> java.lang.NoClassDefFoundError: org/apache/felix/ipojo/Pojo
> 	at java.lang.ClassLoader.defineClass1(Native Method)
> 	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
> 	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
> 	at
> org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.defineClass(ComponentFactory.java:501)
> 	at
> org.apache.felix.ipojo.ComponentFactory.defineClass(ComponentFactory.java:215)
> 	at
> org.apache.felix.ipojo.ComponentFactory.loadClass(ComponentFactory.java:244)
> 	at org.apache.felix.ipojo.InstanceManager.load(InstanceManager.java:575)
> 	at
> org.apache.felix.ipojo.InstanceManager.getClazz(InstanceManager.java:887)
> 	at org.apache.felix.ipojo.util.Callback.searchMethod(Callback.java:164)
> 	at org.apache.felix.ipojo.util.Callback.call(Callback.java:223)
> 	at org.apache.felix.ipojo.util.Callback.call(Callback.java:193)
> 	at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
> 	at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)
> 	at
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
> 	at
> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:472)
> 	at org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:354)
> 	at
> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:178)
> 	at
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)
> 	at
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
> 	at
> org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
> 	at
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
> 	at
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
> 	at
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
> 	at
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
> 	at java.lang.Thread.run(Thread.java:680)
> Caused by: java.lang.ClassNotFoundException: org.apache.felix.ipojo.Pojo not
> found by org.test.iPOJO.providerA [21]
> 	at
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
> 	at
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
> 	at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> 	at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1723)
> 	at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:926)
> 	at
> org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.loadClass(ComponentFactory.java:528)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> 	... 25 more
> [ERROR] org.test.iPOJO.providerA.ProviderA : org/apache/felix/ipojo/Pojo
> org.apache.felix.ipojo.ConfigurationException: The configuration is not
> correct for the type org.test.iPOJO.providerA.ProviderA :
> org/apache/felix/ipojo/Pojo
> 	at
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:308)
> 	at
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
> 	at
> org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
> 	at
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
> 	at
> org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
> 	at
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
> 	at
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
> 	at java.lang.Thread.run(Thread.java:680)
> 
> I saw that the class org.apache.felix.ipojo.Pojo can be found in the iPOJO
> bundle and I'm with it started as you can see below:
> 
> -> ps
> START LEVEL 1
>   ID   State         Level  Name
> [   0] [Active     ] [    0] System Bundle (4.0.2)
> [   1] [Active     ] [    1] Apache Felix Bundle Repository (1.6.6)
> [   2] [Active     ] [    1] Apache Felix iPOJO (1.9.0.SNAPSHOT)
> [   3] [Active     ] [    1] Apache Felix iPOJO API (1.7.0.SNAPSHOT)
> [   4] [Active     ] [    1] Apache Felix iPOJO Arch Command
> (1.7.0.SNAPSHOT)
> [   5] [Active     ] [    1] Apache Felix iPOJO Composite (1.9.0.SNAPSHOT)
> [   6] [Active     ] [    1] Apache Felix Shell Service (1.4.2)
> [   7] [Active     ] [    1] Apache Felix Shell TUI (1.4.1)
> [   8] [Active     ] [    1] Java Utils (1.0.0)
> [  19] [Active     ] [    1] Fabio Manipulator (1.0.0)
> [  20] [Active     ] [    1] Testing iPOJO API: Services (1.0.0)
> [  21] [Active     ] [    1] Testing iPOJO API: Provider A (1.0.0)
> [  22] [Active     ] [    1] Testing iPOJO API: Provider B (1.0.0)
> [  23] [Active     ] [    1] Testing iPOJO API: Consumer (1.0.0)
> 
> I'm probably doing something wrong again...
> 
> Thanks a lot!
> Fabio
> 
> --
> View this message in context: http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4882641.html
> Sent from the Apache Felix - Users mailing list archive at Nabble.com.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Using iPOJO API to create components and instances

Posted by fabiolf <fa...@gmail.com>.
Hi Clement,

I did as you said and I was surely doing something wrong because now the
error changed. My code now is:


		Bundle bundle = m_context.getBundle(21);
		BundleContext localContext = bundle.getBundleContext();
		try {
			System.out.println("myType");

			new PrimitiveComponentType()
			.setBundleContext(localContext)
			.setClassName(ProviderA.class.getName())
			.setValidateMethod("start")
			.setInvalidateMethod("stop")
			.addService(new Service())
			.createInstance("TestProviderA");
                  [...]

The bundle 21 is the one that has the TestProviderA class. I'm getting the
following error:

[ERROR] org.test.iPOJO.providerA.ProviderA : org/apache/felix/ipojo/Pojo
java.lang.NoClassDefFoundError: org/apache/felix/ipojo/Pojo
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
	at
org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.defineClass(ComponentFactory.java:501)
	at
org.apache.felix.ipojo.ComponentFactory.defineClass(ComponentFactory.java:215)
	at
org.apache.felix.ipojo.ComponentFactory.loadClass(ComponentFactory.java:244)
	at org.apache.felix.ipojo.InstanceManager.load(InstanceManager.java:575)
	at
org.apache.felix.ipojo.InstanceManager.getClazz(InstanceManager.java:887)
	at org.apache.felix.ipojo.util.Callback.searchMethod(Callback.java:164)
	at org.apache.felix.ipojo.util.Callback.call(Callback.java:223)
	at org.apache.felix.ipojo.util.Callback.call(Callback.java:193)
	at
org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
	at
org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)
	at
org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
	at
org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:472)
	at org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:354)
	at
org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:178)
	at
org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)
	at
org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
	at
org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
	at
org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
	at
org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
	at
org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
	at
org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
	at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.ClassNotFoundException: org.apache.felix.ipojo.Pojo not
found by org.test.iPOJO.providerA [21]
	at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
	at
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
	at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1723)
	at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:926)
	at
org.apache.felix.ipojo.ComponentFactory$FactoryClassloader.loadClass(ComponentFactory.java:528)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	... 25 more
[ERROR] org.test.iPOJO.providerA.ProviderA : org/apache/felix/ipojo/Pojo
org.apache.felix.ipojo.ConfigurationException: The configuration is not
correct for the type org.test.iPOJO.providerA.ProviderA :
org/apache/felix/ipojo/Pojo
	at
org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:308)
	at
org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
	at
org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:99)
	at
org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.create(FabioManipulatorCmdImpl.java:80)
	at
org.test.iPOJO.fabioManipulator.FabioManipulatorCmdImpl.execute(FabioManipulatorCmdImpl.java:61)
	at
org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:286)
	at
org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:184)
	at java.lang.Thread.run(Thread.java:680)

I saw that the class org.apache.felix.ipojo.Pojo can be found in the iPOJO
bundle and I'm with it started as you can see below:

-> ps
START LEVEL 1
   ID   State         Level  Name
[   0] [Active     ] [    0] System Bundle (4.0.2)
[   1] [Active     ] [    1] Apache Felix Bundle Repository (1.6.6)
[   2] [Active     ] [    1] Apache Felix iPOJO (1.9.0.SNAPSHOT)
[   3] [Active     ] [    1] Apache Felix iPOJO API (1.7.0.SNAPSHOT)
[   4] [Active     ] [    1] Apache Felix iPOJO Arch Command
(1.7.0.SNAPSHOT)
[   5] [Active     ] [    1] Apache Felix iPOJO Composite (1.9.0.SNAPSHOT)
[   6] [Active     ] [    1] Apache Felix Shell Service (1.4.2)
[   7] [Active     ] [    1] Apache Felix Shell TUI (1.4.1)
[   8] [Active     ] [    1] Java Utils (1.0.0)
[  19] [Active     ] [    1] Fabio Manipulator (1.0.0)
[  20] [Active     ] [    1] Testing iPOJO API: Services (1.0.0)
[  21] [Active     ] [    1] Testing iPOJO API: Provider A (1.0.0)
[  22] [Active     ] [    1] Testing iPOJO API: Provider B (1.0.0)
[  23] [Active     ] [    1] Testing iPOJO API: Consumer (1.0.0)

I'm probably doing something wrong again...

Thanks a lot!
Fabio

--
View this message in context: http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4882641.html
Sent from the Apache Felix - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Using iPOJO API to create components and instances

Posted by Clement Escoffier <cl...@gmail.com>.
Hi,

On 14.04.2012, at 18:08, fabiolf wrote:

> Hi All,
> 
> I'm trying to create components and an instances using the iPOJO API. My
> objective is to build a layer able to create and instantiate ipojo
> components from regular deployed bundles. So, in this scenery, I have a
> bundle who provides a service and another bundle that consumes the service.
> I want to create two ipojo components, one provider and one consumer. My
> code for creating my provider is shown below (got it from the tutorial):
> 
> new PrimitiveComponentType()
> .setBundleContext(m_context)
> .setClassName(ProviderA.class.getName())
> .setValidateMethod("start")
> .setInvalidateMethod("stop")
> .addService(new Service())
> .createInstance("TestProviderA");
> 
> 
> In my first attempt to archive my objective I have received an exception: 
> 
> java.lang.IllegalStateException: An interface cannot be loaded
> 
> The interface can be found in a started bundle. So I got the bundle context
> from that bundle with m_context.getBundle(55).getBundleContext(). Then I
> received another exception:
> 
> java.lang.IllegalStateException: An exception occurs during implementation
> class manipulation : cannot found the class file
> org/test/iPOJO/providerA/ProviderA.class
> 
> I realized, then, that the code to create the ipojo component must be inside
> the same bundle who will contain the component. I think this is due to using
> multiple class loaders. Am I right? Why can't I create a component for a
> bundle inside another bundle? Are there any plans to let this happen?
> 

It should work as you give the bundle context of the bundle containing the component implementation class.
The error means that the bundle context you gave to the iPOJO API is not able to find the .class file. Check that the .class file can be found in the right bundle.

Regards,

Clement


> Thanks in advance!
> Fabio
> 
> --
> View this message in context: http://apache-felix.18485.n6.nabble.com/Using-iPOJO-API-to-create-components-and-instances-tp4881802p4881802.html
> Sent from the Apache Felix - Users mailing list archive at Nabble.com.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org