I tried to create a basic virtual reality IDE based on Karaf.
I have 3 maven-projects:
VRServer who connect to a native-component for rendering.
VR Component Toolkit for VR-HMI-Widgets (Having a VRFrame who extends from VRComponent) as a Multi-Module-Maven-Project.
The VR IDE project read/write files and execute lowlevel commands.
I installed all of them into Karaf:
karaf#root()> bundle:list
START LEVEL 100 , List Threshold: 50
ID | State | Lvl | Version | Name
----+--------+-----+--------------------+---------------------------------------------------------------------------
31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
54 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
55 | Active | 80 | 9.0.0 | org.objectweb.asm
56 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
57 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
58 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
59 | Active | 80 | 9.0.0 | org.objectweb.asm.util
60 | Active | 80 | 2.0.17 | OpenWebBeans Core
61 | Active | 80 | 2.0.17 | SPI definition
62 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
63 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
64 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
65 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
66 | Active | 80 | 1.0.12 | Apache Felix Converter
67 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
68 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
69 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
70 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
71 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
72 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
73 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
74 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
75 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
76 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
77 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
78 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
79 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
80 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
81 | Active | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
134 | Active | 80 | 1.0.0 | Virtual reality server
135 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
136 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
142 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
karaf#root()>
But when I tried to start the VRIDE bundle, I get this exception:
10:00:42.193 WARN [fileinstall-C:\Program Files\apache-karaf-4.3.0/deploy] Error while creating extension
java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
This is the Java-Class I tried to load:
package de.e_nexus.desktop.vr.ide;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.osgi.service.cdi.annotations.Reference;
import org.osgi.service.cdi.annotations.Service;
import de.e_nexus.vr.server.ClientKeyboardScancode;
import de.e_nexus.vr.server.VRClientHelmetAndControllerListener;
import de.e_nexus.vr.server.VRClientKeyboardListener;
import de.e_nexus.vr.server.VRServer;
import de.e_nexus.vr.server.listeners.VRClientRequestAppInfo;
import de.e_nexus.vr.server.listeners.VRClientStatusListener;
import de.e_nexus.vr.server.listeners.interaction.HelmetAndControllerInfo;
import de.e_nexus.vr.server.osgi.inter.VRServerService;
import de.e_nexus.vr.tk.VRFrame;
#ApplicationScoped
#Service
public class StartIDE implements VRClientStatusListener, VRClientRequestAppInfo, VRClientHelmetAndControllerListener, VRClientKeyboardListener {
/**
* The logger for this class.
*/
private static final Logger LOG = Logger.getLogger(StartIDE.class.getCanonicalName());
private final static Object lock = new Object();
private VRServer vrServer;
public void notifyStatus(boolean connected) {
if (!connected) {
synchronized (lock) {
lock.notify();
}
}
}
#Reference
#Inject
private VRServerService vrServerService;
private VRFrame applicationFrame;
#PostConstruct
public void initialize() {
LOG.fine("Starting VR IDE");
vrServer = vrServerService.getVRServer();
applicationFrame = new VRFrame(vrServer, "test");
LOG.info(getLatin1Title() + " started successfully!");
}
#PreDestroy
public void teardown() {
applicationFrame.remove();
LOG.info("Stoped " + getLatin1Title() + " successfully!");
vrServer = null;
}
public VRServer getVrServer() {
return vrServer;
}
#Override
public void notify(HelmetAndControllerInfo haci) {
}
#Override
public String getLatin1Title() {
return "VR IDE";
}
#Override
public void notifyKeyboardEvent(ClientKeyboardScancode[] downs, ClientKeyboardScancode[] ups, long incomingTime) {
System.out.println("me");
}
}
VRServer-Codebase
VRToolkit-Codebase
VRIDE-Codebase
EDIT:
Here is the complete stacktrace:
java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
at org.apache.aries.cdi.container.internal.container.Discovery.discover(Discovery.java:130) ~[!/:1.1.3]
at org.apache.aries.cdi.container.internal.container.ContainerState.<init>(ContainerState.java:178) ~[!/:1.1.3]
at org.apache.aries.cdi.container.internal.Activator.doCreateExtension(Activator.java:209) [!/:1.1.3]
at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:242) [!/:1.1.3]
at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [!/:1.1.3]
at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) [osgi.core-7.0.0.jar:?]
at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) [osgi.core-7.0.0.jar:?]
at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [osgi.core-7.0.0.jar:?]
at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) [osgi.core-7.0.0.jar:?]
at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) [org.apache.felix.framework-6.0.3.jar:?]
at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) [org.apache.felix.framework-6.0.3.jar:?]
at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) [org.apache.felix.framework-6.0.3.jar:?]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4817) [org.apache.felix.framework-6.0.3.jar:?]
at org.apache.felix.framework.Felix.startBundle(Felix.java:2336) [org.apache.felix.framework-6.0.3.jar:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) [org.apache.felix.framework-6.0.3.jar:?]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260) [!/:3.6.8]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233) [!/:3.6.8]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520) [!/:3.6.8]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365) [!/:3.6.8]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316) [!/:3.6.8]
Caused by: java.lang.ClassNotFoundException: de.e_nexus.vr.tk.VRFrame not found by de.e-nexus.component [87]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1597) ~[?:?]
at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1375) ~[?:?]
at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1618) ~[?:?]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1548) ~[?:?]
at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
... 27 more
As the Logging points-out:
Caused by: java.lang.ClassNotFoundException: de.e_nexus.vr.tk.VRFrame not found by de.e-nexus.component [87]
What means Karaf is searching the VRFrame from the component submodule, which clearly does not exist.
That makes sense since all java packages are exported, the VRFrame's package is ambiguous. I followed what özkan pakdil said and renamed the java-packages to a unique name. Since that it works like a charm.
Thanks Özkan! Your answer includes some usefull hints and the source of my problem was the ambiguous package-name.
The main problem in the project is <extensions>true</extensions> in maven-bundle-plugin. You need to have it in your pom.xml. example code
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>5.1.1</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Bundle-Activator>${Bundle-Activator}</Bundle-Activator>
<Export-Package>
de.*;version=${project.version}
</Export-Package>
<Import-Package>
*
</Import-Package>
</instructions>
</configuration>
</plugin>
And packaging should be bundle like <packaging>bundle</packaging> for the OSGI bundles. You can see how package created from this command
mvn archetype:generate \
-DarchetypeGroupId=org.apache.karaf.archetypes \
-DarchetypeArtifactId=karaf-bundle-archetype \
-DarchetypeVersion=4.3.0 \
-DgroupId=io.github.ozkanpakdil \
-DartifactId=myfirstbundle \
-Dversion=1.0-SNAPSHOT \
-Dpackage=io.github.ozkanpakdil
https://karaf.apache.org/manual/latest/#_creating_bundles is explaining nicely. Other then that I highly suggest have namespaces without underscore. Instead of "e_nexus" have enexus and for <groupId>de.e-nexus</groupId> have <groupId>de.enexus</groupId>. Last but not least instead of <artifactId>vr.server</artifactId> have <artifactId>vrserver</artifactId>, I am suggesting these because OSGI is already complicated enviroenment, having simple and easy names will make easier to catch errors and maintain the code. Also it will prevent problems in case you move to another OS, you never know how these behaves between OSes.
There were some warnings related to same namespace is in different jars, I changed the code in "frame" and "component" modules accordingly. Below is the log from local, I can see that VR-Client log, I think it started working as expected.
ozkan#DESKTOP-NF90OD6 MINGW64 /c/Program Files/apache-karaf-4.3.0/bin
$ ./karaf
__ __ ____
/ //_/____ __________ _/ __/
/ ,< / __ `/ ___/ __ `/ /_
/ /| |/ /_/ / / / /_/ / __/
/_/ |_|\__,_/_/ \__,_/_/
Apache Karaf (4.3.0)
Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf.
Start Osgi spiced VR Server ... [OK] #10:23 (You might get asked by the firewall if you like to allow java to communicate to other systems. In order to connect the local VR-Client you are requested to grant the communication.)
karaf#root()> bundle:list
START LEVEL 100 , List Threshold: 50
ID | State | Lvl | Version | Name
---+----------+-----+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------
31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
55 | Active | 80 | 1.0.0 | Virtual reality server
56 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
57 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
58 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
59 | Active | 80 | 9.0.0 | org.objectweb.asm
60 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
61 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
62 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
63 | Active | 80 | 9.0.0 | org.objectweb.asm.util
64 | Active | 80 | 2.0.17 | OpenWebBeans Core
65 | Active | 80 | 2.0.17 | SPI definition
66 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
67 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
68 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
69 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
70 | Active | 80 | 1.0.12 | Apache Felix Converter
71 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
72 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
73 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
74 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
75 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
76 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
77 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
78 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
79 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
80 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
81 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
82 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
83 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
84 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
85 | Resolved | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
86 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
karaf#root()> log:display
10:23:10.508 INFO [activator-1-thread-2] Registering commands for bundle org.apache.karaf.log.core/4.3.0
10:23:10.821 INFO [activator-1-thread-2] Deployment finished. Registering FeatureDeploymentListener
10:23:10.821 INFO [activator-1-thread-2] Registering commands for bundle org.apache.karaf.features.command/4.3.0
10:23:10.828 INFO [activator-1-thread-3] Registering commands for bundle org.apache.karaf.kar.core/4.3.0
10:23:10.855 INFO [FelixStartLevel] Command registration delayed for bundle org.apache.karaf.shell.ssh/4.3.0. Missing service: [org.apache.sshd.server.SshServer]
10:23:10.871 INFO [FelixStartLevel] Registering commands for bundle org.apache.karaf.system.core/4.3.0
10:23:10.893 INFO [FelixStartLevel] Registering commands for bundle org.apache.karaf.event/4.3.0
10:23:11.089 INFO [activator-1-thread-1] Registering commands for bundle org.apache.karaf.shell.ssh/4.3.0
10:23:11.128 INFO [activator-1-thread-1] No detected/configured IoServiceFactoryFactory using Nio2ServiceFactoryFactory
10:23:12.346 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.PackageStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=packageState,version=1.5,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.346 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.wiring.BundleWiringStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=wiringState,version=1.1,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.346 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.BundleStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=bundleState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.351 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.ServiceStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=serviceState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.352 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.FrameworkMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=framework,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.353 INFO [activator-1-thread-1] Registering org.osgi.jmx.service.cm.ConfigurationAdminMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.388 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.PackageStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=packageState,version=1.5,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.389 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.wiring.BundleWiringStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=wiringState,version=1.1,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.390 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.BundleStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=bundleState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.390 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.ServiceStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=serviceState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.391 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.FrameworkMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.core:type=framework,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.392 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.service.cm.ConfigurationAdminMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#a766065 with name osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.394 WARN [activator-1-thread-1] Task rejected for JMX Notification dispatch of event [org.osgi.framework.ServiceEvent[source=[javax.management.MBeanServer]]] - Dispatcher may have been shutdown
10:23:12.420 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.PackageStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#4a85005 with name osgi.core:type=packageState,version=1.5,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.421 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.wiring.BundleWiringStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#4a85005 with name osgi.core:type=wiringState,version=1.1,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.422 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.BundleStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#4a85005 with name osgi.core:type=bundleState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.423 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.ServiceStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#4a85005 with name osgi.core:type=serviceState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.423 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.FrameworkMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#4a85005 with name osgi.core:type=framework,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
10:23:12.424 INFO [activator-1-thread-1] Registering org.osgi.jmx.service.cm.ConfigurationAdminMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper#4a85005 with name osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
In my clojure project I have a dependency on the javax.jms.MessageListener library. I have this class file in my project in the following directory
My-project
|java-
| |src -
| | |myJavaFile.java
| | |jars -
| | |library1.jar
| | |library2.jar
| | |libarary3.jar
| |javax -
| | |jms -
| | |MessageListener.class
|project.clj
|src -
| |my-program1.clj
| |my-program2.clj
| |my-program3.clj
Then in my project.clj file I have my java-source-paths set to
:java-source-paths ["java/src" "java/src/jars/" "java/javax/jms"]
but when I go to run my project via lein repl, I get compilation errors saying
java.lang.NoClassDefFoundError: javax/jms/MessageListener
Caused by: java.lang.ClassNotFoundException: javax.jms.MessageListener
From what I've read the messagelistener.class and my library jars should be included in my classpath when the project is running but that doesn't seem to be the case.
It is my understanding that the directory structure of java projects has to match the name of the namespaces. For instance package_name.classname has to be in the folder package_name on the classpath https://docs.oracle.com/javase/tutorial/java/package/managingfiles.html
But of course using either Leiningen or Boot you just need to add [javax.jms/jms-api "1.1-rev-1"] to the :dependencies.
I want to upgrade servicemix 4.5.2 to servicemix 5.4 I already resolve dependency issues but I come across with problem in reference to service. When my hibernate bundle is started it can't get access to services transactionManager and userTransaction.
I tested both configuration(spring and blueprint) form https://access.redhat.com/documentation/en-US/Fuse_ESB_Enterprise/7.0/html/EIP_Transactions_Guide/XaTM-Access.html but I cant get these services.
In osgi:list I see:
[102] [Active ] [ ] [ ] [ 50] Apache Aries Transaction Manager (1.0.0)
In my feature.xml in my hibernate bundle configuration I have <feature>transaction</feature>
In log file I see :
2015-06-16 15:03:58,868 | INFO | ExtenderThread-2 | OsgiBundleXmlApplicationContext | ? ? | 80 - org.apache.servicemix.bundles.spring-context - 3.2.11.RELEASE_1 | Application Context service already unpublished
2015-06-16 15:03:58,871 | INFO | ExtenderThread-2 | XmlBeanDefinitionReader | ? ? | 78 - org.apache.servicemix.bundles.spring-beans - 3.2.11.RELEASE_1 | Loading XML bean definitions from URL [bundle://230.0:0/META-INF/spring/beans.xml]
2015-06-16 15:03:58,905 | INFO | ExtenderThread-2 | DependencyServiceManager | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | Adding OSGi service dependency for importer [&transactionManager] matching OSGi filter [(objectClass=javax.transaction.TransactionManager)]
2015-06-16 15:03:58,905 | INFO | ExtenderThread-2 | DependencyServiceManager | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | Adding OSGi service dependency for importer [&userTransaction] matching OSGi filter [(objectClass=javax.transaction.UserTransaction)]
2015-06-16 15:03:58,905 | INFO | ExtenderThread-2 | DependencyServiceManager | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | OsgiBundleXmlApplicationContext(bundle=*****, config=osgibundle:/META-INF/spring/*.xml) is waiting for unsatisfied dependencies [[&transactionManager, &userTransaction]]
After timeout i get:
2015-06-16 15:08:58,911 | ERROR | Timer-1 | WaiterApplicationContextExecutor | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | Unable to create application context for [******], unsatisfied dependencies: Dependency on [(objectClass=javax.transaction.TransactionManager)] (from bean [&transactionManager]), Dependency on F[(objectClass=javax.transaction.UserTransaction)] (from bean [&userTransaction])
org.springframework.context.ApplicationContextException: Application context initialization for '*******' has timed out
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.timeout(DependencyWaiterApplicationContextExecutor.java:454)[123:org.springframework.osgi.extender:1.2.1]
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.access$000(DependencyWaiterApplicationContextExecutor.java:50)[123:org.springframework.osgi.extender:1.2.1]
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$WatchDogTask.run(DependencyWaiterApplicationContextExecutor.java:105)[123:org.springframework.osgi.extender:1.2.1]
at java.util.TimerThread.mainLoop(Timer.java:555)[:1.7.0_21]
at java.util.TimerThread.run(Timer.java:505)[:1.7.0_21]
2015-06-16 15:08:58,914 | ERROR | Timer-1 | ContextLoaderListener | ? ? | 123 - org.springframework.osgi.extender - 1.2.1 | Application context refresh failed (OsgiBundleXmlApplicationContext(bundle=******, config=osgibundle:/META-INF/spring/*.xml))
org.springframework.context.ApplicationContextException: Application context initialization for '*******' has timed out
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.timeout(DependencyWaiterApplicationContextExecutor.java:454)[123:org.springframework.osgi.extender:1.2.1]
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.access$000(DependencyWaiterApplicationContextExecutor.java:50)[123:org.springframework.osgi.extender:1.2.1]
at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$WatchDogTask.run(DependencyWaiterApplicationContextExecutor.java:105)[123:org.springframework.osgi.extender:1.2.1]
at java.util.TimerThread.mainLoop(Timer.java:555)[:1.7.0_21]
at java.util.TimerThread.run(Timer.java:505)[:1.7.0_21]
And:
karaf#root> bundle-services 102
You are about to access system bundle 102. Do you wish to continue (yes/no): yes
org.apache.aries.transaction.manager provides:
----------------------------------
[org.osgi.service.cm.ManagedService]
[javax.transaction.TransactionManager, javax.transaction.TransactionSynchronizationRegistry, javax.transaction.UserTransaction, org.apache.geronimo.transaction.manager.RecoverableTransactionManager, org.springframework.transaction.PlatformTransactionManager]
Solved by modifying the future.xml file on my hibernate bundle i added 'dependency="true"'. But still this is very strange behavior...
I thought dependencyManagement from parents were transitive aren't they?
Never see that explicitely in the doc, but it seemed obvious to me...
Here's what i have:
+-----------------------+
| Parent 1 |
|-----------------------|
| dependencyManagement: |
| lib1: 1.0.0 |
+-----------------------+
^
|
|
+-----------+-----------+
| Parent 2 |
|-----------------------|
| dependencyManagement: |
| lib2: 1.0.0 |
+-----------------------+
^
|
+-----------+-----------+
| Project A |
|-----------------------|
| dependencies: |
| lib1 |
| lib2 |
+-----------------------+
When i try to mvn install Project A, i get:
[ERROR] 'dependencies.dependency.version' for lib1-digester:jar is missing. # line XX, column YY
I also tried to add an entry of Parent 1 in the dependencyManagement of Parent 2 with the import scope, with no success..
How can my Project A have versions managed by all it's parent hierarchy?
It seems you are correct after reading the Maven Docs.
In general, all dependencies of those projects are used in your project, as are any that the project inherits from its parents, or from its dependencies, and so on.
Try to update to the latest version of Maven 3. IIRC, there were a couple of bugs in the inheritance of dependencyManagement elements.
A made a small example with other empty projects, and everything went fine...
Finally, there was something strange, here's what happened.
I was actually more like that:
+-----------------------+
| Parent 1 |
|-----------------------|
| dependencyManagement: |<----------------------+
| lib1: 1.0.0 | |
+-----------------------+ |
^ |
| +-------------+------------+
| | Project B |
+-----------+-----------+ |--------------------------|
| Parent 2 | | dependencies: |
|-----------------------| | somethingWrong: 1.0.0 |
| dependencyManagement: | +--------------------------+
| lib2: 1.0.0 |
+-----------------------+
^
|
+-----------+-----------+
| Project A |
|-----------------------|
| dependencies: |
| lib1 |
| lib2 |
+-----------------------+
There was an error in Project B's pom.xml
It shouldn't have any impact on my problem, but correcting that unrelated pom solved my problem...
Sorry for the wasted time
I am using Tanuki Software to make a window service for java. Here is my config file.
#encoding=UTF-8
# Configuration files must begin with a line specifying the encoding
# of the the file.
#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
# License Key to start. Licenses can be purchased or a trial license
# requested on the following pages:
# http://wrapper.tanukisoftware.com/purchase
# http://wrapper.tanukisoftware.com/trial
# Include file problems can be debugged by removing the first '#'
# from the following line:
##include.debug
# The Wrapper will look for either of the following optional files for a
# valid License Key. License Key properties can optionally be included
# directly in this configuration file.
#include ../conf/wrapper-license.conf
#include ../conf/wrapper-license-%WRAPPER_HOST_NAME%.conf
# The following property will output information about which License Key(s)
# are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE
#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the locale which the Wrapper should use. By default the system
# locale is used.
#wrapper.lang=en_US # en_US or ja_JP
# Specify the location of the Wrapper's language resources. If these are
# missing, the Wrapper will default to the en_US locale.
wrapper.lang.folder=../lang
#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
# Locate the java binary on the system PATH:
wrapper.java.command=java
# Specify a specific java binary:
#set.JAVA_HOME=/java/path
#wrapper.java.command=%JAVA_HOME%/bin/java
# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized. Helper
# classes are provided to do this for you. See the Integration section
# of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=sendmaill.SendMail
wrapper.java.classpath.2=../lib/wrapper.jar
wrapper.java.classpath.3=sendmaill.jar
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=../lib
# Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE
# Java Additional Parameters
wrapper.java.additional.1=
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
#wrapper.java.maxmemory=64
# Application parameters. Add parameters as needed starting from 1
#wrapper.app.parameter.1=
#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE
# Format of output for the console. (See docs for formats)
wrapper.console.format=PM
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=INFO
# Log file to use for wrapper output logging.
wrapper.logfile=../logs/wrapper.log
# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=LPTM
# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffix. For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=0
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
wrapper.logfile.maxfiles=0
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE
# Do not start if the pid file already exists.
wrapper.pidfile.strict=TRUE
# Title to use when running as a console
wrapper.console.title=Test Wrapper Sample Application
#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=10
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL
# Out Of Memory detection.
# (Ignore output from dumping the configuration to the console. This is only needed by the TestWrapper sample application.)
wrapper.filter.trigger.999=wrapper.filter.trigger.*java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.999=TRUE
wrapper.filter.action.999=NONE
# Ignore -verbose:class output to avoid false positives.
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
# (Simple match)
wrapper.filter.trigger.1001=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1001=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1001=TRUE
wrapper.filter.action.1001=RESTART
wrapper.filter.message.1001=The JVM has run out of memory.
#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>
# Configure the log attached to event emails.
#wrapper.event.default.email.attach_log=TRUE
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO
# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE
# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
#********************************************************************
# Wrapper Windows NT/2000/XP Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section. The
# service can then be reinstalled.
# Name of the service
wrapper.name=SendMail
# Display name of the service
wrapper.displayname=SendMail
# Description of the service
wrapper.description=Send Mail
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed. AUTO_START, DELAY_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false
SendMail is the name of my class while sendmaill is my jar file.
When i will run StartTestWrapper-NT.bat file its give an error. I can see my service in the window services but when i click it to start it through an error.
Here is the log file tanuki software.
NOTICE | wrapper | 2013/12/31 18:13:03 | --------------------------------------------------------------------
NOTICE | wrapper | 2013/12/31 18:13:03 |
STATUS | wrapper | 2013/12/31 18:13:03 |
STATUS | wrapper | 2013/12/31 18:13:03 | Launching a JVM...
INFO | jvm 1 | 2013/12/31 18:13:04 | WrapperManager: Initializing...
INFO | jvm 1 | 2013/12/31 18:13:04 |
INFO | jvm 1 | 2013/12/31 18:13:04 | WrapperSimpleApp Usage:
INFO | jvm 1 | 2013/12/31 18:13:04 | java org.tanukisoftware.wrapper.WrapperSimpleApp {app_class{/app_method}} [app_arguments]
INFO | jvm 1 | 2013/12/31 18:13:04 |
INFO | jvm 1 | 2013/12/31 18:13:04 | Where:
INFO | jvm 1 | 2013/12/31 18:13:04 | app_class: The fully qualified class name of the application to run.
INFO | jvm 1 | 2013/12/31 18:13:04 | app_arguments: The arguments that would normally be passed to the
INFO | jvm 1 | 2013/12/31 18:13:04 | application.
ERROR | wrapper | 2013/12/31 18:13:06 | JVM exited while loading the application.
INFO | wrapperm | 2013/12/31 18:13:08 | Waiting to start...
STATUS | wrapper | 2013/12/31 18:13:10 | Launching a JVM...
INFO | jvm 2 | 2013/12/31 18:13:10 | WrapperManager: Initializing...
INFO | jvm 2 | 2013/12/31 18:13:10 |
INFO | jvm 2 | 2013/12/31 18:13:10 | WrapperSimpleApp Usage:
INFO | jvm 2 | 2013/12/31 18:13:10 | java org.tanukisoftware.wrapper.WrapperSimpleApp {app_class{/app_method}} [app_arguments]
INFO | jvm 2 | 2013/12/31 18:13:10 |
INFO | jvm 2 | 2013/12/31 18:13:10 | Where:
INFO | jvm 2 | 2013/12/31 18:13:10 | app_class: The fully qualified class name of the application to run.
INFO | jvm 2 | 2013/12/31 18:13:10 | app_arguments: The arguments that would normally be passed to the
INFO | jvm 2 | 2013/12/31 18:13:10 | application.
INFO | wrapperm | 2013/12/31 18:13:13 | Waiting to start...
ERROR | wrapper | 2013/12/31 18:13:12 | JVM exited while loading the application.
STATUS | wrapper | 2013/12/31 18:13:17 | Launching a JVM...
INFO | wrapperm | 2013/12/31 18:13:18 | Waiting to start...
INFO | jvm 3 | 2013/12/31 18:13:17 | WrapperManager: Initializing...
INFO | jvm 3 | 2013/12/31 18:13:17 |
INFO | jvm 3 | 2013/12/31 18:13:17 | WrapperSimpleApp Usage:
INFO | jvm 3 | 2013/12/31 18:13:17 | java org.tanukisoftware.wrapper.WrapperSimpleApp {app_class{/app_method}} [app_arguments]
INFO | jvm 3 | 2013/12/31 18:13:17 |
INFO | jvm 3 | 2013/12/31 18:13:17 | Where:
INFO | jvm 3 | 2013/12/31 18:13:17 | app_class: The fully qualified class name of the application to run.
INFO | jvm 3 | 2013/12/31 18:13:17 | app_arguments: The arguments that would normally be passed to the
INFO | jvm 3 | 2013/12/31 18:13:17 | application.
ERROR | wrapper | 2013/12/31 18:13:19 | JVM exited while loading the application.
INFO | wrapperm | 2013/12/31 18:13:23 | Waiting to start...
STATUS | wrapper | 2013/12/31 18:13:23 | Launching a JVM...
INFO | jvm 4 | 2013/12/31 18:13:24 | WrapperManager: Initializing...
INFO | jvm 4 | 2013/12/31 18:13:24 |
INFO | jvm 4 | 2013/12/31 18:13:24 | WrapperSimpleApp Usage:
INFO | jvm 4 | 2013/12/31 18:13:24 | java org.tanukisoftware.wrapper.WrapperSimpleApp {app_class{/app_method}} [app_arguments]
INFO | jvm 4 | 2013/12/31 18:13:24 |
INFO | jvm 4 | 2013/12/31 18:13:24 | Where:
INFO | jvm 4 | 2013/12/31 18:13:24 | app_class: The fully qualified class name of the application to run.
INFO | jvm 4 | 2013/12/31 18:13:24 | app_arguments: The arguments that would normally be passed to the
INFO | jvm 4 | 2013/12/31 18:13:24 | application.
ERROR | wrapper | 2013/12/31 18:13:26 | JVM exited while loading the application.
INFO | wrapperm | 2013/12/31 18:13:28 | Waiting to start...
STATUS | wrapper | 2013/12/31 18:13:30 | Launching a JVM...
INFO | jvm 5 | 2013/12/31 18:13:30 | WrapperManager: Initializing...
INFO | jvm 5 | 2013/12/31 18:13:30 |
INFO | jvm 5 | 2013/12/31 18:13:30 | WrapperSimpleApp Usage:
INFO | jvm 5 | 2013/12/31 18:13:30 | java org.tanukisoftware.wrapper.WrapperSimpleApp {app_class{/app_method}} [app_arguments]
INFO | jvm 5 | 2013/12/31 18:13:30 |
INFO | jvm 5 | 2013/12/31 18:13:30 | Where:
INFO | jvm 5 | 2013/12/31 18:13:30 | app_class: The fully qualified class name of the application to run.
INFO | jvm 5 | 2013/12/31 18:13:30 | app_arguments: The arguments that would normally be passed to the
INFO | jvm 5 | 2013/12/31 18:13:30 | application.
ERROR | wrapper | 2013/12/31 18:13:32 | JVM exited while loading the application.
FATAL | wrapper | 2013/12/31 18:13:33 | There were 5 failed launches in a row, each lasting less than 300 seconds. Giving up.
FATAL | wrapper | 2013/12/31 18:13:33 | There may be a configuration problem: please check the logs.
STATUS | wrapper | 2013/12/31 18:13:33 | <-- Wrapper Stopped
INFO | wrapperm | 2013/12/31 18:13:33 | Waiting to start...
ERROR | wrapperm | 2013/12/31 18:13:34 | The SendMail service was launched, but failed to start.
ERROR | wrapperm | 2013/12/31 18:13:34 | Please check the log file more information: F:\Java Work\wrapper-windows-x86-64-3.5.22-st\wrapper-windows-x86-64-3.5.22-st\logs\wrapper.log
Any Help is very appreciable.
Malik,
The problem is that the WrapperSimpleApp class expects a class name as an argument. You are not currently passing any arguments. Please try adding the following:
wrapper.app.parameter.1=SendMail
This assumes that the full class name of your main class is "SendMail" as you said.
Cheers,
Leif