1,在Context.xml文件内加
loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"
useSystemClassLoaderAsParent="false"/>
2, LocalContainerEntityManagerFactoryBean的loadTimeWeaver设置成InstrumentationLoadTimeWeaver,如下
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
/>
3,COPY 到spring-agent.jar,spring-tomcat-weaver.jar到TOMCAT的server\lib.
4,TOMCAT的bin文件夹下的catalina.bat文件内增加下面一行:
set JAVA_OPTS=%JAVA_OPTS% -javaagent:"%CATALINA_BASE%\server\lib\spring-agent.jar"
我把这行代码加在echo Using CATALINA_BASE: %CATALINA_BASE%前 。
5,一般我们喜欢用Eclipse下,Server配置成Tomcat进行开发,我们也需要相应的spring-agent.jar。
否则每次启动Tomcat的时候就会报
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' ......
Invocation of init method failed; nested exception is java.lang.IllegalStateException:
Must start with Java agent to use InstrumentationLoadTimeWeaver. See Spring documentation.
在Eclipse菜单Run->Run Configurations->Apache Tomcat-->Tomcat v5.x Server ->Arguments的Vm argument输入框
下加 -javaagent:"E:\soft\apache-tomcat-5.5.27\server\lib\spring-agent.jar" 一行,(E:\soft\apache-tomcat-5.5.27是我的
Tomcat安装路径)
6,如果我们使用Tomcat的JNDI获取DataSource的话,我们需要在
WebContent/META-INF/Context.xml文件内配置数据源
maxActive="100" maxIdle="30" maxWait="10000" username="xxx" password="xxxx"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/dbname" />
我没有采用在Server.xml配置数据源,而是在Context.xml配置数据源,有几点好处:
1),发布到Tomcat的环境,启动Tomcat的时候会自动在Tomcat的conf/Catalina/localhost产生xxx.xml文件(xxx代码
我的应用程序名),文件的内容就是在Context.xml的内容。
2),在Eclipse开发环境下,每次Publish时,会自动把Context.xml文件的内容复制到xxx\.metadata\.plugins\org.eclipse.wst.server.core\tmpX\conf\server.xml中
7,另外一个很重要的问题是persistence.xml放在src/META-INF下,而Context.xml放在WebContent/META-INF/目录下.
我一开始把Context.xml和persistence.xml都放在src/META-INF下,导致程序找不到数据源,报
Cannot create JDBC driver of class '' for connect URL 'null',
以及java.sql.SQLException: No suitable driver的错误
阅读(2461) | 评论(1) | 转发(0) |