Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [smila-user] 3rd-party-classe in own pipelet

Hi,

the problem is still a class loading issue but it appears that the solution provided doesn’t do the trick.

unfortunately there is no single place to mod' smila's classpath. each bundle defines thru import package in the manifest what dependencies to other java packages exist (or thru require bundle which bundles).

hence, one solution to overcome ur problem is to
1. make an own bundle for the 3rd party lib and export its packages in the manifest
2. if that not already solves the problem, u might want to consider adding the imports to org.eclipse.smila.processing.bpel manifest which is where the ODEWorkflowProcessor lives.
Although this is almost considered a hack but sometimes this is the only solution - if u want to pure OSGi w/o any impl. specific stuff like eclipse's extension point, Eclipse-BuddyPolicy manifest head, etc.

We had to do this as well in some cases. For instance, if u want to use other DB drivers for ur JPA implementation of the storages, the import to the driver package has to be defined in the bundle's manifest, e.g. org.eclipse.smila.binarystorage.persistence.jpa\META-INF.

Unfortunately these are some of the limitations of pure OSGi.

Thomas Menzel @ brox IT-Solutions GmbH

-----Original Message-----
From: smila-user-bounces@xxxxxxxxxxx [mailto:smila-user-bounces@xxxxxxxxxxx] On Behalf Of Patrick Pekczynski
Sent: Dienstag, 11. Januar 2011 16:54
To: Smila project user mailing list
Subject: Re: [smila-user] 3rd-party-classe in own pipelet

Hi there,

thanks for your quick responses. It seems that neither the "class-loading" nor the "config.ini" does trick.
@Thomas:
Yes I'm trying to integrate my pipelet and this third-party JAR in a SMILA "integration environment".

The thing is that the class-loading error occurs apparently upon checking the correctness of the pipeline (AddWebPipline) containing my pipelet (ExtractFeedPipelet) as in the following snippet

2011-01-11 16:24:40,369 INFO  [Component Resolve Thread (Bundle 5)          ]  jmx.JmxManagementController                   - SMILA:C0=Processing,C1=Simple Pipelet,C2=AddWebPipeline,Agent=org.eclipse.smila.integration.imc.extractfeed.ExtractFeedPipelet@line-109
 2011-01-11 16:24:40,371 ERROR [Component Resolve Thread (Bundle 5)          ]  bpel.ODEWorkflowProcessor                     - Start of BPEL workflow service aborted: Unknown fatal error.Service is non-functional, please fix problem and restart bundle
java.lang.NoClassDefFoundError: org/apache/solr/common/SolrInputDocument
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
        at java.lang.Class.getConstructor0(Unknown Source)
        at java.lang.Class.newInstance0(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)

Isn't there a single place (just like the plugins-folder) where one can put a JAR such that the contained classes are known to SMILA upon start of SMILA.exe ???

In other words, where can I manipulate the classpath of SMILA that is provided to ALL bundles or is this not possible this way?

Thanks for your help

Best regards,

Patrick


-----Ursprüngliche Nachricht-----
Von: smila-user-bounces@xxxxxxxxxxx [mailto:smila-user-bounces@xxxxxxxxxxx] Im Auftrag von Martin Röbert
Gesendet: Dienstag, 11. Januar 2011 15:24
An: Smila project user mailing list
Betreff: Re: [smila-user] 3rd-party-classe in own pipelet

Hi Patrick,

I think you mean the configuration/config.ini - there you find the
bundles to load and the according init-levels in the binary build.


Cheers,

Martin

