OSGI Utgard OPC Bundle

350 views
Skip to first unread message

Sergio Ferreira

unread,
Sep 10, 2014, 10:15:51 AM9/10/14
to open...@googlegroups.com
Hello, I'm using OSGI Felix and I'm trying to create a OPC bundle.

I have already successfully compile a simple client to test the connection.

then i created a simple OPC bundle, without starting the connection to the server and after fixing the following problems:

! could not resolve the bundles
! Failed to start bundle org.openscada.opc.dcom-1.1.0.v20130529, exception The bundle "org.openscada.opc.dcom_1.1.0.v20130529 [1]" could not be resolved. Reason: Missing Constraint: Import-Package: org.jinterop.dcom.common; version="2.0.0"
! Failed to start bundle org.openscada.opc.lib-1.1.0.v20130529, exception The bundle "org.openscada.opc.lib_1.1.0.v20130529 [2]" could not be resolved. Reason: Missing Constraint: Import-Package: org.jinterop.dcom.common; version="[2.0.0,3.0.0)"
! Failed to start bundle org.openscada.jinterop.core-1.1.0.v20130529, exception The bundle "org.openscada.jinterop.core_1.1.0.v20130529 [3]" could not be resolved. Reason: Missing Constraint: Import-Package: com.iwombat.foundation; version="0.0.0"
! Failed to start bundle org.openscada.jinterop.deps-1.1.0.v20130529, exception The bundle "org.openscada.jinterop.deps_1.1.0.v20130529 [4]" could not be resolved. Reason: Missing Constraint: Import-Package: jcifs; version="1.2.25"
! Failed to start bundle org.openscada.external.jcifs-1.2.25.201305291039, exception The bundle "org.openscada.external.jcifs_1.2.25.201305291039 [8]" could not be resolved. Reason: Missing Constraint: Import-Package: javax.servlet; version="2.5.0"
! Failed to start bundle inputopc-0.0.0.201410111348, exception The bundle "inputopc_0.0.0.201410111348 [9]" could not be resolved. Reason: Missing Constraint: Import-Package: org.openscada.opc.lib.common; version="[1.0.0,2.0.0)"


I was able to created a simple OPC bundle and i'm able to execute him (without server connection)

then I added the server connection code:

server = new Server(ci, Executors.newSingleThreadScheduledExecutor());
try {
server.connect();
} catch (Exception e) {
// TODO: handle exception
}

And have the following error.
any Ideas ?
thanks

