javax.name.NameNotFoundException:Name 不绑定在此上下文中。无法找到上下文.xml网.xml持久性.xml
2022-09-02 13:19:15
我试图找出为什么我的Web应用程序抛出一个
javax.naming.NameNotFoundException: Name [flexeraDS] is not bound in this Context. Unable to find [flexeraDS].
当我从中复制配置的姐妹一个安静地运行时。
我有:
- 通过右键单击并选择“新的持久性”,从netbeans创建一个新的持久性,我不关心我给出的实际值,但我只需要在正确的目录中创建持久性.xml文件。
- 编辑了我的上下文.xml如下,与工作姊妹项目中的上下文相匹配
- 编辑了我的 Web.xml以包含资源数据源,如下所示
- 编辑了我的持久性.xml如下,再次匹配姊妹项目工作的相同值。
- 将其他项目中存在的所有库都添加到我的 lib 文件夹中,并从 NetBeans 添加它们,以便正确地放入 war 中。
上下文.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/PetLogin">
<ResourceLink global="ds/flexeraDS" name="ds/flexeraDS" type="javax.sql.DataSource"/>
</Context>
网.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app ....>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>ds/flexeraDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
持久性.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd ">
<persistence-unit name="flexerajpa">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:/comp/env/ds/flexeraDS</non-jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="database" />
<property name="eclipselink.weaving" value="static" />
<property name="eclipselink.logging.level" value="WARNING" />
</properties>
</persistence-unit>
</persistence>
现在,我的系统项目 some-how 设法在启动时在 apache-tomcat-7.0.40/bin/exampleDB 中创建其数据库文件夹,而我的项目不会创建它并抛出如上所述的错误。
引发错误的代码是我第一次连接到数据库:
EntityManager entityManager = PersistenceProvider.createEntityManager();
其中 PersistenceProvider 类是:
public final class PersistenceProvider
{
private static Map<String, Object> lOptions = new HashMap<String, Object>();
static
{
lOptions.put(PersistenceUnitProperties.CACHE_SHARED_DEFAULT, "false");
}
private static EntityManagerFactory factory = Persistence
.createEntityManagerFactory("flexerajpa", lOptions);
private PersistenceProvider()
{
}
/**
* @return
*/
public static EntityManager createEntityManager()
{
return factory.createEntityManager();
}
/**
* @return
*/
public static Metamodel getMetamodel()
{
return factory.getMetamodel();
}
}
我没有可能的原因。如果有人有任何建议。谢谢