Ошибка при проверке поиска JDBC с помощью тестов jUnit с проектом Maven в Netbeans - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь создать тест для файла, использующего ресурс jdbc. Регулярные тесты отлично работают во всем проекте, за исключением случаев, когда я пытаюсь протестировать что-то, использующее менеджер сущностей. Я думаю, что я упускаю что-то простое здесь и был бы признателен за любую помощь.

Вот ошибка.

Feb 27, 2012 3:04:44 PM com.sun.enterprise.v3.server.ApplicationLifecycle deploy
SEVERE: javax.naming.NamingException: Lookup failed for 'jdbc/foundation' in SerialContext[myEnv={com.sun.enterprise.connectors.jndisuffix=__pm, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: foundation not found]
java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'jdbc/foundation' in SerialContext[myEnv={com.sun.enterprise.connectors.jndisuffix=__pm, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: foundation not found]

Вот некоторые шаги по устранению неполадок, которые я предпринял:

  • Добавлены дополнения к стеклянной рыбе в POM maven
  • Я поместил файл постоянства в папки / main / resources и / test / resources.
  • Я попытался добавить свойства к объекту контекста в методе @BeforeClass в файле DonationsFacadeTest вместе с примерно миллионом других конфигураций, подобных приведенной ниже.

Информация об окружающей среде:

  • Использование Netbeans 7.0.1
  • Maven Project
  • Glassfish 3.1

DonationsFacade.java - этот класс использует шаблон фасада для обеспечения косвенного доступа к сущностям JPA.

@Stateless
public class DonationsFacade extends AbstractFacade<Donations> {
@PersistenceContext(unitName = "FoundationPU")
private EntityManager em;

protected EntityManager getEntityManager() {
    return em;
}

public DonationsFacade() {
    super(Donations.class);
}

public boolean setPaid(int id, String transId)
{
    try{
        Donations don = em.find(Donations.class, id);
        don.setStatus("Paid");
        don.setConfirmationnumber(transId);
        em.persist(don);
        em.flush(); 
        return true;
    }
    catch(Exception ex)
    {
        return false;
    }
}

Тестовый файл - просто пытаюсь написать простой тест для проверки данных.

public class DonationsFacadeTest {

@Test
public void testSetPaid() throws Exception {
    int id = 1;
    String transId = "123";
    EJBContainer ejbC = EJBContainer.createEJBContainer();
    Context ctx = ejbC.getContext();      
    DonationsFacade instance = (DonationsFacade)ctx.lookup("java:global/classes/DonationsFacade");
    boolean expResult = false;
    boolean result = instance.setPaid(id, transId);
    assertEquals(expResult, result);
    ejbC.close();
}
}

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"...>
  <persistence-unit name="FoundationPU" transaction-type="JTA">
   <jta-data-source>jdbc/foundation</jta-data-source>
   <properties/>
  </persistence-unit>
</persistence>

GlassFish-resources.xml

<resources>
<jdbc-resource enabled="true" jndi-name="jdbc/foundation" object-type="user"   pool-name="mysql_foundation_rootPool">
<description/>
</jdbc-resource>
<jdbc-connection-pool allow-non-component-callers="false" 
              associate-with-thread="false" 
              connection-creation-retry-attempts="0" 
              connection-creation-retry-interval-in-seconds="10" 
              connection-leak-reclaim="false" 
              connection-leak-timeout-in-seconds="0" 
              connection-validation-method="table" 
              datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" 
              fail-all-connections="false" idle-timeout-in-seconds="300" 
              is-connection-validation-required="false" 
              is-isolation-level-guaranteed="true" 
              lazy-connection-association="false" 
              lazy-connection-enlistment="false" 
              match-connections="false" 
              max-connection-usage-count="0" 
              max-pool-size="32" 
              max-wait-time-in-millis="60000" 
              name="connectionPool" 
              non-transactional-connections="false" 
              ping="false" 
              pool-resize-quantity="2" 
              pooling="true" 
              res-type="javax.sql.DataSource" 
              statement-cache-size="0" 
              statement-leak-reclaim="false" 
              statement-leak-timeout-in-seconds="0" 
              statement-timeout-in-seconds="-1" 
              steady-pool-size="8" 
              validate-atmost-once-period-in-seconds="0" 
              wrap-jdbc-objects="true">
<property name="URL" value="jdbc:mysql://localhost:3306/foundation"/>
<property name="User" value="root"/>
<property name="Password" value="thepassword"/>
</jdbc-connection-pool>
</resources>

Опять же, спасибо за помощь, очень признателен.

1 Ответ

0 голосов
/ 28 февраля 2012

разобрался с ответом здесь.Я в основном ввел в класс управляющего сущностями.Надеюсь, это будет полезно для тех, кто пытается сделать то же самое.

public class DonationsFacadeTest {


private EntityManager em; 
private EntityTransaction tx; 
DonationsFacade donations;

public DonationsFacadeTest() {
}

@Before
public void setUpClass() throws Exception {

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Foundation2");
    em = emf.createEntityManager();
    tx = em.getTransaction(); 
    this.donations = new DonationsFacade(); 
    this.donations.em = em;
}

/**
 * Test of setPaid method, of class DonationsFacade.
 */
@Test
public void testSetPaid() throws Exception {

    int id = 1;
    String transId = "123";

    boolean expResult = false;
    boolean result = donations.setPaid(id, transId);
    assertEquals(expResult, result);

}
}

Соответственно изменил файл persistence.xml.

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" ... >
<persistence-unit name="Foundation2" transaction-type="RESOURCE_LOCAL">
    <class>org.scmc.foundation.session.DonationsFacadeTest</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
       <property name="javax.persistence.jdbc.driver"   value="com.mysql.jdbc.Driver" />
       <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/foundation"/>
       <property name="javax.persistence.jdbc.user" value="root"/>
       <property name="javax.persistence.jdbc.password" value="password"/>
    </properties>
</persistence-unit>

И, наконец, добавилсоответствующий драйвер для файла POM.

   <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.18</version>
    </dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...