user.home = C:\Users\root
user.timezone = Europe/London
java.awt.printerjob = sun.awt.windows.WPrinterJob
file.encoding = Cp1252
java.specification.version = 1.8
java.class.path = C:\Users\root\.bnd\cache\https%3A%2F%2Fgithub.com%2Fbndtools%2Fbundle-hub%2Fraw%2Fmaster%2Forg.eclipse.osgi\org.eclipse.osgi-3.9.0.jar;C:\eclipse\Workplace\opcproject\cnf\buildrepo\biz.aQute.launcher\biz.aQute.launcher-latest.jar
user.name = root
java.vm.specification.version = 1.8
sun.java.command = aQute.launcher.Launcher
java.home = C:\Program Files\Java\jre8
sun.arch.data.model = 64
user.language = en
java.specification.vendor = Oracle Corporation
user.language.format = pt
awt.toolkit = sun.awt.windows.WToolkit
java.vm.info = mixed mode
launch.services = true
launch.noreferences = false
java.version = 1.8.0_05
java.ext.dirs = C:\Program Files\Java\jre8\lib\ext;C:\Windows\Sun\Java\lib\ext
sun.boot.class.path = C:\Program Files\Java\jre8\lib\resources.jar;C:\Program Files\Java\jre8\lib\rt.jar;C:\Program Files\Java\jre8\lib\sunrsasign.jar;C:\Program Files\Java\jre8\lib\jsse.jar;C:\Program Files\Java\jre8\lib\jce.jar;C:\Program Files\Java\jre8\lib\charsets.jar;C:\Program Files\Java\jre8\lib\jfr.jar;C:\Program Files\Java\jre8\classes
java.vendor = Oracle Corporation
file.separator = \
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
launch.trace = false
launch.system.packages = org.eclipse.osgi.event;version="1.0",org.eclipse.osgi.framework.console;version="1.1",org.eclipse.osgi.framework.eventmgr;version="1.2",org.eclipse.osgi.framework.log;version="1.1",org.eclipse.osgi.launch;version="1.0",org.eclipse.osgi.service.datalocation;version="1.3",org.eclipse.osgi.service.debug;version="1.2",org.eclipse.osgi.service.environment;version="1.3",org.eclipse.osgi.service.localization;version="1.1",org.eclipse.osgi.service.pluginconversion;version="1.0",org.eclipse.osgi.service.resolver;version="1.6",org.eclipse.osgi.service.resolver.extras;version="1.0";x-friends:="org.eclipse.equinox.resolver",org.eclipse.osgi.service.runnable;version="1.1",org.eclipse.osgi.service.security;version="1.0",org.eclipse.osgi.service.urlconversion;version="1.0",org.eclipse.osgi.signedcontent;version="1.0",org.eclipse.osgi.storagemanager;version="1.0",org.eclipse.osgi.util;version="1.1",org.eclipse.equinox.log;version="1.0",org.osgi.framework;version="1.7",org.osgi.framework.launch;version="1.1",org.osgi.framework.hooks.bundle;version="1.1",org.osgi.framework.hooks.resolver;version="1.0",org.osgi.framework.hooks.service;version="1.1",org.osgi.framework.hooks.weaving;version="1.0",org.osgi.framework.namespace;version="1.0",org.osgi.framework.startlevel;version="1.0",org.osgi.framework.wiring;version="1.1",org.osgi.resource;version="1.0",org.osgi.service.condpermadmin;version="1.1.1",org.osgi.service.framework;version="1.0";x-internal:=true,org.osgi.service.log;version="1.3",org.osgi.service.packageadmin;version="1.2",org.osgi.service.permissionadmin;version="1.2",org.osgi.service.startlevel;version="1.1",org.osgi.service.url;version="1.0",org.osgi.util.tracker;version="1.5.1",org.eclipse.core.runtime.adaptor;x-friends:="org.eclipse.core.runtime",org.eclipse.core.runtime.internal.adaptor;x-internal:=true,org.eclipse.core.runtime.internal.stats;x-friends:="org.eclipse.core.runtime",org.eclipse.osgi.baseadaptor;x-internal:=true,org.eclipse.osgi.baseadaptor.bundlefile;x-internal:=true,org.eclipse.osgi.baseadaptor.hooks;x-internal:=true,org.eclipse.osgi.baseadaptor.loader;x-internal:=true,org.eclipse.osgi.framework.adaptor;x-internal:=true,org.eclipse.osgi.framework.debug;x-internal:=true,org.eclipse.osgi.framework.internal.core;x-internal:=true,org.eclipse.osgi.framework.internal.protocol;x-internal:=true,org.eclipse.osgi.framework.internal.protocol.bundleentry;x-internal:=true,org.eclipse.osgi.framework.internal.protocol.bundleresource;x-internal:=true,org.eclipse.osgi.framework.internal.protocol.reference;x-internal:=true,org.eclipse.osgi.framework.internal.reliablefile;x-internal:=true,org.eclipse.osgi.framework.util;x-internal:=true,org.eclipse.osgi.internal.baseadaptor;x-internal:=true,org.eclipse.osgi.internal.composite;x-internal:=true,org.eclipse.osgi.internal.loader;x-internal:=true,org.eclipse.osgi.internal.loader.buddy;x-internal:=true,org.eclipse.osgi.internal.module;x-internal:=true,org.eclipse.osgi.internal.profile;x-internal:=true,org.eclipse.osgi.internal.resolver;x-internal:=true,org.eclipse.osgi.internal.serviceregistry;x-internal:=true,org.eclipse.osgi.internal.permadmin;x-internal:=true,org.eclipse.osgi.internal.provisional.service.security;x-friends:="org.eclipse.equinox.security.ui";version="1.0.0",org.eclipse.osgi.internal.provisional.verifier;x-friends:="org.eclipse.update.core,org.eclipse.ui.workbench,org.eclipse.equinox.p2.artifact.repository",org.eclipse.osgi.internal.service.security;x-friends:="org.eclipse.equinox.security.ui",org.eclipse.osgi.internal.signedcontent;x-internal:=true,org.eclipse.osgi.service.internal.composite;x-internal:=true,org.eclipse.equinox.log.internal;x-internal:=true
sun.desktop = windows
sun.cpu.isalist = amd64

14:49:10.748 [main] INFO  org.jinterop.dcom.core.JISession - Created Session: 1422400584
14:49:10.763 [main] DEBUG o.j.dcom.transport.JIComTransport - Opening socket on /127.0.0.1:135
out 11, 2014 2:49:10 PM org.jinterop.dcom.common.JISystem internal_dumpMap
INFO: mapOfHostnamesVsIPs: {}
out 11, 2014 2:49:10 PM rpc.DefaultConnection processOutgoing
INFO: 
 Sending BIND
