2012-03-17 2 views
3

Я столкнулся с большой проблемой, чего я не могу решить.Glassfish, встроенный в JUnit для тестирования EJB

Я пытаюсь написать небольшое приложение с JavaEE6 и EJB. Я бы хотел настроить тестовую среду с помощью EJBContainer и Glassfish Embedded.

Этот проект создан через Maven, но EJBContainer загружается самим тестовым классом, потому что, как я вижу, это проще и чаще, чем загрузка с maven.

Я создал домен GlassFish на основе некоторых статей в моей папке src/test/glassfish-domain (в правой структуре, см. Ниже).

Если в моем домене.xml не содержится ресурс JDBC, который я определяю для тестирования моего приложения, встроенная GF загружается правильно. Но когда я определяю требуемый ресурс JDBC, я получил исключение NullPointerException без объяснения причин.

Может ли кто-нибудь указать мне, что я делаю неправильно?

конфигурации домена сниппет:

<resources> 
    <!-- [...] --> 
    <jdbc-resource pool-name="bookshelf" jdni-name="jdbc/bookshelf" /> 
    <jdbc-connection-pool driver-classname="" datasource-classname="org.apache.derby.jdbc.ClientDataSource" res-type="javax.sql.DataSource" description="" name="bookshelf"> 
     <property name="User" value="APP"></property> 
     <property name="DatabaseName" value="bookshelf-db"></property> 
     <property name="RetrieveMessageText" value="true"></property> 
     <property name="Password" value="APP"></property> 
     <property name="ServerName" value="localhost"></property> 
     <property name="Ssl" value="off"></property> 
     <property name="SecurityMechanism" value="4"></property> 
     <property name="ConnectionAttributes" value=";create=true"></property> 
     <property name="TraceFileAppend" value="false"></property> 
     <property name="TraceLevel" value="-1"></property> 
     <property name="PortNumber" value="1527"></property> 
     <property name="LoginTimeout" value="0"></property> 
    </jdbc-connection-pool> 
    </resources> 
    <servers> 
    <server name="server" config-ref="server-config"> 
     <!-- [...] --> 
     <resource-ref ref="jdbc/bookshelf" /> 
    </server> 

Журнал:

javax.ejb.EJBException: java.lang.NullPointerException 
    at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createContainer(EJBContainerProviderImpl.java:233) 
    at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createEJBContainer(EJBContainerProviderImpl.java:129) 
    at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:127) 
    at me.hron.bookshelf.test.ejb.CategoryFacadeTest.setupContainer(CategoryFacadeTest.java:52) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 
Caused by: java.lang.NullPointerException 
    at com.sun.enterprise.config.serverbeans.Resources$Duck.getResourceByName(Resources.java:172) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jvnet.hk2.config.Dom.invokeDuckMethod(Dom.java:946) 
    at org.jvnet.hk2.config.Dom.invoke(Dom.java:899) 
    at org.glassfish.config.support.TranslatedConfigView.invoke(TranslatedConfigView.java:119) 
    at $Proxy58.getResourceByName(Unknown Source) 
    at org.glassfish.javaee.services.ResourceManager.isBindableResourceEnabled(ResourceManager.java:188) 
    at org.glassfish.javaee.services.ResourceManager.deployResources(ResourceManager.java:162) 
    at org.glassfish.javaee.services.ResourceManager.postConstruct(ResourceManager.java:116) 
    at com.sun.hk2.component.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:131) 
    at com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91) 
    at com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:82) 
    at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:67) 
    at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139) 
    at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76) 
    at com.sun.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:336) 
    at com.sun.enterprise.v3.server.AppServerStartup.doStart(AppServerStartup.java:145) 
    at com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:136) 
    at com.sun.enterprise.glassfish.bootstrap.GlassFishImpl.start(GlassFishImpl.java:79) 
    at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createContainer(EJBContainerProviderImpl.java:203) 
... 25 more 
+0

Обновление: Я нашел первую ошибку, опечатка в конфиге (jdni против JNDI), но есть еще одна проблема: ВНИМАНИЕ: RAR8035: Исключение при создании пула соединений JDBC [книжная полка]:, ком .sun.appserv.connectors.internal.api.ConnectorRuntimeException: Не удается найти место для модуля: __ds_jdbc_ra –

+1

Эй, я тоже пытался справиться с этой ошибкой, не имея возможности найти место для модуля ... Дело в неправильной папке структуры в стеклянной рыбке, помещенной в тестовую папку. У меня был _src/test/glassfish/lib/applications/__ ds_jdbc_ra_. Я отсутствовал в папке _install_ под _lib_, поэтому правильная структура - _src/test/glassfish/lib/install/applications/__ ds_jdbc_ra_. Это решило проблему для меня. –

+0

Я попробую для этого, когда у меня будет время. Спасибо за совет. –

ответ

1

GlassFish папка должна иметь Lib

структура как этот

lib 
+install 
++aplications 

который имеет

jaxr-ra 
jmsra 
__cp_jdbc_ra 
__dm_jdbc_ra 
__ds_jdbc_ra 
__xa_jdbc_ra 
+0

Извините, это 2-х летняя тема, и у меня больше нет источника приложения. Это был проект детской площадки, и я удалил его несколько месяцев назад, когда перешел на новый ноутбук. В любом случае, спасибо за ваш ответ. –

+0

У меня была такая же проблема, и предлагаемое решение сработало для меня. Спасибо! – Bob

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