Web Beans in Web Start?
stephanos Oct 10, 2009 4:03 PMHi,
how to package a web beans (Weld) Java SE project for web start?
Obviously I have to merge
the classes and dependencies of my project into one JAR (via maven-dependency-plugin). But when I start the fat jar
from the console, web beans starts scanning the classpath like crazy (because the beans.xml that was formerly only in my
JAR is now public
(because of the merge)):
SEVERE: Error loading bsh/util/BeanShellBSFEngine.class java.lang.NoClassDefFoundError: org/apache/bsf/util/BSFEngineImpl at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:637) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:323) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:268) at org.jboss.webbeans.environment.se.discovery.AbstractScanner.handle(AbstractScanner.java:51) at org.jboss.webbeans.environment.se.discovery.URLScanner.handleArchiveByFile(URLScanner.java:149) at org.jboss.webbeans.environment.se.discovery.URLScanner.handle(URLScanner.java:126) at org.jboss.webbeans.environment.se.discovery.URLScanner.scanResources(URLScanner.java:107) at org.jboss.webbeans.environment.se.discovery.SEWebBeanDiscovery.scan(SEWebBeanDiscovery.java:71) at org.jboss.webbeans.environment.se.discovery.SEWebBeanDiscovery.<init>(SEWebBeanDiscovery.java:45) at org.jboss.webbeans.environment.se.StartMain$1.<init>(StartMain.java:69) at org.jboss.webbeans.environment.se.StartMain.go(StartMain.java:69) at org.jboss.webbeans.environment.se.StartMain.main(StartMain.java:91) at org.jboss.webbeans.environment.se.StartMain.main(StartMain.java:86)
There are a few dozen more - Web Beans takes those form my MANIFEST file - yet when I don't add all the paths, the jar signing that is required for web start doesn't work. Excerpt:
Manifest-Version: 1.0 Build-Jdk: 1.6.0_14 Created-By: Apache Maven Main-Class: org.jboss.webbeans.environment.se.StartMain Archiver-Version: Plexus Archiver Name: javax/mail/internet/ContentDisposition.class SHA1-Digest: XPnae+DgbD05R+E1xCNdWjZ0aWA= Name: javax/servlet/ServletRequestWrapper.class SHA1-Digest: NHeo4aV0T3E88+17A/YidgOCqtE= Name: junit/awtui/TestRunner$2.class SHA1-Digest: ak43r0m/RwVKKsUxtXNkdkEu6FI= ...
Finally the app crashes:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/batik/gvt/GraphicsNode at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2444) at java.lang.Class.getDeclaredMethods(Class.java:1808) at org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl.<init>(AnnotatedClassImpl.java:197) at org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl.of(AnnotatedClassImpl.java:108) at org.jboss.webbeans.resources.ClassTransformer$1.call(ClassTransformer.java:36) at org.jboss.webbeans.resources.ClassTransformer$1.call(ClassTransformer.java:32) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at org.jboss.webbeans.util.collections.ConcurrentCache.putIfAbsent(ConcurrentCache.java:125) at org.jboss.webbeans.resources.ClassTransformer.classForName(ClassTransformer.java:31) at org.jboss.webbeans.introspector.jlr.AbstractAnnotatedType.<init>(AbstractAnnotatedType.java:64) at org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl.<init>(AnnotatedClassImpl.java:113) at org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl.of(AnnotatedClassImpl.java:108) at org.jboss.webbeans.resources.ClassTransformer$1.call(ClassTransformer.java:36) at org.jboss.webbeans.resources.ClassTransformer$1.call(ClassTransformer.java:32) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at org.jboss.webbeans.util.collections.ConcurrentCache.putIfAbsent(ConcurrentCache.java:125) at org.jboss.webbeans.resources.ClassTransformer.classForName(ClassTransformer.java:31) at org.jboss.webbeans.bootstrap.BeanDeployer.addClass(BeanDeployer.java:82) at org.jboss.webbeans.bootstrap.BeanDeployer.addClasses(BeanDeployer.java:91) at org.jboss.webbeans.bootstrap.WebBeansBootstrap.registerBeans(WebBeansBootstrap.java:152) at org.jboss.webbeans.bootstrap.WebBeansBootstrap.boot(WebBeansBootstrap.java:203) at org.jboss.webbeans.environment.se.StartMain.go(StartMain.java:73) at org.jboss.webbeans.environment.se.StartMain.main(StartMain.java:91) at org.jboss.webbeans.environment.se.StartMain.main(StartMain.java:86) Caused by: java.lang.ClassNotFoundException: org.apache.batik.gvt.GraphicsNode at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:323) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:268) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336) ... 27 more
Creative ideas welcome!