2014-01-07 3 views
0

Я пытаюсь запустить JNLP файл, который загружает некоторые фляги файлы в кэш Jvm, и я начал получать следующее сообщение об ошибке на время начала:ejbAccessException при запуске JNLP приложений Java

java.lang.NoClassDefFoundError: javax/ejb/EJBAccessException 
at java.lang.Class.getDeclaredMethods0(Native Method) 
at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
at java.lang.Class.getMethod0(Unknown Source) 
at java.lang.Class.getMethod(Unknown Source) 
at com.sun.javaws.Launcher.executeApplication(Unknown Source) 
at com.sun.javaws.Launcher.executeMainClass(Unknown Source) 
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source) 
at com.sun.javaws.Launcher.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: javax.ejb.EJBAccessException 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 9 more 

Что моя причина этого javax .ejb.EJBAccessException? Вот мой JNLP файл:

<?xml version="1.0" encoding="utf-8"?> 
<jnlp spec="1.0+" codebase="http://10.100.10.9/ikarusdelhitest/" href="ikarus.jnlp"> 
<information> 
    <title>ikarus</title> 
    <vendor>my company name here</vendor> 
    <homepage href="http://www.mycompanynamehere.com" /> 
    <description>description here</description> 
    <icon href="ikarus.ico" /> 
    <offline-allowed /> 
</information> 
<security> 
    <all-permissions /> 
</security> 
<resources> 
    <jar href="jars/ikarus/ikarusClient.jar" /> 
    <jar href="jars/ikarus/ikarusDelegators.jar" /> 
    <jar href="jars/ikarus/clientRules.jar" /> 
    <jar href="jars/ikarus/ruleImps.jar" /> 
    <jar href="jars/ikarus/ikarusUtil.jar" /> 
    <jar href="jars/ikarus/ikarusResources.jar" /> 
    <jar href="jars/ikarus/domain.jar" /> 
    <jar href="jars/ikarus/domain_repository.jar" /> 
    <jar href="jars/ikarus/domain_service.jar" /> 
    <jar href="jars/ikarus/app_repository.jar" /> 
    <jar href="jars/ikarus/app_service.jar" /> 
    <jar href="jars/ikarus/infrastructure.jar" /> 
    <jar href="jars/ikarus/integration_domain.jar" /> 
    <jar href="jars/jboss_ejb_auth/ejb3-persistence.jar" /> 
    <jar href="jars/jboss_ejb_auth/jboss-ejb3x.jar" /> 
    <jar href="jars/jboss_ejb_auth/jbossall-client.jar" /> 
    <jar href="jars/jasper/commons-beanutils-1.8.0.jar" /> 
    <jar href="jars/jasper/commons-collections-3.2.1.jar" /> 
    <jar href="jars/jasper/commons-digester-1.7.jar" /> 
    <jar href="jars/jasper/commons-logging-1.1.jar" /> 
    <jar href="jars/jasper/iText-2.1.0.jar" /> 
    <jar href="jars/jasper/jasperreports-3.6.0.jar" /> 
    <jar href="jars/jasper/poi-3.2-FINAL-20081019.jar" /> 
    <property name="jnlp.localization" value="Delhi"/> 
</resources> 
<application-desc main-class="com.celebi.ikarus.main.Ikarus" /> 

ответ

0

Я нашел решение в глубине океана в моем приложении. В основном, файлы баночка ресурса ВСЕ нужно быть подписаны через хранилище и все они должны включать в файл/MANIFEST.MF META-INF, который должен включать в себя эти строки в нем:

Codebase: * 
Permissions: all-permissions 
Application-Name: <your application name here> 
Caller-Allowable-Codebase: * 
Trusted-Library: true 
Application-Library-Allowable-Codebase: * 

(не забудьте добавьте строку emtpy в конец файла манифеста, иначе он не сможет быть правильно проанализирован.)

Также вам нужно иметь файл .jnlp, включенный во все банки, обернутые папкой JNLP-INF (т.е. папка JNLP-INF, которая содержит файл JNLP внутри него для ВСЕХ ваших архивов jar в вашем приложении. Даже в сторонних банках. Также обратите внимание на свой файл jnlp с заглавными буквами, например MYAPPLICATION.JNLP, а не myapplication.jnlp)

В общем, вы всегда должны держать свою консоль Java открытой, пока вы не устраняете что-то о своем приложении Java. Вы даже не видите никаких предупреждений на консоли java, потому что, как правило, предупреждения java-консоли гораздо более серьезны для виртуальной машины Java, поскольку она фактически не запускает ваше приложение из-за предупреждений, которые не разрешены.

1

Вы должны добавить JRE в свои ресурсы, чтобы извлечь выгоду из стандартной библиотеки.

Попробуйте добавить <j2se version="1.6+"/> перед первым <jar> тег.

+0

Это не помогло –

+0

Действительно, согласно http://docs.oracle.com/javaee/6/api/javax/ejb/EJBAccessException.html является частью API Java EE, а не частью Java SE API. Я не уверен, можно ли подключиться к EJB из приложения, развернутого с помощью Java Web Start (и я считаю, что это смешная идея), но в этом случае вам, вероятно, нужно добавить некоторую реализацию Java EE в ваш путь к классам, такой как JBoss или Glassfish. – foch

+0

На самом деле это приложение работает на сервере предприятия Jboss_4.2.1, и у меня есть файл EJBAccessException.class в одном из многочисленных банок проекта. Может быть, мне не хватает чего-то, что можно добавить к пути к классу? Могу ли я решить эту проблему с classpath как-то из jnlp-файла? –

Смежные вопросы