Clement,

I think I prematurely said it worked with iPOJO 1.6. I have now upgraded to
the following:


   - org.apache.felix.ipojo, 1.6.4
   - org.apache.felix.ipojo.handler.extender, 1.4.0
   - org.apache.felix.ipojo.webconsole, 1.4.4
   - org.apache.felix.ipojo.annotations, 1.6.4 (not deployed in runtime)
   - maven-ipojo-plugin, 1.6.0 (dependency set
   to org.apache.felix.ipojo.manipulator 1.6.4)

When I code like this:

  @Controller

  @Property(name = "connect.enabled", mandatory = true)

  private boolean mValid = false;


or like this:

  @Controller

  @Property(name = "connect.enabled", mandatory = true)

  private boolean mValid;


The instance will be invalid (on startup) despite the fact that the
configuration property "connect.enabled" is true.

On the other hand, if I code like this:

  @Controller

  @Property(name = "connect.enabled", mandatory = true)

  private boolean mValid = true;


I get the opposite problem. The instance will be valid on startup despite
the fact that the configuration property "connect.enabled" is false.

Seems there is no way for me to correctly control the validity of the iPOJO
instance using a configuration property. This regards startup. If I, after
startup, change the configuration property then I manage to
validate/invalidate the iPOJO instance correctly.

The startup problem is very important to me. If an instance has been
disabled, then I must be 100% sure that if my container is restarted, the
instance is not started (validated). The opposite is equally important. If
my container is restarted I need to know that all enabled instances are
started (validated).

I should add that my instance is immediate. Don't know if this makes a
difference. My code looks like follows:


@Component(name = "myServiceFactory", propagation = true, immediate = true)

@Provides(specifications = myInterface.class, strategy = "SERVICE")

public class MyService {

...

  @Property(name = "connect.name", mandatory = true)

  public void setName(String theName) {

    super.setName(theName);

  }


  @Controller

  @Property(name = "connect.enabled", mandatory = true)

  private boolean mValid = false;


  public boolean isValid() {

    return mValid;

  }


  public void setValid(boolean theValid) {

    mValid = theValid;

  }


  @Validate

  public void start() {

    startContext();

  }


  @Invalidate