out 11, 2014 2:49:10 PM rpc.DefaultConnection processIncoming
INFO: 
 Recieved BIND_ACK
out 11, 2014 2:49:10 PM rpc.DefaultConnection processOutgoing
INFO: 
 Sending AUTH3
14:49:10.794 [main] DEBUG o.j.dcom.transport.JIComTransport - Socket closed... Socket[unconnected] host 127.0.0.1, port 135
14:49:10.810 [main] WARN  org.openscada.opc.lib.da.Server - Unknown error
java.lang.NoClassDefFoundError: javax/crypto/spec/SecretKeySpec
at rpc.security.ntlm.Responses.createDESKey(Responses.java:377) ~[na:na]
at rpc.security.ntlm.Responses.lmResponse(Responses.java:229) ~[na:na]
at rpc.security.ntlm.Responses.getNTLM2SessionResponse(Responses.java:143) ~[na:na]
at rpc.security.ntlm.NtlmAuthentication.createType3(NtlmAuthentication.java:306) ~[na:na]
at rpc.security.ntlm.NtlmConnection.outgoingRebind(NtlmConnection.java:111) ~[na:na]
at rpc.DefaultConnection.processOutgoing(DefaultConnection.java:560) ~[na:na]
at rpc.DefaultConnection.transmitFragment(DefaultConnection.java:151) ~[na:na]
at rpc.DefaultConnection.transmit(DefaultConnection.java:75) ~[na:na]
at rpc.ConnectionOrientedEndpoint.send(ConnectionOrientedEndpoint.java:245) ~[na:na]
at rpc.ConnectionOrientedEndpoint.connect(ConnectionOrientedEndpoint.java:298) ~[na:na]
at rpc.ConnectionOrientedEndpoint.bind(ConnectionOrientedEndpoint.java:238) ~[na:na]
at rpc.ConnectionOrientedEndpoint.rebind(ConnectionOrientedEndpoint.java:162) ~[na:na]
at org.jinterop.dcom.transport.JIComEndpoint.rebindEndPoint(JIComEndpoint.java:40) ~[na:na]
at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:640) ~[na:na]
at org.jinterop.dcom.core.JIComServer.initialise(JIComServer.java:561) ~[na:na]
at org.jinterop.dcom.core.JIComServer.<init>(JIComServer.java:524) ~[na:na]
at org.openscada.opc.lib.da.Server.connect(Server.java:117) ~[na:na]
at org.me.opcproject.inputopc.Activator.start(Activator.java:87) ~[na:na]
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) ~[org.eclipse.osgi-3.9.0.jar:na]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_05]
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) ~[org.eclipse.osgi-3.9.0.jar:na]
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) ~[org.eclipse.osgi-3.9.0.jar:na]
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) ~[org.eclipse.osgi-3.9.0.jar:na]
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) ~[org.eclipse.osgi-3.9.0.jar:na]
at aQute.launcher.Launcher.update(Launcher.java:386) ~[biz.aQute.launcher-latest.jar:na]
at aQute.launcher.Launcher.activate(Launcher.java:310) ~[biz.aQute.launcher-latest.jar:na]
at aQute.launcher.Launcher.run(Launcher.java:199) ~[biz.aQute.launcher-latest.jar:na]
at aQute.launcher.Launcher.main(Launcher.java:90) ~[biz.aQute.launcher-latest.jar:na]
Caused by: java.lang.ClassNotFoundException: javax.crypto.spec.SecretKeySpec cannot be found by org.openscada.jinterop.deps_1.1.0.v20130529
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) ~[org.eclipse.osgi-3.9.0.jar:na]
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) ~[org.eclipse.osgi-3.9.0.jar:na]
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) ~[org.eclipse.osgi-3.9.0.jar:na]
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) ~[org.eclipse.osgi-3.9.0.jar:na]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_05]
... 28 common frames omitted
14:49:10.810 [main] INFO  org.openscada.opc.lib.da.Server - Destroying DCOM session...
14:49:10.810 [main] INFO  org.openscada.opc.lib.da.Server - Destroying DCOM session... forked
14:49:10.810 [Timer-3] INFO  o.j.dcom.core.JIComOxidRuntime - Running ServerPingTimerTask !
14:49:10.826 [Timer-2] INFO  o.j.dcom.core.JIComOxidRuntime - Running ClientPingTimerTask !
14:49:10.826 [Timer-1] INFO  org.jinterop.dcom.core.JISession - Release_References_TimerTask:[RUN] Session:  1422400584 , listOfDeferencedIpids.size(): 0
14:49:10.826 [OPCSessionDestructor] DEBUG org.openscada.opc.lib.da.Server - Starting destruction of DCOM session
14:49:10.826 [OPCSessionDestructor] INFO  org.jinterop.dcom.core.JISession - About to destroy 0 sessesion which are linked to this session: 1422400584
14:49:10.826 [OPCSessionDestructor] INFO  o.j.dcom.core.JIComOxidRuntime - destroySessionOIDs for session: 1422400584
14:49:10.826 [OPCSessionDestructor] INFO  org.openscada.opc.lib.da.Server - Destructed DCOM session
14:49:10.826 [OPCSessionDestructor] INFO  org.openscada.opc.lib.da.Server - Session destruction took 0 ms



