我在tomcat中部署应用程序(war文件)时遇到问题。
应用程序已在web.xml和SpringDataJPAContext.xml中定义了对JNDI数据源的引用(应用程序在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>
在conf / 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]."
我尝试了不同的配置,但是错误不断出现。
答案 0 :(得分:0)
我会提出一些更改,让我知道它的工作原理:
从web.xml中删除<mapped-name>java:mydb </mapped-name>
标记
只需在spring数据xml中使用<beans: property name="jndiName" value="mydb"/>
否则将完整的jndi设为value="java:comp/env/mydb"
您粘贴的异常对我来说很奇怪。 “ [jdbc / mydb]” tomcat正在搜索树枝jdbc,然后在其中搜索mydb,这可能是由于映射名称和spring data xml“ jboss”前缀所致。 理想情况下,它应该直接在jndi树中搜索“ mydb”。
请让我知道结果。
答案 1 :(得分:0)
我在帖子中犯了一个小错误。 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
答案 2 :(得分:0)
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>
答案 3 :(得分:0)
我找到了最后一个错误的解决方案:它是postgresql驱动程序的版本。