  public void stop() {

    stopContext();

  }


/Bengt



2010/10/6 Bengt Rodehav <[email protected]>

> Thanks Clement,
>
> Guess I should be upgrading to 1.6.0 then.
>
> /Bengt
>
> 2010/10/6 Clement Escoffier <[email protected]>
>
> Hi,
>>
>> On 06.10.2010, at 09:31, Bengt Rodehav wrote:
>>
>> > Clement,
>> >
>> > Have you had a chance to look at this? I'm thinking about upgrading to
>> iPOJO
>> > 1.6.0 but I need to know whether this type of behavior is supported by
>> iPOJO
>> > or if it just happens to work. If it's not supported I would strongly
>> wish
>> > that it will be in the next iPOJO version (is that 1.8.0?).
>>
>> My first impression is, it's supported (I've found one modification fixing
>> the issue between 1.4.0 and 1.6.0). However, I still didn't write a test
>> case to avoid future regressions. In case of a bug it would 1.6.6 not 1.8.0
>> (minor bug fixes).
>>
>> Clement
>>
>> >
>> > /Bengt
>> >
>> > 2010/10/4 Bengt Rodehav <[email protected]>
>> >
>> >> JIRA created:
>> >>
>> >> https://issues.apache.org/jira/browse/FELIX-2636
>> >>
>> >> <https://issues.apache.org/jira/browse/FELIX-2636>/Bengt
>> >>
>> >> 2010/10/4 Clement Escoffier <[email protected]>
>> >>
>> >>>
>> >>> On 04.10.2010, at 21:04, Bengt Rodehav wrote:
>> >>>
>> >>>> Clement,
>> >>>>
>> >>>> I added:
>> >>>>
>> >>>> @Updated
>> >>>>>
>> >>>>> public void updated(Dictionary theDict) {
>> >>>>>
>> >>>>>   System.out.println("updated: " + theDict);
>> >>>>>
>> >>>>>   mValid = true;
>> >>>>>
>> >>>>> }
>> >>>>>
>> >>>>>
>> >>>> I do get the output to System.out but the instance is still invalid.
>> >>>>
>> >>>>
>> >>>> updated: {include=(?i).*(?<!\.TMP), redelivery.maxAttempts=10,
>> >>>>> delimiter=<DELIM>
>> >>>>
>> >>>> , connect.enabled=false, deleteProcessedFiles=false,
>> >>> skipEmptyFiles=false,
>> >>>>> servi
>> >>>>
>> >>>> ce.factoryPid=connect.skandia.filetransfer, delay=60000,
>> >>>>> fromUri=file:data/conne
>> >>>>
>> >>>> ct/test/sample/file2file, connect.name=Sample file transfer from
>> file
>> >>> to
>> >>>>> file, f
>> >>>>
>> >>>>
>> >>>
>> elix.fileinstall.filename=connect.skandia.filetransfer-sample-file2file.cfg,
>> >>>>> alw
>> >>>>
>> >>>> aysDisconnect=true,
>> >>>>> service.pid=connect.skandia.filetransfer.694a9c3c-9319-46b0-
>> >>>>
>> >>>> 997f-70af37f40da2,
>> >>>>> redelivery.delaypattern=0:2000;5:10000;10:60000;20:600000;25:
>> >>>>
>> >>>> 1800000, temporaryFileName=${file:name.noext}.tmp,
>> >>>>> toUris=file:data/connect/test
>> >>>>
>> >>>> /sample/file2file/test-out}
>> >>>>
>> >>>>
>> >>>> I don't seem to get the same problem with iPOJO 1.6.0. Maybe the
>> problem
>> >>> has
>> >>>> been "fixed". Nevertheless, it's important for me to know that I
>> don't
>> >>>> speculate in a particular implementation detail but that I take
>> >>> advantage of
>> >>>> supported behaviour (preferably supported by some junit test case in
>> >>> iPOJO).
>> >>>>
>> >>>> Should I still create a JIRA ticket?
>> >>>
>> >>> Yes please. Because I didn't fix anything in this area. I need to look
>> >>> into this and create a test case (to avoid regressions).
>> >>>
>> >>> Regards,
>> >>>
>> >>> Clement
>> >>>
>> >>>
>> >>>>
>> >>>> /Bengt
>> >>>>
>> >>>> 2010/10/4 Clement Escoffier <[email protected]>
>> >>>>
>> >>>>> Hi,
>> >>>>>
>> >>>>> On 04.10.2010, at 18:00, Bengt Rodehav wrote:
>> >>>>>
>> >>>>>> Clement,
>> >>>>>>
>> >>>>>> Like I wrote before, I did manage to get iPOJO 1.6.0 to work for
>> me.
>> >>>>>> However, once I got it to work I realised that the
>> @ServiceController
>> >>> is
>> >>>>> not
>> >>>>>> really what I need. It's the @Controller. I haven't quite filled
>> you
>> >>> in
>> >>>>> with
>> >>>>>> all the details. This is what I do:
>> >>>>>>
>> >>>>>> I use OSGi service factories to instantiate "integration services"
>> in
>> >>> my
>> >>>>>> Karaf/Camel based integration platform. Most of the integration
>> >>> services
>> >>>>> are
>> >>>>>> implemented as Camel routes (but not all of them).
>> >>>>>>
>> >>>>>> When an instance becomes valid I start the camel route and when the
>> >>>>> instance
>> >>>>>> becomes invalid I stop it:
>> >>>>>>
>> >>>>>> @Validate
>> >>>>>>
>> >>>>>> public void start() {
>> >>>>>>
>> >>>>>>  startContext();
>> >>>>>>
>> >>>>>> }
>> >>>>>>
>> >>>>>>
>> >>>>>>> @Invalidate
>> >>>>>>
>> >>>>>> public void stop() {
>> >>>>>>
>> >>>>>>  stopContext();
>> >>>>>>
>> >>>>>> }
>> >>>>>>
>> >>>>>>
>> >>>>>> I use a configuration property (the connect.enabled) to control
>> >>> whether a
>> >>>>>> particular integration service should be up-and-running or not,
>> using
>> >>> the
>> >>>>>> following code:
>> >>>>>>
>> >>>>>> @Controller
>> >>>>>>
>> >>>>>> @Property(name = "connect.enabled", mandatory = true)
>> >>>>>>
>> >>>>>> private boolean mValid = false;
>> >>>>>>
>> >>>>>>
>> >>>>>> Note that the way I do it above makes sure that a disabled service
>> >>> cannot
>> >>>>>> start (this was my original problem). However, now I get problems
>> on
>> >>>>> startup
>> >>>>>> (Karaf startup). Although the property "connect.enabled" is true,
>> the
>> >>>>>> instance is still invalid. Looking under the iPOJO tab in the
>> >>> Webconsole
>> >>>>> I
>> >>>>>> can see that iPOJO regards this property as false and thus regards
>> the
>> >>>>> iPOJO
>> >>>>>> instance as invalid. Looking under the Configuration tab I can see
>> >>> that
>> >>>>>> Configuration Manager regards it as true.
>> >>>>>>
>> >>>>>> There must be some kind of timing problem here. iPOJO regards the
>> >>>>> instance
>> >>>>>> as invalid (connect.enabled=false the way I initialise it) and then
>> >>>>> doesn't
>> >>>>>> pick up the change from configuration manager. My original problem
>> was
>> >>>>> the
>> >>>>>> opposite since I initialised it to true instead. Then iPOJO
>> regarded
>> >>> the
>> >>>>>> instance as valid and failed to pick up information from
>> configuration
>> >>>>>> manager that said it was disabled.
>> >>>>>>
>> >>>>>> How can I get this to work? (Note that I now use iPOJO 1.4.0 but I
>> can
>> >>>>>> upgrade if that would help)
>> >>>>>>
>> >>>>>> What I want to achieve is, I believe, rather trivial and it's hard
>> to
>> >>>>>> believe that no one else has thought of this use case:
>> >>>>>>
>> >>>>>> "Control the validity of an iPOJO instance using a configuration
>> >>>>> property".
>> >>>>>
>> >>>>> There is two points here:
>> >>>>> - I think there is a bug. In fact the @Controller and @Property are
>> >>>>> completely disconnected (handler are complete separated). But, both
>> >>> should
>> >>>>> check the current value of the field during initialization, listen
>> >>> onSet on
>> >>>>> the field and call onSet when they receive a new value. It sounds
>> like
>> >>> one
>> >>>>> of those handlers does not respect these instructions. I bet on the
>> >>>>> Controller :-)
>> >>>>> - could you try to add a @Updated method or use a setter for the
>> >>> property.
>> >>>>> In these method really assign the controller field to the desired
>> value
>> >>>>> (false|true) like m_controller = true|false. If it's works, it's
>> >>> definitely
>> >>>>> a bug, so please fill a bug.
>> >>>>>
>> >>>>>
>> >>>>> Regards,
>> >>>>>
>> >>>>> Clement
>> >>>>>
>> >>>>>
>> >>>>>>
>> >>>>>> Any clues?
>> >>>>>>
>> >>>>>> BTW I also publish a service to enable my GUI to show me, and
>> interact
>> >>>>> with,
>> >>>>>> all running "integration services". It makes it easy to find all of
>> >>> "my
>> >>>>>> services".
>> >>>>>>
>> >>>>>> /Bengt
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>> 2010/10/4 Clement Escoffier <[email protected]>
>> >>>>>>
>> >>>>>>> Hi,
>> >>>>>>>
>> >>>>>>> On 03.10.2010, at 21:08, Bengt Rodehav wrote:
>> >>>>>>>
>> >>>>>>>> Clement,
>> >>>>>>>>
>> >>>>>>>> Now that used your tip (from the FAQ), it works fine with
>> >>>>>>> maven-ipojo-plugin
>> >>>>>>>> version 1.6.0. The real error was of course that I used the wrong
>> >>>>> version
>> >>>>>>> of
>> >>>>>>>> the manipulator. I dont't know why the latest version from trunk
>> >>>>>>>> (1.7.0-SNAPSHOT) seemed the hide that error but it's gone now
>> that I
>> >>>>> use
>> >>>>>>> the
>> >>>>>>>> correct manipulator version.
>> >>>>>>>
>> >>>>>>> I've to check that... I will look into that.
>> >>>>>>>
>> >>>>>>> Regards,
>> >>>>>>>
>> >>>>>>> Clement
>> >>>>>>>
>> >>>>>>>>
>> >>>>>>>> /Bengt
>> >>>>>>>>
>> >>>>>>>> 2010/10/3 Bengt Rodehav <[email protected]>
>> >>>>>>>>
>> >>>>>>>>> Thanks Clement - that worked perfectly!
>> >>>>>>>>>
>> >>>>>>>>> I don't know how I've missed that FAQ but now I learned
>> something
>> >>> new.
>> >>>>>>>>>
>> >>>>>>>>> Yes, I used the latest maven-ipojo-plugin from trunk.
>> >>>>>>>>>
>> >>>>>>>>> /Bengt
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> 2010/10/3 clement escoffier <[email protected]>
>> >>>>>>>>>
>> >>>>>>>>> Hi,
>> >>>>>>>>>>
>> >>>>>>>>>> 2010/10/3 Bengt Rodehav <[email protected]>
>> >>>>>>>>>>
>> >>>>>>>>>>> Clement,
>> >>>>>>>>>>>
>> >>>>>>>>>>> I've upgrade to iPOJO 1.6.0 but I still have problems exposing
>> >>>>>>> services
>> >>>>>>>>>>> using the @ServiceController.
>> >>>>>>>>>>>
>> >>>>>>>>>>> I get:
>> >>>>>>>>>>>
>> >>>>>>>>>>> factory name="connect.skandia.filetransfer" state="invalid"
>> >>>>>>> bundle="86"
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> implementation-class="se.digia.connect.services.skandia.filetransfer.FileTransferService"
>> >>>>>>>>>>> missinghandlers
>> >>>>>>>>>>> list="[org.apache.felix.ipojo.annotations:servicecontroller]"
>> >>>>>>>>>>> requiredhandlers list="[org.apache.felix.ipojo:requires,
>> >>>>>>>>>>> org.apache.felix.ipojo:properties,
>> >>> org.apache.felix.ipojo:callback,
>> >>>>>>>>>>> org.apache.felix.ipojo:provides,
>> >>>>>>>>>>> org.apache.felix.ipojo.annotations:servicecontroller,
>> >>>>>>>>>>> org.apache.felix.ipojo:architecture]"
>> >>>>>>>>>>>
>> >>>>>>>>>>> in the Webconsole under iPOJO/factories. It seems iPOJO cannot
>> >>> find
>> >>>>> a
>> >>>>>>>>>>> handler for
>> >>>>>>>>>>>
>> >>>>>>>>>>> org.apache.felix.ipojo.annotations:servicecontroller
>> >>>>>>>>>>>
>> >>>>>>>>>>> What bundle am I missing?
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> No, but you must use the manipulator 1.6.4 as explained in:
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> http://felix.apache.org/site/ipojo-faq.html#iPOJOFAQ-Usingadifferentversionofthemanipulatorduringthemanipulation
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> BTW I also move away from using the ipojo url handler (online
>> >>>>>>>>>> manipulator)
>> >>>>>>>>>>> and started using the maven-ipojo-plugin instead. It turns out
>> I
>> >>>>>>> cannot
>> >>>>>>>>>> use
>> >>>>>>>>>>> the latest released version of the plugin (1.6.0) but I have
>> to
>> >>> use
>> >>>>>>>>>>> 1.7.0-SNAPSHOT.
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> Here is the configuration you should use.
>> >>>>>>>>>>
>> >>>>>>>>>> <plugin>
>> >>>>>>>>>>    <groupId>org.apache.felix</groupId>
>> >>>>>>>>>>    <artifactId>maven-ipojo-plugin</artifactId>
>> >>>>>>>>>>    <executions>
>> >>>>>>>>>>      <execution>
>> >>>>>>>>>>        <goals>
>> >>>>>>>>>>          <goal>ipojo-bundle</goal>
>> >>>>>>>>>>        </goals>
>> >>>>>>>>>>      </execution>
>> >>>>>>>>>>    </executions>
>> >>>>>>>>>>    <dependencies>
>> >>>>>>>>>>            <dependency>
>> >>>>>>>>>>                    <groupId>org.apache.felix</groupId>
>> >>>>>>>>>>
>> >>>>>>>>>> <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
>> >>>>>>>>>>                    <version>1.6.4</version>
>> >>>>>>>>>>            </dependency>
>> >>>>>>>>>>    </dependencies>
>> >>>>>>>>>>  </plugin>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>> Otherwise I get the following exception:
>> >>>>>>>>>>>
>> >>>>>>>>>>> java.lang.NullPointerException
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> I will look into that. Did you use the latest from trunk ?
>> >>>>>>>>>>
>> >>>>>>>>>> Regards,
>> >>>>>>>>>>
>> >>>>>>>>>> Clement
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.ipojo.manipulation.annotations.MetadataCollector.visitEnd(MetadataCollector.java:215)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at org.objectweb.asm.ClassReader.accept(Unknown Source)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at org.objectweb.asm.ClassReader.accept(Unknown Source)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.ipojo.manipulator.Pojoization.computeAnnotations(Pojoization.java:294)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.ipojo.manipulator.Pojoization.manipulateComponents(Pojoization.java:484)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.ipojo.manipulator.Pojoization.manipulateJarFile(Pojoization.java:335)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.ipojo.manipulator.Pojoization.pojoization(Pojoization.java:194)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.ipojo.plugin.ManipulatorMojo.execute(ManipulatorMojo.java:199)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>> org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>> org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>
>> org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> >>> Method)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at java.lang.reflect.Method.invoke(Method.java:597)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>> org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>> org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> >>>>>>>>>>>>
>> >>>>>
>> org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
>> >>>>>>>>>>>
>> >>>>>>>>>>>    at
>> org.codehaus.classworlds.Launcher.main(Launcher.java:375)
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> /Bengt
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> /Bengt
>> >>>>>>>>>>>
>> >>>>>>>>>>> 2010/10/1 Clement Escoffier <[email protected]>
>> >>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> On 01.10.2010, at 18:30, Bengt Rodehav wrote:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>> Clement,
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Just a clarification:
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> When you restart your instance, be sure that the filed is
>> >>> really
>> >>>>>>>>>>>> re-assigned
>> >>>>>>>>>>>>>> to false. To be sure, make your instance immediate and set
>> the
>> >>>>>>>>>> field
>> >>>>>>>>>>> in
>> >>>>>>>>>>>> the
>> >>>>>>>>>>>>>> constructor.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> I suspect you misspelled "filed". I'm not sure what you mean
>> >>> here.
>> >>>>>>>>>> My
>> >>>>>>>>>>>>> "mValid" field will be set from a configuration that file
>> >>> install
>> >>>>>>>>>> picks
>> >>>>>>>>>>>> up.
>> >>>>>>>>>>>>> If the configuration value "connect.enabled" is set to true
>> >>> (which
>> >>>>>>>>>> is
>> >>>>>>>>>>> the
>> >>>>>>>>>>>>> normal case) then I want the service to be started. If it is
>> >>> set
>> >>>>> to
>> >>>>>>>>>>>> false,
>> >>>>>>>>>>>>> then I do not want to start nor publish a service yet.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> I want to make sure that I never have a mismatch, that is if
>> >>>>>>>>>>>>> the "connect.enabled" property is false, then the service
>> can
>> >>>>> never
>> >>>>>>>>>> be
>> >>>>>>>>>>>>> started and vice versa. It is important that services that I
>> >>> have
>> >>>>>>>>>>>> "disabled"
>> >>>>>>>>>>>>> this way is never started (which has unfortunately
>> >>> happened...).
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> I never tested having the @ServiceController on the same
>> field
>> >>> as a
>> >>>>>>>>>>>> @Property. This may have some side effects, like not-yet
>> >>> injected
>> >>>>>>>>>> values.
>> >>>>>>>>>>>> Try to set your component as immediate. This will force the
>> >>>>>>> injection.
>> >>>>>>>>>> In
>> >>>>>>>>>>>> fact, if the property has the value false, but there is no
>> >>> object
>> >>>>>>>>>>> created,
>> >>>>>>>>>>>> the
>> >>>>>>>>>>>> @ServiceController has no way to know the current value. If
>> the
>> >>>>>>>>>> instance
>> >>>>>>>>>>> is
>> >>>>>>>>>>>> immediate, an object is created and the field is assigned to
>> the
>> >>>>>>>>>> property
>> >>>>>>>>>>>> value.
>> >>>>>>>>>>>> This will allow the service controller to get the value.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> Clement
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> /Bengt
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> 2010/10/1 Clement Escoffier <[email protected]>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> On 01.10.2010, at 17:03, Bengt Rodehav wrote:
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> OK - obviously @ServiceController is what I need...
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> As said by Richard, The @ServiceController impacts the
>> service
>> >>>>>>>>>>> lifecycle
>> >>>>>>>>>>>>>> The @Controller impacts the instance lifecycle. The
>> >>> @Controller
>> >>>>> is
>> >>>>>>>>>>>> generally
>> >>>>>>>>>>>>>> used to detect wrong configuration or really bad state
>> where
>> >>> the
>> >>>>>>>>>>>> instance
>> >>>>>>>>>>>>>> decide to become invalid.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> The @ServiceController is not tied to the instance
>> lifecycle,
>> >>>>> which
>> >>>>>>>>>>>> means
>> >>>>>>>>>>>>>> that despite the instance is valid, the service can be
>> >>>>> unpublished
>> >>>>>>>>>>> using
>> >>>>>>>>>>>> the
>> >>>>>>>>>>>>>> @ServiceController.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> When you restart your instance, be sure that the filed is
>> >>> really
>> >>>>>>>>>>>>>> re-assigned to false. To be sure, make your instance
>> immediate
>> >>>>> and
>> >>>>>>>>>> set
>> >>>>>>>>>>>> the
>> >>>>>>>>>>>>>> field in the constructor.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Regards,
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Clement
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> /Bengt
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> 2010/10/1 Richard S. Hall <[email protected]>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> On 10/1/10 10:41, Bengt Rodehav wrote:
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> OK - thanks,
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> BTW, what then is @Controller used for?
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> It is for disabling the component itself and is generally
>> >>> more
>> >>>>> to
>> >>>>>>>>>>>> signal
>> >>>>>>>>>>>>>>>> error conditions from which the component cannot recover,
>> >>> such
>> >>>>> as
>> >>>>>>>>>>>> faulty
>> >>>>>>>>>>>>>> or
>> >>>>>>>>>>>>>>>> missing configuration. On the other hand,
>> @ServiceController
>> >>>>>>>>>> allows
>> >>>>>>>>>>>> you
>> >>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>> control when your services are provided.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> -> richard
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> /Bengt
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> 2010/10/1 Karl Pauls<[email protected]>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> iirc, you want the @ServiceController and not the
>> >>> @Controller
>> >>>>>>>>>> and
>> >>>>>>>>>>>>>>>>>> again iirc, you need to update to ipojo 1.6.x for that
>> >>> one.
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> regards,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Karl
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> On Fri, Oct 1, 2010 at 4:06 PM, Bengt Rodehav<
>> >>>>>>>>>> [email protected]>
>> >>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> I'm using iPOJO 1.4.0. My installed iPOJO related
>> >>> artifacts
>> >>>>>>>>>> (in
>> >>>>>>>>>>>> Karaf
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> 1.6.0)
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> are:
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> org.apache.felix.ipojo-1.4.0.jar
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> org.apache.felix.ipojo.handler.extender-1.4.0.jar
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> org.apache.felix.ipojo.online.manipulator-1.4.2.jar
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> org.apache.felix.ipojo.webconsole-1.4.0.jar
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> I also use
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> org.apache.felix.fileinstall-3.0.2.jar
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> ... and a whole lot of other bundles.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> I publish services using factories. An example of a
>> >>>>>>>>>> configuration
>> >>>>>>>>>>>>>> file
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> for
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> my factories is:
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> connect.enabled=true
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> connect.name=Sample file transfer from file to file
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> The "connect.enabled" property is bound to the field
>> in
>> >>> my
>> >>>>>>>>>>> service
>> >>>>>>>>>>>>>> class
>> >>>>>>>>>>>>>>>>>>> that is a "controller":
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> @Controller
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> @Property(name = "connect.enabled", mandatory = false,
>> >>> value
>> >>>>> =
>> >>>>>>>>>>>>>> "true")
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> private boolean mValid;
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> The intention is that I can then disable my service by
>> >>>>> setting
>> >>>>>>>>>>> this
>> >>>>>>>>>>>>>>>>>>> configuration property to false. However, I've
>> encounted
>> >>> a
>> >>>>>>>>>>> problem
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> regarding
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> this. While the service is active, I set
>> >>> "connect.enabled"
>> >>>>> to
>> >>>>>>>>>>>> false.
>> >>>>>>>>>>>>>>>>>>> File
>> >>>>>>>>>>>>>>>>>>> install picks up the changes and the service is
>> >>>>> de-registered
>> >>>>>>>>>> -
>> >>>>>>>>>>>> works
>> >>>>>>>>>>>>>>>>>>> perfectly. But if I now shutdown Karaf and restart it
>> >>> again,
>> >>>>>>>>>> the
>> >>>>>>>>>>>>>> service
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> started (registered) despite the fact that
>> >>>>> "connect.disabled"
>> >>>>>>>>>> is
>> >>>>>>>>>>>>>> still
>> >>>>>>>>>>>>>>>>>>> false. Is this a bug in iPOJO or have I misunderstood
>> >>>>>>>>>> something?
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> When googling about this problem I noticed that there
>> is
>> >>>>> also
>> >>>>>>>>>> an
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> annotation
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> called @ServiceController. What is the difference
>> between
>> >>>>>>>>>>>> @Controller
>> >>>>>>>>>>>>>>>>>>> and
>> >>>>>>>>>>>>>>>>>>> @ServiceController?
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> I tried to switch to @ServiceController instead but
>> get
>> >>> the
>> >>>>>>>>>>>> following
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> error:
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> 2010-10-01 15:48:03,341 | ERROR | guration Updater |
>> >>>>>>>>>> configadmin
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>    | ?                                   ? |
>> >>>>>>>>>>>>>>>>>>>> [org.apache.felix.ipojo.Factory,
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> org.osgi.service.cm.ManagedServiceFactory,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> id=174, bundle=84]: Updating configuration property
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> {service.pid=connect.skandia.filetransfer.269d25ad-c4d6-4277-9d78-6d4b15acb795,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> fromuri=file:data/connect/test/sample/file2file,
>> >>>>>>>>>>>>>>>>>>>>
>> touris=file:data/connect/test/sample/file2file/test-out,
>> >>>>>>>>>>>>>>>>>>>> service.factorypid=connect.skandia.filetransfer,
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> felix.fileinstall.filename=connect.skandia.filetransfer-sample-file2file.cfg,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> connect.enabled=true, instance.name
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>> =connect.skandia.filetransfer.269d25ad-c4d6-4277-9d78-6d4b15acb795,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> connect.name=Sample file transfer from file to file}
>> >>> caused
>> >>>>> a
>> >>>>>>>>>>>>>> problem:
>> >>>>>>>>>>>>>>>>>>>> Missing handlers :
>> >>>>>>>>>>>>>> org.apache.felix.ipojo.annotations:servicecontroller
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> org.osgi.service.cm.ConfigurationException:
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> {service.pid=connect.skandia.filetransfer.269d25ad-c4d6-4277-9d78-6d4b15acb795,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> fromuri=file:data/connect/test/sample/file2file,
>> >>>>>>>>>>>>>>>>>>>>
>> touris=file:data/connect/test/sample/file2file/test-out,
>> >>>>>>>>>>>>>>>>>>>> service.factorypid=connect.skandia.filetransfer,
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> felix.fileinstall.filename=connect.skandia.filetransfer-sample-file2file.cfg,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> connect.enabled=true, instance.name
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>> =connect.skandia.filetransfer.269d25ad-c4d6-4277-9d78-6d4b15acb795,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> connect.name=Sample file transfer from file to file}
>> :
>> >>>>>>>>>> Missing
>> >>>>>>>>>>>>>> handlers
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> :
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> org.apache.felix.ipojo.annotations:servicecontroller
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.ipojo.IPojoFactory.updated(IPojoFactory.java:609)[38:org.apache.felix.ipojo:1.4.0]
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1279)[6:org.apache.felix.configadmin:1.2.4]
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> at
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>
>> org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)[6:org.apache.felix.configadmin:1.2.4]
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> I'm not sure in which jar the
>> >>>>>>>>>>>>>>>>>>> "
>> org.apache.felix.ipojo.annotations:servicecontroller"
>> >>>>>>>>>> resides.
>> >>>>>>>>>>> I
>> >>>>>>>>>>>>>> tried
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> deploy
>> >>> "org.apache.felix.ipojo.handler.whiteboard-1.4.0.jar"
>> >>>>>>>>>> but
>> >>>>>>>>>>> it
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> didn't
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> seem to help.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Can anyone help me sort this out?
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> /Bengt
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> --
>> >>>>>>>>>>>>>>>>>> Karl Pauls
>> >>>>>>>>>>>>>>>>>> [email protected]
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>
>> ---------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>> 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]
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>
>> >>> ---------------------------------------------------------------------
>> >>>>>>>>>>>>>> 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]
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> ---------------------------------------------------------------------
>> >>>>>>> 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]
>> >>>>>
>> >>>>>
>> >>>
>> >>>
>> >>> ---------------------------------------------------------------------
>> >>> 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