我仍然无法理解这件事:
这是我的项目的样子:
--app
--app-core (spring)
--app-model (pojo)
--app-service (jersey) >> final package as war (dependencies (appcore+appmodel))
现在我的applicationContext.xml应该在哪里? Spring的依赖性只适用于app-core ???? ...
更新
app-core(spring)有applicationContext.xml,知道我想将JNDI与嵌入式tomcat(tomcat-maven-plugin)一起使用。
在webapp / META-INF中创建了context.xml
,如下所示: -
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="nweb" path="/nweb" reloadable="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/TestDS" auth="Container"
type="javax.sql.DataSource"
driverClass="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=TestData"
username="sa" password=""/>
</Context>
..
我的applicationContext.xml: -
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/TestDS"></property>
</bean>
</beans>
以上我得到以下错误:
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: javax.naming.NameNotFoundException: Name TestDSis not bound in this
Context
at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:152)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
at
如果遗漏了任何建议,可以提出任何建议吗?
答案 0 :(得分:2)
通常,您将在web.xml上为根应用程序上下文配置ContextLoaderListener:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
此类使用param值contextConfigLocation - 您可以从中明确指定applicationContext.xml的位置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>
答案 1 :(得分:0)
试
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<contextFile>webapp/META-INF/context.xml</contextFile>
</configuration>
</plugin>
答案 2 :(得分:0)
尝试<property name="jndiName" value="java:comp/env/TestDS"></property>
答案 3 :(得分:0)
如果您使用的是嵌入式tomcat 7,那么您应该调用
tomcat.enableNaming();
答案 4 :(得分:0)
您有一个使用JNDI here的应用程序。我一直在PaaS上使用JNDI,他们解释了如何在应用程序和数据库之间进行绑定。您可以获得有关此tutorial的更多详细信息。
基本上你需要把它放在你的datasource.xml文件中:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/mydb" resource-ref="true"
expected-type="javax.sql.DataSource"/>
然后,在你的Tomcat服务器上,你可以看到我在链接上的Spring教程中看到的几种可能性。最简单的方法是使用$ CATALINA_HOME / conf / context.xml并输入类似的内容。
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" maxActive="20" maxIdle="10" minIdle="1" name="jdbc/mydb" password="dbUserPassword" testOnBorrow="true" testWhileIdle="true" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/dbName" username="dbUserName" validationInterval="5000" validationQuery="select 1"/>