使用Oracle WebLogic创建部署计划

创建部署计划

部署计划是JSR-88部署标准的一部分,尽管在该标准中未明确说明。 部署计划是一个XML文档,用于定义自定义WebLogic Server部署环境。 此配置可用于覆盖在应用程序归档文件中定义的特定设置。

有许多原因可能导致您不希望修改应用程序存档的原因,其中之一就是测试。 例如,如果您已经成功完成了对特定版本应用程序的测试,则希望在环境之间保持应用程序存档不变,这样您就可以更有信心地确定应用程序在多个环境中的行为与所推广的相同。 另一个原因可能是可移植性。 您可以拥有一个不带专有部署描述符的通用JEE应用程序存档,并将所有这些专有部署描述符值放在该存档之外。

创建部署计划有几种选择:首先,将环境设置为包括WLS类路径:

C:\wls1211_dev\user_projects\domains\base_domain\bin>setDomainEnv.cmd

然后,您可以使用PlanGenerator实用程序为您的应用程序创建部署计划

java weblogic.PlanGenerator -all WLSDemo.earGenerating plan for application WLSDemo.ear
Export option is: all
Exporting properties...
Saving plan to C:\wls1211_dev\user_projects\domains\base_domain\bin\plan.xml...
<8-ago-2012 11.52.48 CEST> <Info> <J2EE Deployment SPI> <BEA-260072> <Saved configuration for application, WLSDemo.ear>

让我们检查文件plan.xml ,其中包含所有应用程序特定的设置。 我们不会在此处包含整个plan.xml文件,这非常冗长; 但是,我们将作为示例介绍如何自定义其中包含的一些参数。

部署计划是一个XML文件,该文件基本上使用唯一名称定义一些变量,并将变量值分配给自定义部署描述符的特定元素。 使用XPath表达式来引用特定的XML元素。

示例:定制Web应用程序根上下文

打开文件plan.xml文件,并使用文本编辑器进行编辑。 接下来,找到以下<variable>元素:

<variable><name>WeblogicWebApp_ContextRoots_xxxxxxxxxxxxxx</name><value xsi:nil="true"></value>
</variable>

请注意,xxxxxxxxxxxxxx实际上将是计划生成器创建的唯一标识符,以便为变量定义唯一名称。 在下面的示例中,我们将其替换为有意义的名称,该名称将通过文件进行引用。

现在,编辑上面的代码段部分,使其如下所示:

<variable><name>WeblogicWebApp_CustomContext</name><value>/newcontext</value>
</variable>

在文件的下方,找到<variable-assignment>元素,该元素指向“ weblogic-web-app / context-root” XPath表达式,并将变量名称更改为:“ WeblogicWebApp_CustomContext”,以使其与您的变量匹配:

<variable-assignment><name>WeblogicWebApp_CustomContext</name><xpath>weblogic-web-app/context-root</xpath><origin>planbased</origin><operation>replace</operation>
</variable-assignment>

还要注意,我们在其中包括了一个附加的“替换”操作,该操作显然将用新的替换默认上下文(“ / newcontext”)。

保存plan.xml文件。 我们刚刚所做的是重写WebLogic Server Web应用程序部署描述符weblogic.xml中的context-root元素。 新的上下文根是“ newcontext”。

很好,现在切换到管理控制台,然后从“ 部署”菜单中选择更新应用程序。

单击与部署计划路径关联的“ 更改路径”按钮,如下所示:

1个

现在,为新的plan.xml文件选择单选按钮,然后单击“下一步”。 如有必要,请使用“当前位置”字段旁边的超链接导航到<APP_HOME>目录。

2

在下一个屏幕中,选择单选按钮“使用以下部署文件重新部署此应用程序”。 然后单击完成。 现在,应该可以使用新的Web上下文(newcontext)访问您的应用程序。

示例:定制JDBC模块

我们介绍的第一个示例是创建更多自定义项的良好起点。 一个实际的示例可能是提供一个部署计划,该计划将更新应用程序一部分JDBC模块中包含的信息。 您的应用程序可能会分布在使用不同数据库的不同环境(开发/生产/测试)中。 例如:

<wls:resource-description><wls:res-ref-name>JDBCOracleModule</wls:res-ref-name><wls:jndi-name>jdbc/OracleModule</wls:jndi-name>
</wls:resource-description>

在此示例中,如果要更改绑定JDBC模块的JNDI名称,则需要修改定义JNDI名称的XML描述符。

通过使用部署计划,您可以简单地在plan.xml中修改JDBC资源的值并相应地更新应用程序。 假设我们要在将应用程序移植到生产环境中时,通过将其从“ jdbc / OracleModule ”更改为“ jdbc / ProductionOracleModule”来更改示例TestEJB的JNDI绑定

首先使用PlanGenerator实用程序生成plan.xml部署计划。 现在打开您的plan.xml并在变量中为数据源设置value元素:

