0
我试图为使用jdbc资源的文件创建一个测试。除了当我试图测试使用实体管理器的东西时,定期测试在整个项目中都能正常工作。我想我错过了一些简单的东西,并希望得到任何帮助。在Netbeans中使用Maven项目使用jUnit测试检查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]
下面是一些我所采取的故障排除步骤:
- 添加了GlassFish群众演员Maven的POM
- 我已经把持久性文件中都/主/资源/测试/资源文件夹。
- 我已经尝试在DonationsFacadeTest文件的@BeforeClass方法中的上下文对象中添加属性,以及大约一百万种与下面类似的其他配置。
环境信息:
- 使用NetBeans 7.0.1
- Maven项目
- 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>
再次感谢您的帮助,非常感谢。
Glassfish是否在执行测试时运行?什么是JNDI提供者? – duffymo 2012-02-27 23:33:06
是的,glassfish正在运行。我认为这只是典型的MySQL jdbc提供程序。 – JCab 2012-02-27 23:36:59
不,JNDI命名服务是Glassfish的一部分。你如何告诉一个没有运行Glassfish的应用程序,比如你的单元测试,使用Glassfish JNDI命名服务? – duffymo 2012-02-27 23:41:38