Hi Peter, Lets check the bundle is active and the class is exporter: >From the Karaf console, you can run bundle:list -s | grep ctakes_auth_osgi
The output should be similar to 127 ? Active ? 80 ? 2.1.0 ? <symbolic name> The first column is the bundle ID and the third the status. It must be active. It it is, running bundle:classes <bundle ID> You can see if your class is exported or not, but i think, looking to the manifest, it should be exported, you can grep the output if you have too much classes. To be sure that each server reboot is clear, i used to remove he content of the data folder and the .brooklyn. May you are right and the class has been cached somewhere. I hope this helps you to dig into the problem. Juan On Wed, 28 Aug 2019 at 00:43, Peter Abramowitsch <pabramowit...@gmail.com> wrote: > Hi Alex > > Progress but still very frustrating.... > > Finally created an osgi bundle with this manifest: > > Manifest-Version: 1.0 > Bundle-ManifestVersion: 2 > Bundle-Name: ctakes_auth_osgi > Bundle-SymbolicName: ctakes_auth_osgi > Bundle-Version: 1.0.0 > Export-Package: org.ucsf.ctakes_auth > Bundle-Vendor: Ucsf Bakar Institute > > From the dropins folder, it doesn't seem to be found, but using "br catalog > add" I can add it if I comment out the forward reference to it in Brooklyn > config and restart the server > > I can then see with karaf "classes" that my provider class has been found > > org/ucsf/ctakes_auth/AuthEncoder.class > org/ucsf/ctakes_auth/AuthEncryptor.class > org/ucsf/ctakes_auth/UcsfSecretsBuilder.class > org/ucsf/ctakes_auth/UcsfSecretsProvider.class <<<<<<< > karaf@brooklyn()> quit > > But when I refer to it in brooklyn.cfg > > > brooklyn.external.ucsfsecrets=ctakes_auth_osgi:org.ucsf.ctakes_auth.UcsfSecretsProvider > > and restart the server, I get this: > > No class 'org.ucsf.ctakes_auth.UcsfSecretsProvider' in bundle > 'ctakes_auth_osgi' (using spec > 'ctakes_auth_osgi:org.ucsf.ctakes_auth.UcsfSecretsProvider') > > Am I going blind? > > One question: I have supplied my class's external dependencies, standard > jars like log4j2 and other stuff as jars in the lib/boot area. I have not > created an Import-Package entry in my bundle's Manifest. I read that this > should work. > > What's so odd is that yesterday I was getting much further - even without > packaging my jar as an osgi bundle, and then everything stopped and it was > no longer found, as if it had been added to a blacklist somewhere. Is that > possible? > > Peter > > > > On Tue, Aug 27, 2019 at 9:33 AM Alex Heneveld <a...@cloudsoft.io> wrote: > > > Hi Peter, > > > > It needs to be the JAR not the class. Either the dropins folder or 'br > > catalog add' is fine. You can confirm the former in the karaf bin/client > > bundle:list or the latter in the Brooklyn catalog UI view. > > > > It may be that the reference in OSGi needs to be to > > 'your.bundle:package.Clazz'. > > > > Let us know how that goes. > > > > If someone could improve the docs here that would be great (including > > saying to put an OSGi bundle JAR not the classes into dropins!). > > > > Best > > Alex > > > > On Tue, 27 Aug 2019, 17:47 Juan Cabrerizo, <j...@cloudsoft.io> wrote: > > > > > Hi Peter, I've installed it in two different way, but i'm using the > > drop-in > > > folder. (btw i think the current path is /deploy, or at least is what i > > > tried to use at seems working, but i found other unrelated problems) > > > The easier way is using the CLI, running > > > * br login <SERVER> > > > * br catalog add <path to jar> > > > > > > The other approach i've used is installing it on the Karaf repo inside > > the > > > system folder and modify the brooklyn default feature. But this way is > > > error prone. I can give you more details if you need, but i recommend > you > > > use the BR command. > > > > > > You can run the Karaf client to list the bundles and classes installed. > > Is > > > how I check if my classes are exported or not. > > > For that. you have to execute the script `client` in the bin folder. It > > > will open the console. For listing the classes use the `class` with > grep: > > > class | grep -i UcsfSecretsProvider > > > if you don't grep the output it will take ages to cancel it. If you > class > > > is there, check it it is exported. > > > > > > I'm not sure if you only need to create a jar file with your > > > implementation. I think you check to be sure that this jar file is a > > valid > > > OSGi bundle. Using the parent project I said before shall do it. > > > > > > Juan > > > > > > > > > > > > On Mon, 26 Aug 2019 at 17:16, Peter Abramowitsch < > > pabramowit...@gmail.com> > > > wrote: > > > > > > > Hi Juan > > > > Thanks for responding. Your note implied something I was suspecting.. > > > The > > > > documentation literally says "Classes implementing this interface > can > > be > > > > placed in the lib/dropins folder of Brooklyn" and that's what I > > initially > > > > did. But your note suggested its a jar file containing the > > > implementation > > > > class (and its dependencies) that needs to be put in lib/dropins - > not > > > > naked class files > > > > > > > > So this morning I created a runnable jar with a no-op main method in > > the > > > > provider class. This guarantees that the provider and all its > > > dependencies > > > > are pulled into the jar. > > > > > > > > I verified this too, with jar > > > > jar tvf ./lib/dropins/ucsf_auth.jar | grep UcsfSecretsProvider > > > > 9673 Mon Aug 26 08:26:04 PDT 2019 > > > > org/ucsf/ctakes_auth/UcsfSecretsProvider.class > > > > > > > > So my problem seems to be elsewhere. > > > > > > > > In your implementation, did you put your security provider jar in a > > > > ./lib/dropins of your Brooklyn install folder? > > > > Did you have to add a whitelist entry for your jar file anywhere > else? > > > > > > > > Peter > > > > > > > > > > > > > > > > > > > > On Mon, Aug 26, 2019 at 2:28 AM Juan Cabrerizo <j...@cloudsoft.io> > > > wrote: > > > > > > > > > Hi Peter, > > > > > > > > > > I found a similar problem when I started working in an > implementation > > > of > > > > > SecurityProvider. My problem was the configuration of the > > > > > maven-bundle-plugin i wasn't exporting the class. You can check it > on > > > the > > > > > Manifest.MF file inside META-INF on the jar file. Look for the > > package > > > > > "org.ucsf.ctakes_auth" in the block "Export-Package" > > > > > > > > > > I solved it setting brooklyn-downstream-parent as parent project. > I't > > > is > > > > > configured by default for exporting the classes built. > > > > > > > > > > <parent> > > > > > <groupId>org.apache.brooklyn</groupId> > > > > > <artifactId>brooklyn-downstream-parent</artifactId> > > > > > <version>1.0.0-SNAPSHOT</version> > > > > > </parent> > > > > > > > > > > I hope this helps > > > > > > > > > > Juan > > > > > > > > > > > > > > > On Sun, 25 Aug 2019 at 05:08, Peter Abramowitsch < > > > > pabramowit...@gmail.com> > > > > > wrote: > > > > > > > > > > > Hi All > > > > > > > > > > > > I have created a small secrets provider and unit tested it on > it's > > > own > > > > > > first. But I am having an issue with Brooklyn loading up my > class > > > and > > > > > its > > > > > > dependencies. > > > > > > > > > > > > Following the instructions, I put the class file into a new > dropins > > > > > folder > > > > > > inside lib. And added a call to the provider in brooklyn.cfg > > > > > > > > > > > > >> > > > > > brooklyn.external.ucsfsecrets=org.ucsf.ctakes_auth.UcsfSecretsProvider > > > > > > > > > > > > I then put the class's dependent jars in the lib/boot folder. > Not > > > sure > > > > > > whether they should be there or in lib itself... because I'm not > > sure > > > > > which > > > > > > classloader the dropins will be using > > > > > > > > > > > > Because I wasn't sure what dropins was expecting, I put the class > > in > > > > > twice, > > > > > > as you see > > > > > > > > > > > > lib/dropins > > > > > > ├── UcsfSecretsProvider.class > > > > > > └── org > > > > > > └── ucsf > > > > > > └── ctakes_auth > > > > > > └── UcsfSecretsProvider.class > > > > > > > > > > > > My provider needs a couple of JVM defines, so I added these to > the > > > > setenv > > > > > > script. > > > > > > > > > > > > On startup, the exception blew up the launch of the Brooklyn > > > container > > > > > > > > > > > > My error message is this Exception ( I put the entire trace at > > the > > > > > bottom > > > > > > of this message) > > > > > > > > > > > > .... > > > > > > 2019-08-24T20:47:24,463 ERROR 123 > > > > > > o.a.b.c.m.i.BasicExternalConfigSupplierRegistry [FelixStartLevel] > > > > Failed > > > > > to > > > > > > instantiate external config supplier named 'ucsfsecrets': > > > > > > java.lang.ClassNotFoundException: Class > > > > > > org.ucsf.ctakes_auth.UcsfSecretsProvider not found on the > > application > > > > > class > > > > > > path, nor in the bundle white list. > > > > > > java.lang.ClassNotFoundException: Class > > > > > > org.ucsf.ctakes_auth.UcsfSecretsProvider not found on the > > application > > > > > class > > > > > > path, nor in the bundle white list. > > > > > > > > > > > > The exception mentions a "bundle whitelist" which I don't see > among > > > any > > > > > of > > > > > > the config files in $BROOKLYN_HOME/etc. I also looked at the > > unit > > > > test > > > > > > for drop-ins in the Brooklyn source, but was unable to relate > that > > to > > > > my > > > > > > situation. > > > > > > > > > > > > Clearly there is more to a custom provider than I see in the > > > > > > documentation. Do you have any more information to help me out? > > > > > > > > > > > > Many thanks in advance, Peter > > > > > > > > > > > > ----------------------------------------------------- > > > > > > > > > > > > :`Caused by: java.lang.ClassNotFoundException: Class > > > > > > org.ucsf.ctakes_auth.UcsfSecretsProvider not found on the > > application > > > > > class > > > > > > path, nor in the bundle white list. > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.util.core.ClassLoaderUtils.loadClass(ClassLoaderUtils.java:162) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.core.mgmt.internal.BasicExternalConfigSupplierRegistry.updateFromBrooklynProperties(BasicExternalConfigSupplierRegistry.java:116) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.core.mgmt.internal.BasicExternalConfigSupplierRegistry.<init>(BasicExternalConfigSupplierRegistry.java:61) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.core.mgmt.internal.AbstractManagementContext.<init>(AbstractManagementContext.java:183) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.core.mgmt.internal.LocalManagementContext.<init>(LocalManagementContext.java:170) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.launcher.common.BasicLauncher.initManagementContext(BasicLauncher.java:524) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.launcher.common.BasicLauncher.startPartOne(BasicLauncher.java:392) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.launcher.osgi.OsgiLauncherImpl.startPartOne(OsgiLauncherImpl.java:79) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.brooklyn.launcher.osgi.OsgiLauncherImpl.initOsgi(OsgiLauncherImpl.java:105) > > > > > > ~[?:?] > > > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > > Method) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > > > > > ~[?:?] > > > > > > at java.lang.reflect.Method.invoke(Method.java:498) > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:980) > > > > > > ~[?:?] > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:736) > > > > > > ~[?:?] > > > > > > ... 37 more > > > > > > 2019-08-24T20:47:24,486 INFO 15 > o.a.a.b.c.BlueprintContainerImpl > > > > > > [FelixStartLevel] Bundle org.apache.brooklyn.karaf-start/0.12.0 > is > > > > > waiting > > > > > > for dependencies > > > > > > [(objectClass=org.apache.brooklyn.launcher.osgi.OsgiLauncher)] > > > > > > > > > > > > > > > > > > > > > -- > > > > > Juan Cabrerizo > > > > > Software Engineer > > > > > > > > > > *Cloudsoft <https://cloudsoft.io/> *| Bringing Business to the > Cloud > > > > > E: j...@cloudsoft.io > > > > > L: https://www.linkedin.com/in/juancabrerizo/ > > > > > > > > > > > > > > > > > > -- > > > Juan Cabrerizo > > > Software Engineer > > > > > > *Cloudsoft <https://cloudsoft.io/> *| Bringing Business to the Cloud > > > E: j...@cloudsoft.io > > > L: https://www.linkedin.com/in/juancabrerizo/ > > > > > > -- Juan Cabrerizo Software Engineer *Cloudsoft <https://cloudsoft.io/> *| Bringing Business to the Cloud E: j...@cloudsoft.io L: https://www.linkedin.com/in/juancabrerizo/