On 01/11/2011 02:58 PM, Thomas Menzel wrote:
>
> Hi Patrick,
>
> if u experience this issue in the final deployed product but not when
> run in the IDE it could be a build issue, e.g. the .jar that is part
> of ur bundle is not included in the build.properties in the binary build.
>
> otherwise this is most likely a class loader issue. The jar is only
> known to your bundle but not to ODE which starts our code and hence
> doesn’t know about the imports in the manifest.
>
> Despite not having tested this and assuming everything else is correct
> (e.g. unit tests for the pipelets work), I suppose that u have to wrap
> ur code that calls classes of the .jar in statements like these:
>
> *_final_*_ ClassLoader __tcclBackup__ =
> Thread./currentThread/().getContextClassLoader();_
>
>
> Thread./currentThread/().setContextClassLoader(this.getClass().getClassLoader());
>
> *try* {
>
> //do the stuff here
>
> //} catch (final Exception e) {
>
>     } *finally* {
>
> //    set the CL back to what is was
>
>       Thread./currentThread/().setContextClassLoader(tcclBackup);
>
>     }
>
> since this is so common when doing bundle dev. I have an eclipse
> template for this:
>
> *final* ClassLoader tcclBackup =
> Thread.currentThread().getContextClassLoader();
>
>
> Thread.currentThread().setContextClassLoader(${enclosing_type}.*class*.${cursor}
> getClass().getClassLoader());
>
> *try* {
>
> //do the stuff here
>
> //} catch (final Exception e) {
>
>     } *finally* {
>
> //    set the CL back to what is was
>
>       Thread.currentThread().setContextClassLoader(tcclBackup);
>
>     }
>
> Thomas Menzel @ brox IT-Solutions GmbH
>
> *From:* smila-user-bounces@xxxxxxxxxxx
> [mailto:smila-user-bounces@xxxxxxxxxxx] *On Behalf Of *Patrick Pekczynski
> *Sent:* Dienstag, 11. Januar 2011 14:39
> *To:* smila-user@xxxxxxxxxxx
> *Subject:* [smila-user] 3rd-party-classe in own pipelet
>
> Dear all,
>
> While using SMILA I finally managed to setup a pipeline where I am
> including my own test “Extraction-Pipelet” which is working fine.
>
> Now I wanted to extend this pipelet using 3^rd party libraries
>  XXX.jar using my own Solr-Client.
>
> In order to have my pipelet compile I added the XXX.jar in a
> lib-folder in my pipelet and adapted the MANIFEST.MF of my bundle.
>
> However, as soon as I add this extensions to SMILA’s plugins-folder
> and startup SMILA my bpel-pipeline cannot by instantiated because of
> class wich nis not found (not loaded)
>
> START EXCEPTION######################
>
> 2011-01-11 13:27:07,006 INFO  [Component Resolve Thread (Bundle
> 5)          ]  jmx.JmxManagementController                   -
> SMILA:C0=Processing,C1=Simple
> Pipelet,C2=AddWebPipeline,Agent=org.eclipse.smila.integration.imc.extractfeed.ExtractFeedPipelet@line-109
>
>  2011-01-11 13:27:07,006 ERROR [Component Resolve Thread (Bundle
> 5)          ]  bpel.ODEWorkflowProcessor                     - Start
> of BPEL workflow service aborted: Unknown fatal error.Service is
> non-functional, please fix problem and restart bundle
>
> java.lang.NoClassDefFoundError: org/apache/solr/common/SolrInputDocument
>
>                 at java.lang.Class.getDeclaredConstructors0(Native Method)
>
>                 at
> java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
>
>                 at java.lang.Class.getConstructor0(Unknown Source)
>
>                 at java.lang.Class.newInstance0(Unknown Source)
>
>                 at java.lang.Class.newInstance(Unknown Source)
>
>                 at
> org.eclipse.smila.processing.bpel.PipeletManager.initPipeletInstance(PipeletManager.java:275)
>
>                 at
> org.eclipse.smila.processing.bpel.PipeletManager.doRegisterActivity(PipeletManager.java:130)
>
>                 at
> org.eclipse.smila.processing.bpel.PipeletManager.doRegisterActivity(PipeletManager.java:1)
>
>                 at
> org.eclipse.smila.processing.bpel.ExtensionManager.registerActivity(ExtensionManager.java:94)
>
>                 at
> org.eclipse.smila.processing.bpel.SMILAExtensionBundle$InvokePipeletActivity.validate(SMILAExtensionBundle.java:105)
>
>                 at
> org.apache.ode.bpel.compiler.v2.ExtensionActivtityGenerator.compile(ExtensionActivtityGenerator.java:54)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl$7.run(BpelCompilerImpl.java:899)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:1068)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compileActivity(BpelCompilerImpl.java:895)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:838)
>
>                 at
> org.apache.ode.bpel.compiler.v2.SequenceGenerator.compileChildren(SequenceGenerator.java:55)
>
>                 at
> org.apache.ode.bpel.compiler.v2.SequenceGenerator.compile(SequenceGenerator.java:46)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl$7.run(BpelCompilerImpl.java:899)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:1068)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compileActivity(BpelCompilerImpl.java:895)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:838)
>
>                 at
> org.apache.ode.bpel.compiler.v2.IfGenerator.compile(IfGenerator.java:52)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl$7.run(BpelCompilerImpl.java:899)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:1068)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compileActivity(BpelCompilerImpl.java:895)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:838)
>
>                 at
> org.apache.ode.bpel.compiler.v2.SequenceGenerator.compileChildren(SequenceGenerator.java:55)
>
>                 at
> org.apache.ode.bpel.compiler.v2.SequenceGenerator.compile(SequenceGenerator.java:46)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl$7.run(BpelCompilerImpl.java:899)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:1068)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compileActivity(BpelCompilerImpl.java:895)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:838)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl$5.run(BpelCompilerImpl.java:744)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl$8.run(BpelCompilerImpl.java:1168)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:1068)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compileScope(BpelCompilerImpl.java:1118)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:724)
>
>                 at
> org.apache.ode.bpel.compiler.v2.BpelCompilerImpl.compile(BpelCompilerImpl.java:132)
>
>                 at
> org.apache.ode.bpel.compiler.BpelC.compile(BpelC.java:268)
>
>                 at
> org.apache.ode.bpel.compiler.BpelC.compile(BpelC.java:338)
>
>                 at
> org.apache.ode.store.DeploymentUnitDir.compile(DeploymentUnitDir.java:171)
>
>                 at
> org.apache.ode.store.DeploymentUnitDir.compile(DeploymentUnitDir.java:134)
>
>                 at
> org.apache.ode.store.ProcessStoreImpl.deploy(ProcessStoreImpl.java:183)
>
>                 at
> org.eclipse.smila.ode.ODEServer.deploy(ODEServer.java:175)
>
>                 at
> org.eclipse.smila.processing.bpel.ODEWorkflowProcessor.deployPipelines(ODEWorkflowProcessor.java:602)
>
>                 at
> org.eclipse.smila.processing.bpel.ODEWorkflowProcessor.initializeBPEL(ODEWorkflowProcessor.java:584)
>
>                 at
> org.eclipse.smila.processing.bpel.ODEWorkflowProcessor.activate(ODEWorkflowProcessor.java:523)
>
>                 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
>
>                 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
> Source)
>
>                 at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>
>                 at java.lang.reflect.Method.invoke(Unknown Source)
>
>                 at
> org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:230)
>
>                 at
> org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:140)
>
>                 at
> org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:330)
>
>                 at
> org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:560)
>
>                 at
> org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:182)
>
>                 at
> org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:393)
>
>                 at
> org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:176)
>
>                 at
> org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:786)
>
>                 at
> org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:753)
>
>                 at
> org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:88)
>
>                 at
> org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:70)
>
> Caused by: java.lang.ClassNotFoundException:
> org.apache.solr.common.SolrInputDocument
>
>                 at
> org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:489)
>
>                 at
> org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:405)
>
>                 at
> org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:393)
>
>                 at
> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
>
>                 at java.lang.ClassLoader.loadClass(Unknown Source)
>
>                 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
>
>                 ... 62 more
>
>  2011-01-11 13:27:07,022 INFO  [Component Resolve Thread (Bundle
> 5)          ]  bpel.ODEWorkflowProcessor                     - Have
> reference to processing service MimeTypeIdentifyService
>
> END EXCEPTION#######################
>
> My pipelet’s manifest file looks as follows:
>
> Manifest-Version: 1.0
>
> Bundle-ManifestVersion: 2
>
> Bundle-Name: ExtractFeedPipelet
>
> Bundle-SymbolicName: org.eclipse.smila.integration.imc.extractfeed
>
> Bundle-Version: 1.0.3
>
> Bundle-Vendor: de.imc
>
> Bundle-Classpath: lib/solrclient-0.2-dist.jar
>
> Bundle-RequiredExecutionEnvironment: JavaSE-1.6
>
> Import-Package:
>
>   org.apache.commons.logging;version="1.1.1",
>
>   org.eclipse.smila.blackboard;version="0.7.0",
>
>  org.eclipse.smila.blackboard.path;version="0.7.0",
>
>  org.eclipse.smila.datamodel.id;version="0.7.0",
>
>  org.eclipse.smila.datamodel.record;version="0.7.0",
>
>  org.eclipse.smila.processing;version="0.7.0",
>
>  org.eclipse.smila.processing.configuration;version="0.7.0"
>
> SMILA-Pipelets:
> org.eclipse.smila.integration.imc.extractfeed.ExtractFeedPipelet
>
> The obviously unloaded or missing class
> (org.apache.solr.common.SolrInputDocument) is part of the huge
> (all-in-one) 3^rd -party library I’m referencing in the bundle’s
> classpath.
>
> And I also checked that all the classes are in the Pipelet-JAR-file
> that I deployed in the plugins-Folder.
>
> I’m getting really frustrated over not getting SMILA loading the 3^rd
> party stuff ….
>
> It would be  a great relief if anyone could help me out. Maybe I just
> missed some configuration or reference?
>
> Cheers,
>
> Patrick
>
> *Patrick Pekczynski*
>
> P Please consider the environment before printing this e-mail.
>
>
> --
> ---------------------------------------------------------------------------------------------------------------------------------------------------
> Vorstand / Executive Board: Dr. Wolfgang Kraemer (Vorsitz, Chairman), Frank Milius, Dr. Volker Zimmermann
> Vorsitzender des Aufsichtsrats / Chairman of the board: Prof. Dr.Dr. h.c. mult. August-Wilhelm Scheer
> Sitz der Gesellschaft / Headquarter Location: Saarbruecken
> Ust Id. DE 812 187 208
> Handelsregister / Registration: Amtsgericht Saarbrücken HRB 13 338
> --------------------------------------------------------------------------------------------------------------------------------------------------
>
> Der Inhalt dieser E-Mail ist ausschliesslich fuer den bezeichneten Adressaten bestimmt.
> Jede Form der Kenntnisnahme, Veroeffentlichung, Vervielfaeltigung oder Weitergabe des Inhalts dieser E-Mail durch unberechtigte Dritte ist unzulaessig.
> Wir bitten Sie, sich mit dem Absender der E-Mail in Verbindung zu setzen, falls Sie nicht der Adressat dieser E-Mail sind und das Material von Ihrem
> Computer zu loeschen.
>
> The information contained in this transmission is intended only for the person or entity to which it is directly addressed or copied.
> It may contain material of confidential and/or private nature. Any review, retransmission, dissemination or other use of, or taking
> of any action in reliance upon, this information by persons or entities other than the intended recipient is not allowed.
> If you received this message and the information contained therein by error, please contact the sender and delete the material
> from your/any storage medium.
>
> IMC supports the United Nations’ Global Compact principles: www.unglobalcompact.org
>
>
> _______________________________________________
> smila-user mailing list
> smila-user@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/smila-user
>


--

* Martin Röbert *
Java Developer Semantic Web

Unister GmbH
Barfußgässchen 11 | 04109 Leipzig

Telefon: +49 (0)341 49288 5083
martin.roebert@xxxxxxxxxxxxxxx <mailto:%20%20martin.roebert@xxxxxxxxxxxxxxx>
www.unister.de <http://www.unister.de/>

Vertretungsberechtigter Geschäftsführer: Thomas Wagner
Amtsgericht Leipzig, HRB: 19056

_______________________________________________
smila-user mailing list
smila-user@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/smila-user
_______________________________________________
smila-user mailing list
smila-user@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/smila-user

Back to the top