On 21 January 2011 10:12, Charles Moulliard <[email protected]> wrote: > FYI, I have been able to deploy successfully the Aries Blog JPA EBA > archive on Apache Karaf (last snapshot 2.1.0-SNAPSHOT). Many thanks > for your help.
yw. That's great news! > > Regards, > > Charles > > > On Fri, Jan 14, 2011 at 6:26 PM, Charles Moulliard <[email protected]> > wrote: >> This is strange. I have deployed all the bundles mentioned in the >> pax-exam example that you show me but I continue to have the same >> error with namespace handler - Transaction >> >> 18:07:59,029 | DEBUG | -SNAPSHOT/deploy | ModelledResourceManagerImpl >> | impl.ModelledResourceManagerImpl 121 | 232 - >> org.apache.aries.application.modeller - 0.3.0.SNAPSHOT | Method exit: >> getServiceElements, returning >> org.apache.aries.application.modelling.ModellerException: >> org.osgi.service.blueprint.container.ComponentDefinitionException: >> Unsupported node namespace: >> http://aries.apache.org/xmlns/transactions/v1.0.0 >> >> >> This bundle is well deployed like the JPA, Application, JNDI, .... >> >> [ 227] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application OBR Resolver (0.3.0.SNAPSHOT) >> [ 228] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application Installer (0.3.0.SNAPSHOT) >> [ 229] [Active ] [ ] [ ] [ 60] Apache Aries >> Application API (0.3.0.SNAPSHOT) >> [ 230] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application Management (0.3.0.SNAPSHOT) >> [ 231] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application Utils (0.3.0.SNAPSHOT) >> [ 232] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application Modelling (0.3.0.SNAPSHOT) >> [ 233] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application Default local platform (0.3.0.SNAPSHOT) >> [ 234] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application Platform Repository (0.3.0.SNAPSHOT) >> [ 235] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application postresolve process (0.3.0.SNAPSHOT) >> [ 236] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application Deployment Management (0.3.0.SNAPSHOT) >> [ 237] [Active ] [Created ] [ ] [ 60] Apache Aries >> Application Runtime (0.3.0.SNAPSHOT) >> >> [ 272] [Active ] [Created ] [ ] [ 60] Apache Aries >> Transaction Blueprint (0.3.0.SNAPSHOT) >> [ 273] [Active ] [ ] [ ] [ 60] Apache Aries >> Transaction Manager (0.3.0.SNAPSHOT) >> >> [ 275] [Active ] [Created ] [ ] [ 60] Aries JPA >> Container blueprint integration for Aries blueprint (0.3.0.SNAPSHOT) >> [ 276] [Active ] [ ] [ ] [ 60] Aries JPA >> Container (0.3.0.SNAPSHOT) >> [ 277] [Active ] [ ] [ ] [ 60] Aries JPA >> Container Managed Contexts (0.3.0.SNAPSHOT) >> [ 292] [Active ] [ ] [ ] [ 60] Aries JPA >> Container API (0.3.0.SNAPSHOT) >> [ 293] [Active ] [ ] [ ] [ 60] Apache Aries >> Transaction Enlisting JDBC Datasource (0.3.0.SNAPSHOT) >> >> [ 278] [Active ] [ ] [ ] [ 60] Apache Aries >> JNDI API (0.3.0.SNAPSHOT) >> [ 279] [Active ] [ ] [ ] [ 60] Apache Aries >> JNDI RMI Handler (0.3.0.SNAPSHOT) >> [ 280] [Active ] [ ] [ ] [ 60] Apache Aries >> JNDI Core (0.3.0.SNAPSHOT) >> [ 281] [Active ] [ ] [ ] [ 60] Apache Aries >> JNDI URL Handler (0.3.0.SNAPSHOT) >> [ 282] [Active ] [ ] [ ] [ 60] Apache Aries >> JNDI Support for Legacy Runtimes (0.3.0.SNAPSHOT) >> >> [ 294] [Active ] [Created ] [ ] [ 60] Apache Aries >> blog sample transaction enlisting JDBC datasource >> (0.3.0.incubating-SNAPSHOT) >> >> >> Regards, >> >> >> >> >> On Fri, Jan 14, 2011 at 6:05 PM, Charles Moulliard <[email protected]> >> wrote: >>> Thx. >>> >>> I will add the missing bundles in karaf and recheck my log >>> >>> >>> On Fri, Jan 14, 2011 at 5:35 PM, mark <[email protected]> wrote: >>>> If we look at the EBAInstaller.install() code we see, >>>> >>>> LOGGER.debug("created app from {} : {} {} with contents {}", new Object[] { >>>> applicationLocation.getName(), appSymName, appVersion, >>>> app.getApplicationMetadata().getApplicationContents() }); >>>> >>>> AriesApplicationContext context = applicationManager.install(app); >>>> >>>> LOGGER.debug("installed app {} {} state: {}", new Object[] { >>>> appSymName, appVersion, >>>> context.getApplicationState() }); >>>> >>>> context.start(); >>>> >>>> LOGGER.debug("started app {} {} state: {}", new Object[] { >>>> appSymName, appVersion, >>>> context.getApplicationState() }); >>>> >>>> Your trace shows the "created app" message but not the "installed app" >>>> message. The ApplicationManager.install() call terminated with, >>>> >>>> 16:37:49,688 | DEBUG | -SNAPSHOT/deploy | ModelledResourceManagerImpl >>>> | impl.ModelledResourceManagerImpl 121 | 232 - >>>> org.apache.aries.application.modeller - 0.3.0.SNAPSHOT | Method exit: >>>> getServiceElements, returning >>>> org.apache.aries.application.modelling.ModellerException: >>>> org.osgi.service.blueprint.container.ComponentDefinitionException: >>>> Unsupported node namespace: >>>> http://aries.apache.org/xmlns/transactions/v1.0.0 >>>> >>>> Since you are trying to install the JpaBlogSampleWithEba, you will >>>> need to install all the same bundles into your runtime as we do in >>>> org.apache.aries.samples.blog.itests.JpaBlogSampleWithEbaTest.configuration() >>>> : >>>> >>>> public static Option[] configuration() { >>>> Option[] options = options( >>>> bootDelegationPackages("javax.transaction", "javax.transaction.*"), >>>> >>>> vmOption("-Dorg.osgi.framework.system.packages=javax.accessibility,javax.activation,javax.activity,javax.annotation,javax.annotation.processing,javax.crypto,javax.crypto.interfaces,javax.crypto.spec,javax.imageio,javax.imageio.event,javax.imageio.metadata,javax.imageio.plugins.bmp,javax.imageio.plugins.jpeg,javax.imageio.spi,javax.imageio.stream,javax.jws,javax.jws.soap,javax.lang.model,javax.lang.model.element,javax.lang.model.type,javax.lang.model.util,javax.management,javax.management.loading,javax.management.modelmbean,javax.management.monitor,javax.management.openmbean,javax.management.relation,javax.management.remote,javax.management.remote.rmi,javax.management.timer,javax.naming,javax.naming.directory,javax.naming.event,javax.naming.ldap,javax.naming.spi,javax.net,javax.net.ssl,javax.print,javax.print.attribute,javax.print.attribute.standard,javax.print.event,javax.rmi,javax.rmi.CORBA,javax.rmi.ssl,javax.script,javax.security.auth,javax.security.auth.callback,javax.security.auth.kerberos,javax.security.auth.login,javax.security.auth.spi,javax.security.auth.x500,javax.security.cert,javax.security.sasl,javax.sound.midi,javax.sound.midi.spi,javax.sound.sampled,javax.sound.sampled.spi,javax.sql,javax.sql.rowset,javax.sql.rowset.serial,javax.sql.rowset.spi,javax.swing,javax.swing.border,javax.swing.colorchooser,javax.swing.event,javax.swing.filechooser,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.plaf.metal,javax.swing.plaf.multi,javax.swing.plaf.synth,javax.swing.table,javax.swing.text,javax.swing.text.html,javax.swing.text.html.parser,javax.swing.text.rtf,javax.swing.tree,javax.swing.undo,javax.tools,javax.xml,javax.xml.bind,javax.xml.bind.annotation,javax.xml.bind.annotation.adapters,javax.xml.bind.attachment,javax.xml.bind.helpers,javax.xml.bind.util,javax.xml.crypto,javax.xml.crypto.dom,javax.xml.crypto.dsig,javax.xml.crypto.dsig.dom,javax.xml.crypto.dsig.keyinfo,javax.xml.crypto.dsig.spec,javax.xml.datatype,javax.xml.namespace,javax.xml.parsers,javax.xml.soap,javax.xml.stream,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform,javax.xml.transform.dom,javax.xml.transform.sax,javax.xml.transform.stax,javax.xml.transform.stream,javax.xml.validation,javax.xml.ws,javax.xml.ws.handler,javax.xml.ws.handler.soap,javax.xml.ws.http,javax.xml.ws.soap,javax.xml.ws.spi,javax.xml.xpath,org.ietf.jgss,org.omg.CORBA,org.omg.CORBA.DynAnyPackage,org.omg.CORBA.ORBPackage,org.omg.CORBA.TypeCodePackage,org.omg.CORBA.portable,org.omg.CORBA_2_3,org.omg.CORBA_2_3.portable,org.omg.CosNaming,org.omg.CosNaming.NamingContextExtPackage,org.omg.CosNaming.NamingContextPackage,org.omg.Dynamic,org.omg.DynamicAny,org.omg.DynamicAny.DynAnyFactoryPackage,org.omg.DynamicAny.DynAnyPackage,org.omg.IOP,org.omg.IOP.CodecFactoryPackage,org.omg.IOP.CodecPackage,org.omg.Messaging,org.omg.PortableInterceptor,org.omg.PortableInterceptor.ORBInitInfoPackage,org.omg.PortableServer,org.omg.PortableServer.CurrentPackage,org.omg.PortableServer.POAManagerPackage,org.omg.PortableServer.POAPackage,org.omg.PortableServer.ServantLocatorPackage,org.omg.PortableServer.portable,org.omg.SendingContext,org.omg.stub.java.rmi,org.w3c.dom,org.w3c.dom.bootstrap,org.w3c.dom.css,org.w3c.dom.events,org.w3c.dom.html,org.w3c.dom.ls,org.w3c.dom.ranges,org.w3c.dom.stylesheets,org.w3c.dom.traversal,org.w3c.dom.views,org.xml.sax,org.xml.sax.ext,org.xml.sax.helpers,javax.transaction;partial=true;mandatory:=partial,javax.transaction.xa;partial=true;mandatory:=partial"), >>>> // Log >>>> mavenBundle("org.ops4j.pax.logging", "pax-logging-api"), >>>> mavenBundle("org.ops4j.pax.logging", "pax-logging-service"), >>>> // Felix mvn url handler - do we need this? >>>> mavenBundle("org.ops4j.pax.url", "pax-url-mvn"), >>>> >>>> >>>> // this is how you set the default log level when using >>>> pax logging (logProfile) >>>> >>>> systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"), >>>> >>>> // Bundles >>>> mavenBundle("org.eclipse.equinox", "cm"), >>>> mavenBundle("org.eclipse.osgi", "services"), >>>> >>>> mavenBundle("org.ops4j.pax.web", "pax-web-extender-war"), >>>> mavenBundle("org.ops4j.pax.web", "pax-web-jetty-bundle"), >>>> mavenBundle("org.ops4j.pax.web", "pax-web-jsp"), >>>> mavenBundle("org.apache.derby", "derby"), >>>> mavenBundle("org.apache.geronimo.specs", >>>> "geronimo-jpa_2.0_spec"), >>>> >>>> mavenBundle("org.apache.geronimo.specs", >>>> "geronimo-jta_1.1_spec"), >>>> mavenBundle("org.apache.geronimo.specs", >>>> "geronimo-j2ee-connector_1.5_spec"), >>>> mavenBundle("org.apache.geronimo.components", >>>> "geronimo-transaction"), >>>> mavenBundle("org.apache.openjpa", "openjpa"), >>>> mavenBundle("commons-lang", "commons-lang"), >>>> mavenBundle("commons-collections", "commons-collections"), >>>> mavenBundle("commons-pool", "commons-pool"), >>>> mavenBundle("org.apache.servicemix.bundles", >>>> "org.apache.servicemix.bundles.serp"), >>>> mavenBundle("org.apache.aries.blueprint", >>>> "org.apache.aries.blueprint" ), >>>> mavenBundle("org.apache.aries.proxy", "org.apache.aries.proxy"), >>>> mavenBundle("org.apache.aries", "org.apache.aries.util" ), >>>> mavenBundle("org.apache.aries.jndi", "org.apache.aries.jndi" ), >>>> mavenBundle("org.apache.felix", >>>> "org.apache.felix.bundlerepository"), >>>> mavenBundle("org.apache.felix", "org.apache.felix.fileinstall" >>>> ), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.resolver.obr"), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.install" ), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.api" ), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.management" ), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.runtime" ), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.utils" ), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.modeller"), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.default.local.platform"), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.noop.platform.repo"), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.noop.postresolve.process"), >>>> mavenBundle("org.apache.aries.application", >>>> "org.apache.aries.application.deployment.management"), >>>> mavenBundle("org.apache.aries.jpa", "org.apache.aries.jpa.api" >>>> ), >>>> mavenBundle("org.apache.aries.jpa", >>>> "org.apache.aries.jpa.container" ), >>>> mavenBundle("org.apache.aries.jpa", >>>> "org.apache.aries.jpa.blueprint.aries" ), >>>> mavenBundle("org.apache.aries.jpa", >>>> "org.apache.aries.jpa.container.context" ), >>>> mavenBundle("org.apache.aries.transaction", >>>> "org.apache.aries.transaction.manager" ), >>>> mavenBundle("org.apache.aries.transaction", >>>> "org.apache.aries.transaction.blueprint" ), >>>> mavenBundle("org.apache.aries.transaction", >>>> "org.apache.aries.transaction.wrappers" ), >>>> mavenBundle("org.apache.aries.samples.blog", >>>> "org.apache.aries.samples.blog.datasource" ), >>>> mavenBundle("asm", "asm-all" ), >>>> equinox().version("3.5.0") >>>> ); >>>> options = updateOptions(options); >>>> return options; >>>> } >>>> >>>> Regards, >>>> Mark >>>> >>>> On 14 January 2011 16:06, Charles Moulliard <[email protected]> wrote: >>>>> Hi Mark, >>>>> >>>>> I have found from the log file an additional info >>>>> >>>>> 16:37:49,082 | DEBUG | -SNAPSHOT/deploy | EBAInstaller >>>>> | application.install.EBAInstaller 67 | 228 - >>>>> org.apache.aries.application.install - 0.3.0.SNAPSHOT | created app >>>>> from org.apache.aries.samples.blog.jpa.eba-0.3-SNAPSHOT.eba : >>>>> org.apache.aries.samples.blog.jpa.eba 0.3.0.SNAPSHOT with contents >>>>> [org.apache.aries.samples.blog.persistence.jpa;{version->0.3.0.SNAPSHOT}, >>>>> org.apache.aries.samples.blog.biz;{version->0.3.0.SNAPSHOT}, >>>>> org.apache.aries.samples.blog.api;{version->0.3.0.SNAPSHOT}, >>>>> org.apache.aries.samples.blog.web;{version->0.3.0.SNAPSHOT}] >>>>> 16:37:49,087 | DEBUG | -SNAPSHOT/deploy | >>>>> DeploymentManifestManagerImpl | pl.DeploymentManifestManagerImpl >>>>> 137 | 236 - org.apache.aries.application.deployment.management - >>>>> 0.3.0.SNAPSHOT | Method entry: generateDeploymentManifest, args >>>>> [org.apache.aries.application.management.impl.AriesApplicationImpl@53720a2, >>>>> []] >>>>> 16:37:49,087 | DEBUG | -SNAPSHOT/deploy | >>>>> DeploymentManifestManagerImpl | pl.DeploymentManifestManagerImpl >>>>> 633 | 236 - org.apache.aries.application.deployment.management - >>>>> 0.3.0.SNAPSHOT | Method entry: getByValueBundles, args >>>>> [org.apache.aries.application.management.impl.AriesApplicationImpl@53720a2] >>>>> 16:37:49,103 | DEBUG | -SNAPSHOT/deploy | ModelledResourceManagerImpl >>>>> | impl.ModelledResourceManagerImpl 131 | 232 - >>>>> org.apache.aries.application.modeller - 0.3.0.SNAPSHOT | Method entry: >>>>> getModelledResource, args [null, >>>>> /var/folders/+B/+BKA5gXmHdSjYzHY8ESZGk+++TI/-Tmp-/ebaTmp4372104825175758605.tmporg.apache.aries.samples.blog.api-0.3-SNAPSHOT.jar/] >>>>> 16:37:49,103 | DEBUG | -SNAPSHOT/deploy | ModelledResourceManagerImpl >>>>> | impl.ModelledResourceManagerImpl 88 | 232 - >>>>> org.apache.aries.application.modeller - 0.3.0.SNAPSHOT | Method entry: >>>>> getServiceElements, args >>>>> /var/folders/+B/+BKA5gXmHdSjYzHY8ESZGk+++TI/-Tmp-/ebaTmp4372104825175758605.tmporg.apache.aries.samples.blog.api-0.3-SNAPSHOT.jar/ >>>>> 16:37:49,104 | DEBUG | -SNAPSHOT/deploy | ModelledResourceManagerImpl >>>>> | impl.ModelledResourceManagerImpl 157 | 232 - >>>>> org.apache.aries.application.modeller - 0.3.0.SNAPSHOT | Method entry: >>>>> findBlueprints, args >>>>> /var/folders/+B/+BKA5gXmHdSjYzHY8ESZGk+++TI/-Tmp-/ebaTmp4372104825175758605.tmporg.apache.aries.samples.blog.api-0.3-SNAPSHOT.jar/ >>>>> 16:37:49,104 | DEBUG | -SNAPSHOT/deploy | ModelledResourceManagerImpl >>>>> | impl.ModelledResourceManagerImpl 178 | 232 - >>>>> org.apache.aries.application.modeller - 0.3.0.SNAPSHOT | Method entry: >>>>> findBlueprints, args >>>>> [/var/folders/+B/+BKA5gXmHdSjYzHY8ESZGk+++TI/-Tmp-/ebaTmp4372104825175758605.tmporg.apache.aries.samples.blog.api-0.3-SNAPSHOT.jar/] >>>>> 16:37:49,105 | DEBUG | -SNAPSHOT/deploy | EBAInstaller >>>>> | application.install.EBAInstaller 67 | 228 - >>>>> org.apache.aries.application.install - 0.3.0.SNAPSHOT | created app >>>>> from org.apache.aries.samples.blog.jpa.eba-0.3-SNAPSHOT.eba : >>>>> org.apache.aries.samples.blog.jpa.eba 0.3.0.SNAPSHOT with contents >>>>> [org.apache.aries.samples.blog.persistence.jpa;{version->0.3.0.SNAPSHOT}, >>>>> org.apache.aries.samples.blog.biz;{version->0.3.0.SNAPSHOT}, >>>>> org.apache.aries.samples.blog.api;{version->0.3.0.SNAPSHOT}, >>>>> org.apache.aries.samples.blog.web;{version->0.3.0.SNAPSHOT}] >>>>> >>>>> It seems that Aries Application has created an 'app'. That means that >>>>> it has been able to find it from the deploy directory of Apache Karaf. >>>>> >>>>> Question : Why the bundles defined in the eba archive are not deployed >>>>> ? Could it be related to the missing package that you find Aries >>>>> Blueprint Transaction ? >>>>> >>>>> Regards, >>>>> >>>>> Charles M. >>>>> >>>>> >>>>> On Fri, Jan 14, 2011 at 5:00 PM, Mark Nuttall <[email protected]> wrote: >>>>>> Hi Charles. >>>>>> There are many exceptions in your trace - "Exception" is found 69 >>>>>> times, and I can't say for sure whether any of them are responsible >>>>>> for the behaviour that you're seeing. However what jumps out at me is, >>>>>> >>>>>> 16:37:49,688 | DEBUG | -SNAPSHOT/deploy | ModelledResourceManagerImpl >>>>>> | impl.ModelledResourceManagerImpl 121 | 232 - >>>>>> org.apache.aries.application.modeller - 0.3.0.SNAPSHOT | Method exit: >>>>>> getServiceElements, returning >>>>>> org.apache.aries.application.modelling.ModellerException: >>>>>> org.osgi.service.blueprint.container.ComponentDefinitionException: >>>>>> Unsupported node namespace: >>>>>> http://aries.apache.org/xmlns/transactions/v1.0.0 >>>>>> >>>>>> If you are trying use declarative transactions in your application's >>>>>> blueprint files, then you will need to add the >>>>>> org.apache.aries.transaction.blueprint bundle to your runtime. >>>>>> >>>>>> Regards, >>>>>> Mark >>>>>> >>>>>> On 14 January 2011 15:43, Charles Moulliard <[email protected]> wrote: >>>>>>> Here is the log file that I put in attachment and where I have set >>>>>>> org.apache.aries.application trace level to DEBUG. Maybe you will see >>>>>>> something that I don t see. >>>>>>> >>>>>>> Remark : using debug of felix has not reported any error >>>>>>> >>>>>>> >>>>>>> On Fri, Jan 14, 2011 at 3:28 PM, Mark Nuttall <[email protected]> >>>>>>> wrote: >>>>>>>> Hi Charles. >>>>>>>> The PlatformRepository and LocalPlatform services were both in your >>>>>>>> list of services that blueprint was waiting for. Since they're >>>>>>>> started, please can you check to see if any of the other services >>>>>>>> called out in your previous list have now been published? I'm puzzled >>>>>>>> that your logs did not show some of your various service dependencies, >>>>>>>> such as PlatformRepository and LocalPlatform, being met when those >>>>>>>> services came up. Which if any of the required services are not being >>>>>>>> published? >>>>>>>> >>>>>>>> Regards, >>>>>>>> Mark >>>>>>>> >>>>>>>> On 14 January 2011 14:11, Charles Moulliard <[email protected]> >>>>>>>> wrote: >>>>>>>>> Hi Mark, >>>>>>>>> >>>>>>>>> All the Blueprint services have their status "started". >>>>>>>>> >>>>>>>>> According to your first remark, it seems that the service is well >>>>>>>>> published and exported by OSGI Service >>>>>>>>> >>>>>>>>> Apache Aries Application Platform Repository (234) provides: >>>>>>>>> ------------------------------------------------------------ >>>>>>>>> org.apache.aries.application.management.spi.repository.PlatformRepository >>>>>>>>> org.osgi.service.blueprint.container.BlueprintContainer >>>>>>>>> >>>>>>>>> And for the second the service is also well exposed >>>>>>>>> >>>>>>>>> Apache Aries Application Default local platform (233) provides: >>>>>>>>> --------------------------------------------------------------- >>>>>>>>> org.apache.aries.application.management.spi.runtime.LocalPlatform >>>>>>>>> org.osgi.service.blueprint.container.BlueprintContainer >>>>>>>>> >>>>>>>>> [ 233] [Active ] [Created ] [ ] [ 60] Apache Aries >>>>>>>>> Application Default local platform (0.3.0.SNAPSHOT) >>>>>>>>> [ 234] [Active ] [Created ] [ ] [ 60] Apache Aries >>>>>>>>> Application Platform Repository (0.3.0.SNAPSHOT) >>>>>>>>> >>>>>>>>> Regards, >>>>>>>>> >>>>>>>>> Charles >>>>>>>>> >>>>>>>>> >>>>>>>>> On Fri, Jan 14, 2011 at 1:29 PM, Mark Nuttall <[email protected]> >>>>>>>>> wrote: >>>>>>>>>> Hello Charles. >>>>>>>>>> First of all, please have a look at the bundles in your runtime to >>>>>>>>>> see >>>>>>>>>> if any have failed to resolve. A missing package can easily set off a >>>>>>>>>> chain of blueprint service dependency failures. >>>>>>>>>> >>>>>>>>>> If all your bundles have resolved then we need to start unpicking the >>>>>>>>>> service dependency failures. I'd start with, >>>>>>>>>> >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.resolver.obr is waiting for >>>>>>>>>>> dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.management.spi.repository.PlatformRepository)] >>>>>>>>>> >>>>>>>>>> This service should have been published by >>>>>>>>>> org.apache.aries.application.noop.platform.repo. The bundle is very >>>>>>>>>> simple, with only two package imports: org.osgi.core and >>>>>>>>>> org.apache.aries.application.api. Please have a look at that bundle >>>>>>>>>> in >>>>>>>>>> the runtime and let us know why the expected service is not being >>>>>>>>>> published. >>>>>>>>>> >>>>>>>>>> The next bundle to check is >>>>>>>>>> org.apache.aries.application.default.local.platform, which should be >>>>>>>>>> publishing a service with interface >>>>>>>>>> org.apache.aries.application.management.spi.runtime.LocalPlatform. >>>>>>>>>> Again this is a very simple bundle with the same package imports as >>>>>>>>>> the previous one. The output below indicates that neither bundle has >>>>>>>>>> resolved and published its expected service. >>>>>>>>>> >>>>>>>>>> Regards, >>>>>>>>>> Mark >>>>>>>>>> >>>>>>>>>> On 14 January 2011 11:42, Charles Moulliard <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> I have installed the following bundles to be able to deploy an eab >>>>>>>>>>> archive on Karaf but nothing happens >>>>>>>>>>> >>>>>>>>>>> [ 227] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.resolver.obr/0.3-SNAPSHOT >>>>>>>>>>> [ 228] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.install/0.3-SNAPSHOT >>>>>>>>>>> [ 229] [Active ] [ ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.api/0.3-SNAPSHOT >>>>>>>>>>> [ 230] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.management/0.3-SNAPSHOT >>>>>>>>>>> [ 231] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.utils/0.3-SNAPSHOT >>>>>>>>>>> [ 232] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.modeller/0.3-SNAPSHOT >>>>>>>>>>> [ 233] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.default.local.platform/0.3-SNAPSHOT >>>>>>>>>>> [ 234] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.noop.platform.repo/0.3-SNAPSHOT >>>>>>>>>>> [ 235] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.noop.postresolve.process/0.3-SNAPSHOT >>>>>>>>>>> [ 236] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.deployment.management/0.3-SNAPSHOT >>>>>>>>>>> [ 237] [Active ] [Created ] [ ] [ 60] >>>>>>>>>>> mvn:org.apache.aries.application/org.apache.aries.application.runtime/0.3-SNAPSHOT >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> In the log file, I see that some dependencies are waiting but that >>>>>>>>>>> is all : >>>>>>>>>>> >>>>>>>>>>> 12:37:56,149 | INFO | rint Extender: 3 | BlueprintContainerImpl >>>>>>>>>>> | container.BlueprintContainerImpl 305 | 8 - >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.resolver.obr is waiting for >>>>>>>>>>> dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.modelling.ModellingManager), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.repository.PlatformRepository), >>>>>>>>>>> (objectClass=org.apache.aries.application.modelling.utils.ModellingHelper)] >>>>>>>>>>> 12:37:56,151 | INFO | rint Extender: 1 | BlueprintContainerImpl >>>>>>>>>>> | container.BlueprintContainerImpl 305 | 8 - >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.install is waiting for dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.management.AriesApplicationManager)] >>>>>>>>>>> 12:37:56,205 | INFO | rint Extender: 3 | BlueprintContainerImpl >>>>>>>>>>> | container.BlueprintContainerImpl 305 | 8 - >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.management is waiting for dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.DeploymentMetadataFactory), >>>>>>>>>>> (objectClass=org.apache.aries.application.ApplicationMetadataFactory), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.resolve.DeploymentManifestManager), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.runtime.AriesApplicationContextManager), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.runtime.LocalPlatform)] >>>>>>>>>>> 12:37:56,306 | INFO | rint Extender: 2 | BlueprintContainerImpl >>>>>>>>>>> | container.BlueprintContainerImpl 305 | 8 - >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.management is waiting for dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.management.spi.resolve.DeploymentManifestManager), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.runtime.AriesApplicationContextManager), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.runtime.LocalPlatform)] >>>>>>>>>>> 12:37:56,343 | INFO | rint Extender: 1 | BlueprintContainerImpl >>>>>>>>>>> | container.BlueprintContainerImpl 305 | 8 - >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.resolver.obr is waiting for >>>>>>>>>>> dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.management.spi.repository.PlatformRepository)] >>>>>>>>>>> 12:37:56,397 | INFO | rint Extender: 2 | BlueprintContainerImpl >>>>>>>>>>> | container.BlueprintContainerImpl 305 | 8 - >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.deployment.management is waiting for >>>>>>>>>>> dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.management.spi.resolve.PostResolveTransformer), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.runtime.LocalPlatform), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.resolve.AriesApplicationResolver)] >>>>>>>>>>> 12:37:56,486 | INFO | rint Extender: 3 | BlueprintContainerImpl >>>>>>>>>>> | container.BlueprintContainerImpl 305 | 8 - >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.management is waiting for dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.management.spi.resolve.DeploymentManifestManager), >>>>>>>>>>> (objectClass=org.apache.aries.application.management.spi.runtime.LocalPlatform)] >>>>>>>>>>> 12:37:56,495 | INFO | rint Extender: 1 | BlueprintContainerImpl >>>>>>>>>>> | container.BlueprintContainerImpl 305 | 8 - >>>>>>>>>>> org.apache.aries.blueprint - 0.3.0.SNAPSHOT | Bundle >>>>>>>>>>> org.apache.aries.application.management is waiting for dependencies >>>>>>>>>>> [(objectClass=org.apache.aries.application.management.spi.resolve.DeploymentManifestManager)] >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Regards, >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Charles Moulliard >>>>>>>>>>> >>>>>>>>>>> Sr. Principal Solution Architect - FuseSource >>>>>>>>>>> Apache Committer >>>>>>>>>>> >>>>>>>>>>> Blog : http://cmoulliard.blogspot.com >>>>>>>>>>> Twitter : http://twitter.com/cmoulliard >>>>>>>>>>> Linkedin : http://www.linkedin.com/in/charlesmoulliard >>>>>>>>>>> Skype: cmoulliard >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Tue, Jan 11, 2011 at 9:24 PM, Charles Moulliard >>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>> How Aries Application Install knows that the folder to be scanned >>>>>>>>>>>> is "load" ? >>>>>>>>>>>> How can we override this location > >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Tue, Jan 11, 2011 at 7:50 PM, Charles Moulliard >>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>> Many thanks for the complement of info. This help me to see all >>>>>>>>>>>>> the >>>>>>>>>>>>> possibilities offered by Aries Application as I'min the process to >>>>>>>>>>>>> prepare a new Webinar where I will present much more Aries >>>>>>>>>>>>> functionalities available with Apache ServiceMix/Karaf >>>>>>>>>>>>> >>>>>>>>>>>>> On Tue, Jan 11, 2011 at 1:07 PM, Jeremy Hughes >>>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>>> On 3 January 2011 10:51, Charles Moulliard >>>>>>>>>>>>>> <[email protected]> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Mark, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Happy New-Year 2011 and many thanks for the information. I have >>>>>>>>>>>>>>> started to create a feature file to deploy those bundles on >>>>>>>>>>>>>>> Apache >>>>>>>>>>>>>>> Karaf OSGI container. What do you plan to do to align Aries >>>>>>>>>>>>>>> Application with OSGI Service as you use a deprecated API ony >>>>>>>>>>>>>>> supported by Equinox and not Felix ? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Remark : Could you upgrade Aries Application to support Apache >>>>>>>>>>>>>>> Felix >>>>>>>>>>>>>>> FileInstall range of version from 2.x to 3.x as we use 3.1.0 on >>>>>>>>>>>>>>> Apache >>>>>>>>>>>>>>> Karaf ? >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> You could look at: >>>>>>>>>>>>>> >>>>>>>>>>>>>> mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>> "org.apache.aries.application.install" ), >>>>>>>>>>>>>> >>>>>>>>>>>>>> it has a single class: EBAInstaller which extends the fileinstall >>>>>>>>>>>>>> ArtifactInstaller. It's used in the Blog sample - you go to a >>>>>>>>>>>>>> built >>>>>>>>>>>>>> samples/blog/blog-assembly/target which includes the fileinstall >>>>>>>>>>>>>> bundle and >>>>>>>>>>>>>> start Aries in a framework. The load dir is created and you drop >>>>>>>>>>>>>> and EBA >>>>>>>>>>>>>> into it. Fileinstall delegates to the EBAInstaller to install >>>>>>>>>>>>>> the bundles >>>>>>>>>>>>>> from the EBA. >>>>>>>>>>>>>> >>>>>>>>>>>>>> HTH, >>>>>>>>>>>>>> Jeremy >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Regards, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Charles Moulliard >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Sr. Principal Solution Architect - FuseSource >>>>>>>>>>>>>>> Apache Committer >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Blog : http://cmoulliard.blogspot.com >>>>>>>>>>>>>>> Twitter : http://twitter.com/cmoulliard >>>>>>>>>>>>>>> Linkedin : http://www.linkedin.com/in/charlesmoulliard >>>>>>>>>>>>>>> Skype: cmoulliard >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Wed, Dec 29, 2010 at 11:00 AM, Mark Nuttall >>>>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> > Hi Charles, >>>>>>>>>>>>>>> >> 1) Can someone tell me what are the bundles required to >>>>>>>>>>>>>>> >> deploy eba >>>>>>>>>>>>>>> >> files on Apache Karaf/Felix ? groupId/artificactId >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > For some working examples, please see >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > application/application-itests/src/test/java/IsolatedRuntimeTest.java, >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > and the three BlogSampleWithEba itests, such as >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > samples/blog/blog-itests/JpaBlogSampleWithEbaTest.java >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > Firstly there is a set of common prereqs, where the arguments >>>>>>>>>>>>>>> > to >>>>>>>>>>>>>>> > mavenBundle are (group, artifact): >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.blueprint", >>>>>>>>>>>>>>> > "org.apache.aries.blueprint" >>>>>>>>>>>>>>> ), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.proxy", >>>>>>>>>>>>>>> > "org.apache.aries.proxy"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries", "org.apache.aries.util" ), >>>>>>>>>>>>>>> > mavenBundle("org.apache.felix", >>>>>>>>>>>>>>> > "org.apache.felix.bundlerepository"), >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > There there's a set of common bundles in the >>>>>>>>>>>>>>> > org.apache.aries.application >>>>>>>>>>>>>>> group: >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.resolver.obr"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.install" ), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.api" ), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.management" ), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.utils" ), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.modeller"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.default.local.platform"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.noop.platform.repo"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.noop.postresolve.process"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.deployment.management"), >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > Finally we have two different runtimes. >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.runtime" ), >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > is very simple: it just installs every bundle into a single >>>>>>>>>>>>>>> > framework. >>>>>>>>>>>>>>> > It provides no isolation between different .ebas, and was >>>>>>>>>>>>>>> > really only >>>>>>>>>>>>>>> > written so as to demonstrate that >>>>>>>>>>>>>>> > org.apache.aries.application.management was functional. I >>>>>>>>>>>>>>> > don't >>>>>>>>>>>>>>> > believe anyone's put this runtime to serious use yet. >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > Alternatively, the next group of bundles provide a far more >>>>>>>>>>>>>>> > rugged and >>>>>>>>>>>>>>> > functional runtime environment, in which the bundles listed >>>>>>>>>>>>>>> > in each >>>>>>>>>>>>>>> > application's Application-Content header are isolated from >>>>>>>>>>>>>>> > each other >>>>>>>>>>>>>>> > by being installed into their own framework. The only >>>>>>>>>>>>>>> > drawback here is >>>>>>>>>>>>>>> > that org.apache.aries.application.runtime.framework has to use >>>>>>>>>>>>>>> > deprecated APIs based on early drafts of OSGi RFC138 >>>>>>>>>>>>>>> > (org.osgi.service.framework.CompositeBundle, >>>>>>>>>>>>>>> > org.osgi.service.framework.CompositeBundleFactory) in order >>>>>>>>>>>>>>> > to create >>>>>>>>>>>>>>> > and manage these framework instances. My understanding is >>>>>>>>>>>>>>> > that Equinox >>>>>>>>>>>>>>> > implements these APIs, but that the Felix does not. >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.runtime.isolated"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.runtime.framework"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.runtime.framework.management"), >>>>>>>>>>>>>>> > mavenBundle("org.apache.aries.application", >>>>>>>>>>>>>>> > "org.apache.aries.application.runtime.repository"), >>>>>>>>>>>>>>> > equinox().version("3.5.0")); >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> >> 2) Can we deploy an eba file using the same command as we >>>>>>>>>>>>>>> >> use to >>>>>>>>>>>>>>> >> deploy a bundle mvn:groupId/artifactId/version/eba ? >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > I suspect that extra work might be required in order to >>>>>>>>>>>>>>> > achieve that. >>>>>>>>>>>>>>> > As you'll see from the itests, the mechanism today is of the >>>>>>>>>>>>>>> > form, >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > URL urlToEba = >>>>>>>>>>>>>>> > getUrlToEba("org.apache.aries.samples.blog", >>>>>>>>>>>>>>> > "org.apache.aries.samples.blog.jpa.eba"); >>>>>>>>>>>>>>> > AriesApplicationManager manager = >>>>>>>>>>>>>>> > getOsgiService(AriesApplicationManager.class); >>>>>>>>>>>>>>> > AriesApplication app = >>>>>>>>>>>>>>> > manager.createApplication(urlToEba); >>>>>>>>>>>>>>> > AriesApplicationContext ctx = manager.install(app); >>>>>>>>>>>>>>> > ctx.start(); >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > Do let us know how you get on! >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > Regards, >>>>>>>>>>>>>>> > Mark >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > On 27 December 2010 09:03, Charles Moulliard >>>>>>>>>>>>>>> > <[email protected]> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >> Hi, >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> 1) Can someone tell me what are the bundles required to >>>>>>>>>>>>>>> >> deploy eba >>>>>>>>>>>>>>> >> files on Apache Karaf/Felix ? >>>>>>>>>>>>>>> >> groupId/artificactId >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> 2) Can we deploy an eba file using the same command as we >>>>>>>>>>>>>>> >> use to >>>>>>>>>>>>>>> >> deploy a bundle mvn:groupId/artifactId/version/eba ? >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> Charles Moulliard >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> Sr. Principal Solution Architect - FuseSource >>>>>>>>>>>>>>> >> Apache Committer >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> Blog : http://cmoulliard.blogspot.com >>>>>>>>>>>>>>> >> Twitter : http://twitter.com/cmoulliard >>>>>>>>>>>>>>> >> Linkedin : http://www.linkedin.com/in/charlesmoulliard >>>>>>>>>>>>>>> >> Skype: cmoulliard >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