<variable>    <name>MyDataSource_binding</name>   <value>jdbc/ProductionOracleModule</value>
</variable>

需要在相应的变量分配节中引用上述变量名(“ MyDataSource_binding”),该节为您的资源设置正确的JNDI绑定:

<module-override><module-name>TestEJB.jar</module-name>. . . . .<uri>META-INF/weblogic-ejb-jar.xml</uri><variable-assignment><name>MyDataSource_binding</name><xpath>/weblogic-ejb-jar/weblogic-enterprise-bean/[ejb-name="TestEJB"]/resource-description/[res-ref-name="MyDataSource"]/jndi-name</xpath></variable-assignment></module-descriptor>
</module-override>

如果在Web应用程序中也引用了数据源,比如说将其注入到Servlet中,该怎么办? 别担心! 您还可以为Web模块提供模块替代 ; 在这种情况下,我们将覆盖weblogic.xml:

<module-override><module-name>wls.war</module-name>. . . .<uri>WEB-INF/weblogic.xml</uri><variable-assignment><name>MyDataSource_binding</name><xpath>/weblogic-web-app/resource-description/[res-ref-name="jdbc/ ProductionOracleModule "]/res-ref-name</xpath><origin>planbased</origin></variable-assignment></module-descriptor>
</module-override>

使用管理控制台生成部署计划

如果您不想使用命令行来生成部署计划,则可以使用管理控制台来执行此步骤。 从“部署”选项导航到您的应用程序:

3

然后单击您的应用程序,然后移至“ 配置”选项卡。 在屏幕的下部,您将能够更改应用程序设置,例如上下文根路径。 将此值更改为新的上下文路径并保存。

4

修改配置的某些值后,部署计划助手将启动,要求您将这些更改保存在部署计划中。 您要做的就是为文件提供一个方便的位置(强烈建议使用名称plan.xml )。

5

最后一步将是自定义plan.xml文件,如我们先前所示,并使用该文件更新您的应用程序。

http://www.itbuzzpress.com/ 此摘录摘自“ 企业应用服务器指南 ”,该实用手册是易于理解的实用指南,讨论了Java EE市场中的三个主要行业应用服务器: Oracle WeblogicJBoss EAPIBM Websphere 。 本书包括600页方便的食谱,有望以令人愉悦的风格教您有关这三种应用服务器的全部知识,并包括它们之间的详细比较。

翻译自: https://www.javacodegeeks.com/2013/10/creating-deployment-plans-with-oracle-weblogic.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一个前端架构的想法

前端&#xff0c;真的是让我哭笑不得的职业&#xff0c;从几年前作为打酱油的理想职业到现在的热门职业&#xff0c;无疑在这个过程中&#xff0c;门槛变高了&#xff0c;而且还是非常高。一大堆的框架和库&#xff0c;像什么vue啦、react啦、angular啦、webpack啦等等等等。让…

java文件解压文件_java 文件解压缩

直接上代码&#xff1a;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.I…

JAVA 遍历Map对象

方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。 Map<Integer, Integer> map new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key " …

sol - 0x60,61,62

[例题]走廊泼水节 设当前扫描到边x,y&#xff0c;长度为z&#xff0c;x所处的并查集为Sx&#xff0c;y所处的并查集为Sy&#xff1b; 对于任意u属于Sx&#xff0c;v属于Sy&#xff0c;我们可以知道u&#xff0c;v之间必连一条边 但是我们要在保证x,y之间的边属于唯一最小生成树…

将Spring Bean注入非托管对象

依赖注入带来的好处可能会上瘾。 使用注入配置应用程序结构比手动完成所有解析要容易得多。 当我们有一些在容器外部实例化的非托管类时&#xff0c;例如在Vaadin UI组件或JPA实体等其他框架中&#xff0c;它们是很难被退出的。 当我们使用域驱动设计时&#xff0c;后者尤其重要…

java 编程原理_Java网络编程 -- 网络编程基础原理

Hello&#xff0c;今天记录下 Java网络编程 --> 网络编程基础原理。一起学习&#xff0c;一起进步。继续沉淀&#xff0c;慢慢强大。希望这文章对您有帮助。若有写的不好的地方&#xff0c;欢迎评论给建议哈&#xff01;初写博客不久&#xff0c;我是杨展浩。这是我的第十五…

JavaScript基础之--- 深拷贝与浅拷贝

理解深拷贝和浅拷贝之前&#xff0c;先来看一下JavaScript的数据类型。 1、基本类型和引用类型 //案例1 var num1 1, num2 num1; console.log(num1) //1 console.log(num2) //1 num2 2; //修改num2 console.log(num1) //1 console.log(num2) //2 //案例2 var obj1 {x: 1, …

vue菜鸟从业记:完成项目最后一公里之真机测试和打包上线

