Glassfish со встроенным JUnit для тестирования EJB - PullRequest
3 голосов
/ 17 марта 2012

Я столкнулся с большой проблемой, которую не могу решить.

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

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

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

Если мой domains.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

1 Ответ

1 голос
/ 04 декабря 2014
Папка

glassfish должна иметь lib

структура выглядит так

lib
+install
++aplications

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

jaxr-ra
jmsra
__cp_jdbc_ra
__dm_jdbc_ra
__ds_jdbc_ra
__xa_jdbc_ra
...