Подтвердить что ты не робот

Javax.naming.NameNotFoundException: имя не связано в этом контексте. Невозможно найти

Я пытаюсь выяснить, почему мое веб-приложение бросает

javax.naming.NameNotFoundException: Name [flexeraDS] is not bound in this Context. Unable to find [flexeraDS].

когда сестра, из которой я копирую конфигурацию, спокойно работает.

У меня есть:

  • создайте из netbeans новую постоянство, щелкнув правой кнопкой мыши и выбрав "новое постоянство", мне не нужны фактические значения, которые я даю, но мне просто нужно, чтобы файл persistence.xml был создан в правильном каталоге.
  • отредактировал мой context.xml, как показано ниже, в соответствии с тем, что работает в проекте с сестрой.
  • отредактировал мой web.xml, чтобы содержать ресурс DataSource, как показано ниже.
  • отредактировал мой persistence.xml, как показано ниже, в соответствии с теми же значениями, что и в проекте сестра.
  • добавлены все библиотеки, присутствующие в другом проекте в моей папке lib, и добавив их также из NetBeans для правильной установки внутри войны.

context.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>

web.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>

persistence.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>

Теперь мой syster project-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();
    }
}

У меня нет причин для этого.. если у кого есть какие-то предложения. Спасибо вам

4b9b3361

Ответ 1

Хорошо выяснили, что файл Tomcat server.xml также должен быть настроен для работы источника данных. Поэтому просто добавьте:

<Resource 
auth="Container" 
driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 
maxActive="20" 
maxIdle="10" 
maxWait="-1" 
name="ds/flexeraDS" 
type="javax.sql.DataSource" 
url="jdbc:derby:flexeraDB;create=true" 
  />

Ответ 2

Вы также можете добавить

<Resource 
auth="Container" 
driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 
maxActive="20" 
maxIdle="10" 
maxWait="-1" 
name="ds/flexeraDS" 
type="javax.sql.DataSource" 
url="jdbc:derby:flexeraDB;create=true" 
/> 

в META-INF/context.xml файле (это будет только на уровне приложения).