Jens Reimann

unread,
Sep 10, 2014, 11:24:54 AM9/10/14
to open...@googlegroups.com
Hi,

openSCADA Utgard already provides OSGi Bundles. And also an OSGi variant of Jinterop.

Which version of Utgard, Jinterop and its dependencies are you using?

Jens

--
You received this message because you are subscribed to the Google Groups "openSCADA" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openscada+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Sergio Ferreira

unread,
Sep 11, 2014, 8:59:12 AM9/11/14
to open...@googlegroups.com

Jorge Proença

unread,
Oct 8, 2014, 6:13:47 PM10/8/14
to open...@googlegroups.com
I'm having the same issue. I'm using BNDTools I've added everything to the local repository and I'm trying to use the Simple Example and I'm having this problem:

   javax.crypto.spec.SecretKeySpec not found by org.openscada.jinterop.deps

I've added the bcprov jar of bouncy castle from UTGARD but I'm still having the same problem. 

Thanks,
Jorge

Paulo Borges

unread,
Oct 10, 2014, 4:31:56 PM10/10/14
to open...@googlegroups.com
# What i have see here
- "java.lang.NoClassDefFoundError: javax/crypto/spec/SecretKeySpec"
- "Caused by: java.lang.ClassNotFoundException: javax.crypto.spec.SecretKeySpec cannot be found by org.openscada.jinterop.deps_1.1.0.v20130529"

# PROBLEM
org.openscada.jinterop.deps bunbdle is missing in MANIFEST.INF(Import-Package: javax.crypto.spec)


# SOLUTION is - Add javax.crypto, javax.crypto.spec to Import-Package:
- update META-INF/MANIFEST.MF inside org.openscada.jinterop.deps.jar
- Compile our ".jar" with META-INF/MANIFEST.MF
- Create a wrapper bundle


========================================================
Why this problem, if this package(javax.crypto.spec) is available in JRE/JDK
========================================================

# As you may know the JRE/JDK (from Oracle) contain a lot of packages
- java.* standard API(class such as: String)
- javax.* contained the extensions to the API
- Third party package/API such as: com.sun, org.dom, ...
 

# In OSGi
- Package java.* is the only package that doesn't need to declared in MANIFEST.INF(Import-Package: )

- Other packages(eg: javax.net.*, javax.xml, javax.crypto.*) from JRE/JDK must be declared in MANIFEST.INF(Import-Package: )
eg: 
Import-Package: javax.crypto;resolution:=optional,javax.swing;resolution:=optional

# Possible errors if a package isn't declared in MANIFEST.INF(Import-Package: )
- java.lang.NoClassDefFoundError:
- java.lang.ClassNotFoundException

# CONCLUTION
- If a Bundle uses any other package than java.* declare it explicitly in MANIFEST.INF(Import-Package: )
- PLEASE search for "resolution:=optional"

# README MORE( Solution A: System Packages)

Sergio Ferreira

unread,
Oct 13, 2014, 10:49:21 AM10/13/14
to open...@googlegroups.com
Fixed.

Manifest-Version: 1.0
Export-Package: com.iwombat.foundation,com.iwombat.foundation.uuid,com
 .iwombat.util,gnu.crypto,gnu.crypto.hash,gnu.crypto.prng,gnu.crypto.u
 til,ndr,net.sourceforge.jtds.util,rpc,rpc.core,rpc.ncacn_np,rpc.pdu,r
 pc.security.ntlm
Bundle-Vendor: openSCADA
Bundle-Version: 1.1.0.v20130529
Bundle-Name: openSCADA j-Interop Dependencies
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.openscada.jinterop.deps
Import-Package: jcifs;version="1.2.25",jcifs.netbios;version="1.2.25",
 jcifs.ntlmssp;version="1.2.25",jcifs.smb;version="1.2.25",jcifs.util;
 version="1.2.25", javax.crypto;resolution:=optional,javax.crypto.interfa
 ces;resolution:=optional,javax.crypto.spec;resolution:=optional
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Reply all
Reply to author
Forward
0 new messages