首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

intellij idea施用tomcat开发时自动部署jndi数据源

2012-12-20 
intellij idea使用tomcat开发时自动部署jndi数据源通常,如果需要在应用中使用tomcat的jndi数据源,需要修改

intellij idea使用tomcat开发时自动部署jndi数据源

通常,如果需要在应用中使用tomcat的jndi数据源,需要修改context配置,例如
intellij idea施用tomcat开发时自动部署jndi数据源<?xml?version="1.0"?encoding="UTF-8"?>
intellij idea施用tomcat开发时自动部署jndi数据源<Context?path="/app"?docBase="E:\appweb">
intellij idea施用tomcat开发时自动部署jndi数据源??<Resource?name="jndi/ds"?auth="Container"?type="javax.sql.DataSource"?driverClassName="oracle.jdbc.OracleDriver"?url="jdbc:oracle:thin:@192.168.1.3:1522:orcl"?username="111"?password="222"?maxActive="20"?maxIdle="10"?maxWait="-1"?/>
intellij idea施用tomcat开发时自动部署jndi数据源</Context>但是使用intellij idea开发时,tomcat插件会自动维护该文件,为此我们对tomcat插件可以做些适当的修改。
1、设计目标
目标:在deploy部署时,自动检查web程序根目录,也就是docBase/META-INF/jndi-resource.xml文件是否存在,如果有,则该文件定义的recource资源自动加入context节点中部署
这样程序就可以很方便的使用tomcat jndi数据源了,如果切换当生产环境,例如weblogic,也不用修改什么。
2、实现
修改C:\Program Files\JetBrains\IntelliJ IDEA 9.0.1\lib\src\src_tomcat.zip中的org.jetbrains.idea.tomcat.TomcatDeploymentProviderw文件
a)增加一个方法
?1intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源private?static?void?addAppResource(Element?ctx,String?deploymentPath)intellij idea施用tomcat开发时自动部署jndi数据源{
?2intellij idea施用tomcat开发时自动部署jndi数据源????????File?f?=?new?File(deploymentPath+File.separator+"META-INF"+File.separator+"jndi-resource.xml");
?3intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源????????if?(f.exists())?intellij idea施用tomcat开发时自动部署jndi数据源{
?4intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源????????????try?intellij idea施用tomcat开发时自动部署jndi数据源{
?5intellij idea施用tomcat开发时自动部署jndi数据源????????????????if(ctx.getContentSize()>0)?return;
?6intellij idea施用tomcat开发时自动部署jndi数据源????????????????Document?doc?=?TomcatUtil.loadXMLFile(f.getPath());//builder.build(new?FileInputStream(f));
?7intellij idea施用tomcat开发时自动部署jndi数据源????????????????List?nodes=doc.getRootElement().getChildren("Resource");
?8intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源????????????????for(int?i=0;i<nodes.size();i++)intellij idea施用tomcat开发时自动部署jndi数据源{
?9intellij idea施用tomcat开发时自动部署jndi数据源????????????????????Element?n=(Element)nodes.get(i);
10intellij idea施用tomcat开发时自动部署jndi数据源????????????????????ctx.addContent((Element)n.clone());
11intellij idea施用tomcat开发时自动部署jndi数据源????????????????????System.out.println("Load?JNDI?resource?from?"+f.getPath()+".");
12intellij idea施用tomcat开发时自动部署jndi数据源????????????????}
13intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源????????????}?catch?(Exception?ex)?intellij idea施用tomcat开发时自动部署jndi数据源{
14intellij idea施用tomcat开发时自动部署jndi数据源????????????????LOG.info("加载应用的资源配置错误:"+ex.getMessage());
15intellij idea施用tomcat开发时自动部署jndi数据源????????????}
16intellij idea施用tomcat开发时自动部署jndi数据源????????}
17intellij idea施用tomcat开发时自动部署jndi数据源????}b)修改调用
?1intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源?private?static?void?addApplicationContext(TomcatModuleDeploymentModel?tomcatModuleDeploymentModel)?throws?ExecutionException?intellij idea施用tomcat开发时自动部署jndi数据源{
?2intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源????try?intellij idea施用tomcat开发时自动部署jndi数据源{
?3intellij idea施用tomcat开发时自动部署jndi数据源??????TomcatModel?serverModel?=?(TomcatModel)tomcatModuleDeploymentModel.getServerModel();
?4intellij idea施用tomcat开发时自动部署jndi数据源??????String?contextPath?=?getContextPath(tomcatModuleDeploymentModel);
?5intellij idea施用tomcat开发时自动部署jndi数据源
?6intellij idea施用tomcat开发时自动部署jndi数据源??????Element?contextElement?=?TomcatUtil.findContextElement(serverModel.getSourceBaseDirectoryPath(),?contextPath,?tomcatModuleDeploymentModel);
?7intellij idea施用tomcat开发时自动部署jndi数据源
?8intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源??????if?(contextElement?==?null)?intellij idea施用tomcat开发时自动部署jndi数据源{
?9intellij idea施用tomcat开发时自动部署jndi数据源????????contextElement?=?new?Element(CONTEXT_ELEMENT_NAME);
10intellij idea施用tomcat开发时自动部署jndi数据源????????//contextElement.addContent((Comment)TomcatConstants.CONTEXT_COMMENT.clone());
11intellij idea施用tomcat开发时自动部署jndi数据源??????}
12intellij idea施用tomcat开发时自动部署jndi数据源
13intellij idea施用tomcat开发时自动部署jndi数据源??????final?String?deploymentPath?=?TomcatUtil.getDeploymentPath(tomcatModuleDeploymentModel);
14intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源??????if?(deploymentPath?==?null)?intellij idea施用tomcat开发时自动部署jndi数据源{
15intellij idea施用tomcat开发时自动部署jndi数据源????????throw?new?ExecutionException(TomcatBundle.message("exception.text.neither.exploded.directory.nor.jar.file.configured"));
16intellij idea施用tomcat开发时自动部署jndi数据源??????}
17intellij idea施用tomcat开发时自动部署jndi数据源
18intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源??????if?(!new?File(deploymentPath).exists())?intellij idea施用tomcat开发时自动部署jndi数据源{
19intellij idea施用tomcat开发时自动部署jndi数据源????????throw?new?ExecutionException(TomcatBundle.message("exception.text.file.not.found.for.web.module",?deploymentPath));
20intellij idea施用tomcat开发时自动部署jndi数据源??????}
21intellij idea施用tomcat开发时自动部署jndi数据源
22intellij idea施用tomcat开发时自动部署jndi数据源??????//remove?unpacked?WAR?directory
23intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源??????if(DeploymentSource.FROM_JAR?==?tomcatModuleDeploymentModel.getDeploymentSource())?intellij idea施用tomcat开发时自动部署jndi数据源{
24intellij idea施用tomcat开发时自动部署jndi数据源????????final?String?contextXML?=?TomcatUtil.getContextXML(serverModel.getSourceBaseDirectoryPath(),?contextPath);
25intellij idea施用tomcat开发时自动部署jndi数据源????????final?String?xmlName?=?new?File(contextXML).getName();
26intellij idea施用tomcat开发时自动部署jndi数据源????????final?String?dirName?=?xmlName.substring(0,?xmlName.length()?-?4);
27intellij idea施用tomcat开发时自动部署jndi数据源
28intellij idea施用tomcat开发时自动部署jndi数据源????????final?Document?serverXmlDocument?=?TomcatUtil.loadXMLFile(TomcatUtil.serverXML(serverModel.getBaseDirectoryPath()));
29intellij idea施用tomcat开发时自动部署jndi数据源????????final?Element?localHost?=?TomcatUtil.findLocalHost(serverXmlDocument.getRootElement());
30intellij idea施用tomcat开发时自动部署jndi数据源
31intellij idea施用tomcat开发时自动部署jndi数据源????????final?String?appBase?=?localHost.getAttributeValue(APP_BASE_ATTR);
32intellij idea施用tomcat开发时自动部署jndi数据源????????FileUtil.delete(new?File(appBase,?dirName));
33intellij idea施用tomcat开发时自动部署jndi数据源??????}
34intellij idea施用tomcat开发时自动部署jndi数据源
35intellij idea施用tomcat开发时自动部署jndi数据源??????contextElement.setAttribute(PATH_ATTR,?contextPath);
36intellij idea施用tomcat开发时自动部署jndi数据源??????contextElement.setAttribute(DOC_BASE_ATTR,?deploymentPath);
37intellij idea施用tomcat开发时自动部署jndi数据源
38intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源??????if(serverModel.versionHigher(TomcatPersistentData.VERSION50))?intellij idea施用tomcat开发时自动部署jndi数据源{
39intellij idea施用tomcat开发时自动部署jndi数据源????????final?String?contextXML?=?TomcatUtil.getContextXML(serverModel.getBaseDirectoryPath(),?contextPath);
40intellij idea施用tomcat开发时自动部署jndi数据源????????final?File?targetContextXmlFile?=?new?File(contextXML);
41intellij idea施用tomcat开发时自动部署jndi数据源????????targetContextXmlFile.getParentFile().mkdirs();
42intellij idea施用tomcat开发时自动部署jndi数据源
43intellij idea施用tomcat开发时自动部署jndi数据源????????final?Document?xmlDocument;
44intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源????????if(contextElement.getDocument()?!=?null?&&?contextElement.isRootElement())?intellij idea施用tomcat开发时自动部署jndi数据源{
45intellij idea施用tomcat开发时自动部署jndi数据源??????????xmlDocument?=?(Document)contextElement.getDocument().clone();
46intellij idea施用tomcat开发时自动部署jndi数据源????????}
47intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源????????elseintellij idea施用tomcat开发时自动部署jndi数据源{
48intellij idea施用tomcat开发时自动部署jndi数据源??????????xmlDocument?=?new?Document();
49intellij idea施用tomcat开发时自动部署jndi数据源??????????xmlDocument.setRootElement((Element)contextElement.clone());
50intellij idea施用tomcat开发时自动部署jndi数据源????????}
51intellij idea施用tomcat开发时自动部署jndi数据源????????//新增调用方法,处理额外的resource
52intellij idea施用tomcat开发时自动部署jndi数据源????????addAppResource(xmlDocument.getRootElement(),deploymentPath);
53intellij idea施用tomcat开发时自动部署jndi数据源????????TomcatUtil.saveXMLFile(xmlDocument,?targetContextXmlFile.getPath(),?true);
54intellij idea施用tomcat开发时自动部署jndi数据源??????}
55intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源??????else?intellij idea施用tomcat开发时自动部署jndi数据源{
56intellij idea施用tomcat开发时自动部署jndi数据源????????String?root?=?FileUtil.toSystemDependentName(TomcatUtil.getGeneratedFilesPath(serverModel));
57intellij idea施用tomcat开发时自动部署jndi数据源????????String?scratchdir?=?root?+?File.separator?+?TomcatConstants.CATALINA_WORK_DIRECTORY_NAME?+?File.separator
58intellij idea施用tomcat开发时自动部署jndi数据源????????????????????????????+?new?File(TomcatUtil.getContextXML(serverModel.getBaseDirectoryPath(),?contextPath)).getName();
59intellij idea施用tomcat开发时自动部署jndi数据源????????new?File(scratchdir).mkdirs();
60intellij idea施用tomcat开发时自动部署jndi数据源
61intellij idea施用tomcat开发时自动部署jndi数据源????????contextElement.setAttribute(WORKDIR_ATTR,?scratchdir);
62intellij idea施用tomcat开发时自动部署jndi数据源
63intellij idea施用tomcat开发时自动部署jndi数据源????????addOrRemoveContextElementInServerXml(serverModel,?contextPath,?contextElement);
64intellij idea施用tomcat开发时自动部署jndi数据源??????}
65intellij idea施用tomcat开发时自动部署jndi数据源????}
66intellij idea施用tomcat开发时自动部署jndi数据源intellij idea施用tomcat开发时自动部署jndi数据源????catch?(RuntimeConfigurationException?e)?intellij idea施用tomcat开发时自动部署jndi数据源{
67intellij idea施用tomcat开发时自动部署jndi数据源??????throw?new?ExecutionException(e.getMessage());
68intellij idea施用tomcat开发时自动部署jndi数据源????}
69intellij idea施用tomcat开发时自动部署jndi数据源??}
编译源代码,使用如下命令行
javac -classpath "tomcat.jar;C:\Program Files\JetBrains\IntelliJ IDEA 9.0.1\lib\idea.jar;C:\Program Files\JetBrains\IntelliJ IDEA 9.0.1\lib\openapi.jar;C:\Program Files\JetBrains\IntelliJ IDEA 9.0.1\lib\jdom.jar;C:\Program Files\JetBrains\IntelliJ IDEA 9.0.1\plugins\JavaEE\lib\javaee-openapi.jar;C:\Program Files\JetBrains\IntelliJ IDEA 9.0.1\lib\util.jar;C:\Program Files\JetBrains\IntelliJ IDEA 9.0.1\lib\annotations.jar;C:\Program Files\JetBrains\IntelliJ IDEA 9.0.1\plugins\DatabaseSupport\lib\database-openapi.jar" -target 1.5 -source 1.5 *.java

编译完成之后,将新的class覆盖到tomcat.jar中就可以了。

3、测试
web应用的根目录加入META-INF/jndi-resource.xml,内容如下:
intellij idea施用tomcat开发时自动部署jndi数据源<r>
intellij idea施用tomcat开发时自动部署jndi数据源<Resource?name="jndi/ds"?auth="Container"?type="javax.sql.DataSource"?driverClassName="oracle.jdbc.OracleDriver"?url="jdbc:oracle:thin:@192.168.1.3:1522:orcl"?username="111"?password="222"?maxActive="20"?maxIdle="10"?maxWait="-1"?/>
intellij idea施用tomcat开发时自动部署jndi数据源</r>

热点排行