最近我朋友王小闰他们公司的项目开发已经进入收尾阶段&#xff0c;前后端并行开发的差不多了&#xff0c;联调也调过了&#xff0c;上篇文章里也讲到了&#xff0c;所谓联调&#xff0c;就仿佛在说“我也不知道我的接口文档写的对不对&#xff0c;我们验证一下吧&#xff1f;我…

血淋淋的事实告诉你:你为什么不应该在JS文件中保存敏感信息

在JavaScript文件中存储敏感数据&#xff0c;不仅是一种错误的实践方式&#xff0c;而且还是一种非常危险的行为&#xff0c;长期以来大家都知道这一点。 而原因也非常简单&#xff0c;我们可以假设你为你的用户动态生成了一个包含API密钥的JavaScript文件&#xff1a; apiCall…

使用Infinispan进行Camel的事务性缓存

不久前&#xff0c;我为Camel 创建了Redis连接器。 Redis是很棒的键值存储&#xff08;还有更多&#xff09;&#xff0c;但是随后我需要一个在与Camel相同的JVM中运行的缓存&#xff0c;并注意到Infinispan已切换到ASL v2 。 Camel中已经有其他用于在JVM上进行缓存的连接器&am…

“景驰科技杯”2018年华南理工大学程序设计竞赛 A. 欧洲爆破(思维+期望+状压DP)...

题目链接&#xff1a;https://www.nowcoder.com/acm/contest/94/A 题意&#xff1a;在一个二维平面上有 n 个炸弹&#xff0c;每个炸弹有一个坐标和爆炸半径&#xff0c;引爆它之后在其半径范围内的炸弹也会爆炸&#xff0c;每个炸弹最多爆炸一次&#xff0c;每次随机选一个未引…

java 日期是否合法_检测日期字符串是否为合法(java版)

1 /**2 * 检测日期字符串是否为合法3 *paramdateStr4 *paramformat5 *return6 */7 public static final boolean checkDateFormat(String dateStr,String format) throwsNumberFormatException{8 if(dateStr null || "".equals(dateStr) ) return false;9 if(dateSt…

从零开始搭建一个vue.js的脚手架

在谷歌工作的时候&#xff0c;我们要做很多界面的原型&#xff0c;要求快速上手&#xff0c;灵活运用&#xff0c;当时用的一些现有框架&#xff0c;比如angular&#xff0c;太笨重了——尤雨溪&#xff08;Vue.js 作者&#xff09; vue.js是现在一个很火的前端框架&#xff0c…

更安全的Web通信HTTPS

1. HTTP协议存在的问题 阅读本篇需要对HTTP协议有最基本的了解。 借用《图解密码技术》里的图片&#xff0c;我们以如下一个购物场景开始介绍&#xff1a; 在网购过程中&#xff0c;如果使用纯粹的HTTP协议&#xff0c;那么用户的账号密码&#xff0c;信用卡&#xff0c;银行卡…

Java中的Memento设计模式-示例教程

记忆模式是行为设计模式之一 。 当我们要保存对象的状态以便以后可以恢复时&#xff0c;可以使用Memento设计模式。 记忆模式用于以这种方式实现该目的&#xff0c;即在对象外部无法访问该对象的已保存状态数据&#xff0c;从而保护了已保存状态数据的完整性。 Memento模式通过…

CSS入门指南——页面的水平居中

我们经常看到这样的网页&#xff0c;即内容水平居中在屏幕中间&#xff0c;左右留白。我们来给这样的布局起个名字——水平居中布局 其实要实现这样的布局十分简单&#xff0c;即给中间部分一个宽度&#xff0c;设置margin左右值为auto,如&#xff0c;中间部分class"main&…

python控制台执行代码字符串_编写Python脚本以使用控制台命令执行

研究是在底部&#xff0c;阅读之前。。。谢谢。在我必须编写一个运行SQL查询的Python脚本。我创建了一个主类&#xff0c;名为SQLQuery。每个SQLQuery实例表示一个查询。脚本的结构必须如下所示&#xff1a;class SQLQuery(object):def __init___(self, string_myQuery)...inst…

Linux Tools Quick Tutorial 学习记录

总体 书籍链接 find命令 查找大于多少的文件 find / -type f -size 5M | xargs ls -lh | awk {print $5, $9} | ls -lrt

mysql explain的使用

一、explain返回各列的含义&#xff1a; 1、table&#xff1a;显示这一行的数据是关于那张表的 2、type&#xff1a;重要的列&#xff0c;显示连接使用了何种类型&#xff0c;从最好到最差的连接类型为const、eq_reg、ref、range、index、ALL 3、possible_keys&#xff1a;显示…

使用 Canvas 生成公众号头图

熟悉“前端晚自修”的朋友们应该知道&#xff0c;我们每期的头图除了上面的文字随着每期变动以外&#xff0c;几乎是一模一样的&#xff08;因为太懒了~&#xff09;。这个头图虽然丑了一点&#xff0c;但是也还说的过去&#xff0c;毕竟是我倾尽毕生艺术细胞拼出来的&#xff…