NameNotFoundException: имя не связано в этом контексте.Невозможно найти - PullRequest
0 голосов
/ 13 октября 2018

У меня проблема с развертыванием приложения (war-файла) в tomcat.

приложение определило ссылку на источник данных JNDI, в web.xml и SpringDataJPAContext.xml (приложение работаетхорошо на jboss).Со своей стороны, я определяю источник данных внутри tomcat, в server.xml и в файле внутри conf / Catalina / localhost ([name-application] .xml).

В приложении, которое я определил ...

в WEB-INF / web.xml:

<resource-ref>
    <description>JDBC Data Source</description>
    <res-ref-name>mydb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <mapped-name>java:mydb</mapped-name>
</resource-ref>

в WEB-INF / classes / SpringDataJPAContext.xml:

<beans: bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <beans: property name="jndiName" value="java:jdbc/mydb"/>
</beans:bean>

Со своей стороны, я тестирую на tomcat ...

в server.xml:

<GlobalNamingResources>
    ....
    <Resource name="mydb" auth="Container" type="javax.sql.DataSource"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="user" password="pass" driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://localhost:5432/mydb"/>
</GlobalNamingResources>

inconf / Catalina / localhost / myapp.xml:

<Context>
    <ResourceLink name="mydb" global="mydb" type="javax.sql.DataSource"/>
</Context>

Но, когда я запускаю tomcat, я получаю ошибку, которая не находит имя источника данных.Я получаю:

"javax.naming.NameNotFoundException: Name [jdbc/mydb] is not bound in this Context. Unable to find [jdbc]."

Я пробовал разные конфигурации, но ошибка продолжает появляться.

Ответы [ 4 ]

0 голосов
/ 13 октября 2018

Я нашел решение последней ошибки: это была версия драйвера postgresql.

0 голосов
/ 13 октября 2018

Я допустил небольшую ошибку в своем посте.Значение jndi: value = "java: jdbc / mydb" (я его уже редактировал).

Я внес изменение в SpringDataJPAContext.xml (я добавил "comp / env" и удалил префикс "jdbc ") ... и я больше не получаю ту же ошибку.Теперь у меня есть другая ошибка:

ERROR o.s.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [SpringDataJPAContext.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.postgresql.jdbc3.Jdbc3Connection.isValid(I)Z
0 голосов
/ 13 октября 2018

SpringDataJPAContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:tx="http://www.springframework.org/schema/tx"
             xmlns="http://www.springframework.org/schema/data/jpa"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
                                http://www.springframework.org/schema/beans/spring-beans.xsd
                                http://www.springframework.org/schema/data/jpa
                                http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
                                http://www.springframework.org/schema/tx
                                http://www.springframework.org/schema/tx/spring-tx.xsd">

    <repositories base-package="cl.cgr.sistradoc.repository" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager"/>

    <beans:bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <beans:property name="jndiName" value="java:comp/env/sistradocgi" />
    </beans:bean>
    <beans:bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="persistenceUnitName" value="cgrPU" /> <!-- agregando configuraciones custom repository Lorenzo  -->
        <beans:property name="packagesToScan" value="cl.cgr.sistradoc.entity" />
        <beans:property name="jpaVendorAdapter">
            <beans:bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </beans:property>
    </beans:bean>

    <beans:bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <beans:property name="entityManagerFactory" ref="entityManagerFactory" />
    </beans:bean>
    <tx:annotation-driven />
</beans:beans>
0 голосов
/ 13 октября 2018

Я хотел бы предложить несколько изменений и сообщить, что это работает:

  1. Удалить тег <mapped-name>java:mydb </mapped-name> из файла web.xml

  2. Просто используйте <beans: property name="jndiName" value="mydb"/> в xml данных пружины или укажите полное значение jndi как value="java:comp/env/mydb"

Исключение, которое вы вставили, выглядит странным для меня."[jdbc / mydb]" tomcat ищет ветку дерева jdbc, а затем mydb внутри нее, что может быть связано с префиксом сопоставленного имени и источника данных xml "jboss".В идеале он должен был искать «mydb» непосредственно в дереве jndi.

Пожалуйста, дайте мне знать результаты.

...