Ankündigung

Einklappen
Keine Ankündigung bisher.

openHAB meets CometVisu

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    openHAB meets CometVisu

    Nachdem ich mein aktuelles Projekt hier schon vorgestellt habe:
    https://knx-user-forum.de/cometvisu/...s-openhab.html

    Würde ich gerne in diesem Forum vor allem die openHAB relevanten Sachen besprechen. Konkret habe ich da noch diverse Fragen:

    1. Zur Zeit habe ich den Code einfach mit in das REST Bundle gepackt, ich denke aber es ware besser das in ein eigenes Bundle, mit starker Abhängigkeit vom REST-Bundle, auszulagern. Das habe ich gerade versucht jedoch bekomme ich jetzt Exceptions, wenn das Bundle aktiviert wird.

    Code:
    !ENTRY org.eclipse.equinox.ds 4 0 2012-11-10 10:53:28.394
    !MESSAGE [SCR] Exception while activating instance org.openhab.io.cv.internal.CVApplication@447e8836 of component org.openhab.io.cv.servlet  
    !STACK 0
    java.lang.reflect.InvocationTargetException
        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:235)
        at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146)
        at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:347)
        at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:620)
        at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:197)
        at org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:343)
        at org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:222)
        at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
        at org.eclipse.equinox.internal.ds.InstanceProcess.registerService(InstanceProcess.java:536)
        at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:260)
        at org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:473)
        at org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:217)
        at org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:816)
        at org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:783)
        at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.RuntimeException: javax.servlet.ServletException: Resource configuration class, org.openhab.io.cv.internal.CVApplication, could not be loaded
        at org.openhab.io.cv.internal.CVApplication.activate(CVApplication.java:166)
        ... 28 more
    Caused by: javax.servlet.ServletException: Resource configuration class, org.openhab.io.cv.internal.CVApplication, could not be loaded
        at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:746)
        at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:678)
        at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203)
        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at org.atmosphere.util.AtmosphereFilterChain.init(AtmosphereFilterChain.java:124)
        at org.atmosphere.handler.ReflectorServletProcessor$FilterChainServletWrapper.init(ReflectorServletProcessor.java:290)
        at org.atmosphere.handler.ReflectorServletProcessor.init(ReflectorServletProcessor.java:181)
        at org.atmosphere.cpr.AtmosphereFramework.initAtmosphereHandler(AtmosphereFramework.java:854)
        at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:502)
        at org.atmosphere.cpr.AtmosphereServlet.init(AtmosphereServlet.java:191)
        at org.eclipse.equinox.http.servlet.internal.ServletRegistration.init(ServletRegistration.java:49)
        at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:179)
        at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:66)
        at org.openhab.io.cv.internal.CVApplication.activate(CVApplication.java:156)
        ... 28 more
    Caused by: java.lang.ClassNotFoundException: org.openhab.io.cv.internal.CVApplication
        at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
        at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithException(ReflectionHelper.java:240)
        at com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithException(ReflectionHelper.java:220)
        at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:711)
        ... 43 more
    Root exception:
    java.lang.RuntimeException: javax.servlet.ServletException: Resource configuration class, org.openhab.io.cv.internal.CVApplication, could not be loaded
        at org.openhab.io.cv.internal.CVApplication.activate(CVApplication.java:166)
        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:235)
        at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146)
        at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:347)
        at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:620)
        at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:197)
        at org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:343)
        at org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:222)
        at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
        at org.eclipse.equinox.internal.ds.InstanceProcess.registerService(InstanceProcess.java:536)
        at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:260)
        at org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:473)
        at org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:217)
        at org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:816)
        at org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:783)
        at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
        at java.lang.Thread.run(Unknown Source)
    Caused by: javax.servlet.ServletException: Resource configuration class, org.openhab.io.cv.internal.CVApplication, could not be loaded
        at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:746)
        at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:678)
        at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203)
        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at org.atmosphere.util.AtmosphereFilterChain.init(AtmosphereFilterChain.java:124)
        at org.atmosphere.handler.ReflectorServletProcessor$FilterChainServletWrapper.init(ReflectorServletProcessor.java:290)
        at org.atmosphere.handler.ReflectorServletProcessor.init(ReflectorServletProcessor.java:181)
        at org.atmosphere.cpr.AtmosphereFramework.initAtmosphereHandler(AtmosphereFramework.java:854)
        at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:502)
        at org.atmosphere.cpr.AtmosphereServlet.init(AtmosphereServlet.java:191)
        at org.eclipse.equinox.http.servlet.internal.ServletRegistration.init(ServletRegistration.java:49)
        at org.eclipse.equinox.http.servlet.internal.ProxyServlet.registerServlet(ProxyServlet.java:179)
        at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:66)
        at org.openhab.io.cv.internal.CVApplication.activate(CVApplication.java:156)
        ... 28 more
    Caused by: java.lang.ClassNotFoundException: org.openhab.io.cv.internal.CVApplication
        at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
        at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithException(ReflectionHelper.java:240)
        at com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithException(ReflectionHelper.java:220)
        at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:711)
        ... 43 more
    Vielleicht kann mir da ja jemand einen entscheidenden Tipp geben. Sourcen sind in meinem Clone zu finden:
    tbraeutigam-openhab - CUPS-Binding, MaryTTS, Pulseaudio-Binding, Cometvisu Backend - Google Project Hosting

    Ich habe zwar noch mehrere Fragen, die sich vor allem auf Atmosphere beziehen aber erstmal will ich das Bundle getrennt zum Laufen bringen.
    Gruß
    Tobias

    #2
    Habe da so spontan leider auch keine Idee - habe kurz in den Code geschaut und das sah eigentlich ok aus. Leider fehlt mir gerade die Zeit, um es im Detail zu debuggen...

    Bzgl. REST API Erweiterungen hatte ich schonmal angedacht, https://github.com/hstaudacher/osgi-jax-rs-connector einzusetzen; das sollte es ermöglichen, das REST-API etwas modularer zu gestalten, was mir gut gefallen würde.

    Grüße,
    Kai

    Kommentar


      #3
      Ich habe das mittlerweile versucht ein bischen einzugrenzen. Folgende Klasse verursacht eine ClassNotFoundException: org.atmosphere.cpr.AtmosphereServlet

      Das bedeutet, das die entsprechende Lib aus dem Rest-Bundle wohl nicht geladen wird. Ich habe auch beobachtet, dass das Rest-Bundle immer erst nach dem CV-Bundle geladen wird und vermute daher, das die Libs dementsprechend zum dem Zeitpunkt an dem das CV-Bundle aktiviert wird noch garnicht zur Verfügung stehen.

      Ich habe allerdings das REST-Bundle als Required-Plugin im CV-Bundle definiert, da müsste die Ladereihenfolge dann doch entsprechend abgeleitet werden. Kann/Muss ich die Abhängigkeit zwischen den beiden Bundles noch irgendwo definieren oder habe ich eine andere Möglichkeit Einfluß auf die Ladereihenfolge der Bundles zu nehmen.
      Gruß
      Tobias

      Kommentar


        #4
        Caused by: java.lang.ClassNotFoundException: org.openhab.io.cv.internal.CVApplication ist laut eingangs zu lesendem Stacktrace die Ursache.

        Welches Bundle exportiert denn diese Klasse?

        CU
        Boeffi

        Kommentar


          #5
          Zitat von Boeffi Beitrag anzeigen
          Caused by: java.lang.ClassNotFoundException: org.openhab.io.cv.internal.CVApplication ist laut eingangs zu lesendem Stacktrace die Ursache. Welches Bundel exportiert denn diese Klasse?
          Ein bischen weiter unten im Stacktrace siehst Du das die Exception in der activate() Methode der CVApplication geworfen wird.

          Code:
          at org.eclipse.equinox.http.servlet.internal.HttpServiceImpl.registerServlet(HttpServiceImpl.java:66)  
          at org.[URL="http://redaktion.knx-user-forum.de/lexikon/openhab/"]openhab[/URL].io.[URL="http://redaktion.knx-user-forum.de/lexikon/cv/"]cv[/URL].internal.CVApplication.activate(CVApplication.java:156)  
          ... 28 more
          Die genaue Code-Zeile ist:
          Code:
          httpService.registerServlet(REST_SERVLET_ALIAS, new AtmosphereServlet(), jsp, context);
          Und die Klasse die dort nicht gefunden wird ist AtmosphereServlet, welche durch das Rest-Bundle exportiert wird.
          Gruß
          Tobias

          Kommentar


            #6
            ...wenn Du im obigen Stacktrace weiter nach unten liest, steht dort, dass der Root Cause die Class ... CVApplication ist, die vom Classloader nicht gefunden werden kann; die weiteren Fehler (die im Stacktrace weiter oben stehen) sind Folgefehler...

            CU
            Boeffi

            Kommentar


              #7
              Die Klasse wird aber gefunden, die darin liegene activate() Methode wird aufgerufen und darin tritt die ausschlaggebende Exception auf.
              Wenn ich die entsprechende Zeile in CVApplication auskommentiere sind die Exceptions weg.
              Gruß
              Tobias

              Kommentar


                #8
                aQute | Bnd / 01 Background
                Bndtools
                http://www.osgi.org/download/r4v43/osgi.core-4.3.0.pdf (je nach der von Dir eingesetzten Version gibt es andere PDFs)

                Hallo "Peuter",

                beschäftige Dich mal mit o.g. Links.

                Dein Problem fühlt sich so an, dass es einen Version-Konflikt geben könnte.

                Die im Stacktrace ganz unten aufgeführte Class ... CVApplication wird in der geforderten Version nicht gefunden. Die Exception durch CVApplication.activate( .. ) wird vermutlich durch die namensgleiche Klasse verursacht, die in einer anderen Version vorliegt.

                Viel Erfolg

                CU
                Boeffi

                Kommentar


                  #9
                  bist Du hier weitergekommen?
                  Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                  Kommentar


                    #10
                    Nein, nur soweit, das die CVApplication Klasse beim Registrieren des Servlets nicht gefunden wird.

                    Der Name der Klasse wird der registerServlet Methode durch:
                    Code:
                    jerseyServletParams.put("javax.ws.rs.Application", CVApplication.class.getName());
                    übergeben und irgendwie kann die dann dort nicht gefunden werden.
                    Seltsamerweise wird das im REST Bundle genauso gemacht und da funktioniert es.

                    Ich habs auch hier nochmal geschrieben:
                    https://groups.google.com/forum/?fro...ab/UYpBNicwUDw

                    An der Stelle hänge ich fest und komme auch nicht weiter.
                    Gruß
                    Tobias

                    Kommentar

                    Lädt...
                    X