Ошибка инициализации тестового примера модуля EJB - PullRequest
2 голосов
/ 19 февраля 2012

Я пытаюсь выполнить модульное тестирование простого проекта EJBModule под NetBeans 7.1, но я получаю одно предупреждение и ошибку инициализации.Я использую GlassFish версии 3.1.1.Я надеюсь, что кто-то знаком с этим типом проблемы и может дать мне несколько советов, как ее решить.

В первом проекте у нас есть такой удаленный интерфейс:

@Remote
public interface CredentialEJBRemote {

//Stuff     

}

Затем во втором проекте мы реализуем такой интерфейс:

@Stateless
@LocalBean
public class CredentialEJB implements CredentialEJBRemote {

//@Override stuff 

}

И, наконец, в модульном тесте я делаю это:

private static EJBContainer ec = EJBContainer.createEJBContainer();
private static Context ctx = ec.getContext();
CredentialEJBRemote instance = (CredentialEJBRemote)ctx.lookup("java:global/classes/CredentialEJB");
//Do stuff with instance

Когда я запускаю модульный тест, я получаюпредупреждение и ошибка.

Предупреждение:

WARNING: multiple versions of ant detected in path for junit
jar:file:/C:/Program%20Files/NetBeans%207.1/java/ant/lib/ant.jar!/org/apache/tools/ant/Project.class
and  jar:file:/C:/Program%20Files/glassfish3.1.1/glassfish/modules/ant.jar!/org/apache/tools/ant/Project.class

За этим следует ошибка в контрольном примере:

Testcase: initializationError(trefliq.persistence.CredentialEJBTest):   Caused an ERROR
Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(   
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2308)
    at java.lang.Class.getDeclaredFields(Class.java:1760)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)

Есть идеи, что может быть причиной этого?

Большое спасибо.

1 Ответ

2 голосов
/ 21 февраля 2012

Эта ошибка, как оказалось, была вызвана наличием javaee-api-6.0.jar Netbean в пути к классамЭтот jar-файл не содержит тела методов, поэтому была выдана неуловимая и, казалось бы, редкая ошибка «Отсутствующий код».Предупреждение Ant.jar было устранено путем переименования Ant.jar в папке модулей GlassFish.Это противоречило Ant.jar в Netbean, потому что это две разные версии Ant.

...