系统升级到Windows 10后有一阵子没用Vmware,今天装了个新虚拟机,启动后发现虚拟机用桥接的方式拿不到IP地址。以为是用的Vmware Workstation 10版本过低的原因,重新装了个Vmware Workstation 12,结果更惨,桥接的网络服务压根就安装不成功。看来实在是有问题,只能求助Google,发现还真不少人碰到同样的问题。有微软社区的,也有Vmware社区的。

难道只能采用NAT模式来使用网络。做为一个多年习惯使用Bridge网络模式强迫症患者,让俺去用NAT实在是不能接受。在只要肯折腾,办法总比困难多的信念支持下,试验了接近1个小时,终于找到了把问题克服的方法。既然Windows不让安装程序去修改NIC接口,手动去修改呢?试试果然能行,步骤如下:

1.在Windows打开网络适配器,选择属性,打开属性窗口,点击“安装…”

网络属性

2. 在网络功能类型窗口选择服务,然后点“添加”

网络功能类型

3.选择要安装的网络服务,厂商选择Vmware Inc.,网络服务选择“Vmware Bridge Protocol”,点确定。

选择网络服务

4. 选择Vmware Workstation安装目录下的“vmnetbridge.dll”所在目录。

选择文件来源

5. 返回网络适配器属性窗口,确认Vmware Bridge Protocol已成功安装。

属性

6. 如果虚拟机正在运行,关闭虚拟机。打开虚拟网络编辑器,点击左下角的“还原默认设置”,把网络配置还原到默认值。

还原网络设置

7. 此时应该会显示桥接方式出来。强迫症的人伤不起,俺还是把桥接设置成唯一可选的网络连接方式。

bridge

8.重新启动虚拟机,此时应该可以看到虚拟机已正常连接网络,并成功拿到IP地址。

getip

 

事先声明,谁再跟俺提说拿Macbook装Windows俺就抽谁。才不会跟你说弄一台破旧硬盘分区损坏导致系统进不去,俺弄了个通宵才搞好。

从来没有想像到过有一天会这样折腾,一个朋友的MBA磁盘分区误操作损坏,没法进入系统。之前电脑买回来后也不知道让人怎么弄,Apple Recovery之类的分区均进不去,想了N多招都不管用,只好出大杀器,重装系统。在网上找啊找资料,发现大部分文章都很傻,写着怎么在Macbook上安装windows均假设OS X系统是完好的,然后在同一台电脑上安装windows,很少有描述在另外一台电脑上安装的。因为朋友的电脑第二天办公要用,只好用笨办法,先安装OS X再安装Windows。

1.制作OS X安装引导U盘

如果没有OS X安装程序,自行到APP Store下载。 Jeet比较好运,自己的MBA上下载了OS X El Capitan的升级程序,但因为忙一直没有升级,所以节省了大量的下载时间。准备一只4GB以上的U盘或移动硬盘,利用[highlight dark=”no”]createinstallmedia[/highlight]命令创建USB启动引导盘。默认情况下,OS X El Capitan的安装文件位于[highlight dark=”no”]/Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia[/highlight]目录。

打开终端窗口,运行命令:[highlight dark=”no”]sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia –volume /Volumes/MyVolume –applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app[/highlight]

创建USB引导盘。注意把/Volumes/MyVolume替换你实际的卷名。提示是否格式化U盘,选是,然后会开始拷贝文件,等待文件复制完成。

2.利用制作好的引导U盘安装OS X

把制作好的U盘插入MBA,开机时按住Option键,选择U盘启动。OS X安装过程省略。

3. 破解OS X El Capitan的Bootcamp

装好OS X El Capitan后,兴冲冲的打开Bootcamp助理,准备安装Windows 7,结果一看傻眼了。

1

明明没有光驱的一MBA,居然提示俺说有光驱,没法制作Windows安装盘。不怕,网上一大堆bootcamp破解的秘技,照着做就是了。但是,在OS X El Capitan中,修改完Info.plist文件后,压根没办法替换Content包中的文件,不管怎么改chmod\chown都不行。天哪,不要这样玩俺啦。

又是一番Google,最后方知道原来是OS X El Capitan系统完整性保护(System Integrity Protection)的关系,导致没去替换Content包中的文件。重新以修复模式进入电脑(开机Command+R),打开终端命令窗口,运行[highlight dark=”no”]csrutil disable[/highlight],然后重启电脑。终于可以成功替换Info.plist。再打开终端,运行[highlight dark=”no”]sudo codesign -fs – /Applications/Utilities/Boot\ Camp\ Assistant.app/ –deep[/highlight]完成bootcamp破解。

再运行Bootcamp助理,终于可以制作Win7安装盘了。

2

4.总结

  • 如非必要,建议不要在MAC上安装Windows,想测试可以用虚拟机。
  • 备一个OS X安装启动盘很有必要。
  • Bootcamp工具的版本跟电脑型号、批次有关系,不同的机器需要不同的bootcamp工具,请仔细核对自己Macbook的版本选择相应的bootcamp工具。

感谢,本文图形来自极限苹果的这篇文章

Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件源代码解释器CPython遵循 GPL(GNU General Public License)协议[1]  。
Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

设计定位

Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理 念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果 面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为 比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到 Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师 倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如ZopeMnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和 工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很 多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004 年,Python 已在Google 内部使用,Google 召募许多 Python 高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we must,在操控硬件的场合使用 C++,在快速开发时候使用 Python。”

基本语法

Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和惊喜。

缩进

Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且 Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示 语句块的退出。缩进成为了语法的一部分。例如if语句:
1
2
3
4
if age<21:
    print("你不能买酒。")
    print("不过你能买口香糖。")
print("这句话处於if语句块的外面。")
注:上述例子为python 3.0版本的代码
根据PEP的规定,必须使用4个空格来表示每级缩进(不清楚4个空格的规定如何,在实际编写中可以自 定义空格数,但是要满足每级缩进间空格数相等)。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格 仅仅是为兼容很旧的的Python程序和某些有问题的编辑程序。

控制语句

if语句,当条件成立时运行语句块。经常与else, elif(相当于else if) 配合使用。
for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
while语句,当条件为真时,循环运行语句块。
try语句。与except,finally配合使用处理在程序运行中出现的异常情况。
class语句。用于定义类型
def语句。用于定义函数和类型的方法。
pass语句。表示此行为空,不运行任何操作。
assert语句。用于程序调适阶段时测试运行条件是否满足。
with语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加密,然后在语句块运行退出后解密。
yield语句。在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。
raise语句。制造一个错误。
import语句。导入一个模块或包。
from import语句。从包导入模块或从模块导入某个对象。
import as语句。将导入的对象赋值给一个变量。
in语句。判断一个对象是否在一个字符串/列表/元组里。

表达式

Python的表达式写法与C/C++类似。只是在某些写法有所差别。
主要的算术运算符与C/C++类似。+, -, *, /, //, **, ~, %分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取模。>>, <<表示右移和左移。&, |, ^表示二进制的AND, OR, XOR运算。>, <, ==, !=, <=, >=用于比较两个表达式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。在这些运算符里面,~, |, ^, &, <<, >>必须应用于整数。
Python使用and, or, not表示逻辑运算。
is, is not用于比较两个变量是否是同一个对象。in, not in用于判断一个对象是否属于另外一个对象。
Python支持“列表推导式”(list comprehension),比如计算0-9的平方和:
>>> sum(x * x for x in range(10))
285
Python使用lambda表示匿名函数。匿名函数体只能是表达式。比如:
>>> add=lambda x, y : x + y
>>> add(3,2)
5
Python使用y if cond else x表示条件表达式。意思是当cond为真时,表达式的值为y,否则表达式的值为x。相当于C++和Java里的cond?y:x。
Python区分列表(list)和元组(tuple)两种类型。list的写法是[1,2,3],而tuple的 写法是(1,2,3)。可以改变list中的元素,而不能改变tuple。在某些情况下,tuple的括号可以省略。tuple对于赋值语句有特殊的处 理。因此,可以同时赋值给多个变量,比如:
>>> x, y=1,2#同时给x,y赋值,最终结果:x=1, y=2
特别地,可以使用以下这种形式来交换两个变量的值:
>>> x, y=y, x #最终结果:y=1, x=2
Python使用'(单引号)和”(双引号)来表示字符串。与Perl、Unix Shell语言或者Ruby、Groovy等语言不一样,两种符号作用相同。一般地,如果字符串中出现了双引号,就使用单引号来表示字符串;反之则使用双 引号。如果都没有出现,就依个人喜好选择。出现在字符串中的\(反斜杠)被解释为特殊字符,比如\n表示换行符。表达式前加r指示Python不解释字符 串中出现的\。这种写法通常用于编写正则表达式或者Windows文件路径。
Python支持列表切割(list slices),可以取得完整列表的一部分。支持切割操作的类型有str, bytes, list, tuple等。它的语法是…[left:right]或者…[left:right:stride]。假定nums变量的值是[1, 3, 5, 7, 8, 13, 20],那么下面几个语句为真:
nums[2:5] == [5, 7, 8] 从下标为2的元素切割到下标为5的元素,但不包含下标为5的元素。
nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最后一个元素。
nums[:-3] == [1, 3, 5, 7] 从最开始的元素一直切割到倒数第3个元素。
nums[:] == [1, 3, 5, 7, 8, 13, 20] 返回所有元素。改变新的列表不会影响到nums。
nums[1:5:2] == [3, 5] 从下标为1的元素切割到下标为5的元素但不包含下标为5的元素,且步长为2。

函数

Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了增强代码的可读性,可以在函数后书写 “文档字符串”(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()打印出 函数的使用帮助。比如:
>>> def randint(a, b):
… “Return random integer in range [a, b], including both end points.”…
>>> help(randint)
Help on function randint in module __main__:
randint(a, b)
Return random integer inrange[a, b], including both end points.

使用Oracle Lab中的SitesDemo站点作为实验基础,配置短地址进行访问。并配置Apache服务器做为转发。

1.配置WebRoots

登录后台管理界面,进入Admin UI。选择“Admin”-“WebRoots”进行配置。如下图:

1

配置的root url为http://localhost:9080/cs/demo .注意最后的demo是任意配置的,可以起一个有意义的名称。在后面我们还需要使用到这个名字(配置到filter中)。

2.配置URL的模板

可以针对某些资产设置一个URL模板,这样可以自动生成对应的短地址URL,不用一个个的进行配置,减轻了工作量。

也可以不配置模板,自行在对应的资产上配置URL。

我们现在对Page建立一个URL模板,进入“Admin”-“Asset Types”-“Page”-“URL Pattern”,如下图进行配置:

2

Pattern中设定了对应的规则。

3.配置Filter

查找WebCenter site的CS应用安装目录,修改其中的web.xml。增加名称的filter。如下图:

3

增加了demo的配置。注意这里的名字必须和在第一步配置的最后一级目录名称相同。

4.重启WebCenter Site

5.对首页的地址进行配置

登录后台管理界面,进入Contributor UI。双击Site Tree中的SitesHome,查看其中的URL配置。如下图:

4

在上图中可以看到两个地址,下方的地址:http://localhost:9080/cs/demo/siteshome.html是根据前面配置的Pattern的自动生成的地址。

同时也可以另行配置自定义的地址,上方的地址:http://localhost:9080/cs/demo/home.html就是自行配置的地址。

一个Page可以配置多个地址。

6.页面访问

在地址栏输入:http://localhost:9080/cs/demo/home.html或http://localhost:9080/cs/demo/siteshome.html都可以对首页进行访问。如下图:

5

注意看一下访问的地址:

8

对应的页面中代码:

7

7.Apache配置

我们的目标是使用域名直接进行访问。所以使用了Apache进行转发。

配置情况如下:

增加一台虚拟主机,将原CS应用下的SitesDemo目录复制到apache的web目录下(SitesDemo中放置了css、images、js等静态信息)。

在Host中配置了www.vhost2.com指向到本机。

9

重启Apache后,访问地址:http://www.vhost2.com:90/home.html ,看到如下的结果:

10

注意看一下调用的地址:

11

实际上没有使用Apache中的静态文件。还是使用了cs应用下的文件。

8.调整Site引用静态文件的代码

修改代码,取消了<%=request.getContextPath()%>/ ,将调用地址直接变成相对地址。如下图:

11

保存后再次访问http://www.vhost2.com:90/home.html,页面正常打开。如下图:

11

查看下方访问的地址,已经开始访问Apache下的文件。

 

12

但是当我们访问http://localhost:9080/cs/demo/home.html时,发现发生问题。如下图:

13

还是由于地址的变化引起。

解决方法:

增加一个配置文件,配置URL是否需要包装。

编写一个公共的方法。当读取到配置文件中不要包装时,还是按照原来的方式获取访问地址;如果配置文件中要求包装,则按原有方式获取访问地址后,将domain的部分截取掉。这样的话在只要在管理环境和访问环境中配置不同的配置项就好。

 

 

 

 

继续试用WCC 12c,比起11g,WCC 12c最大的改进当属是采用了全新的Alta UI,当然了,其它的一些功能就只有慢慢试了。

和WCS一样,安装的前提是JDK 8,Oracle Database 12c,Weblogic Server 12c,具体的安装步骤可以参考这篇文章安装Oracle WebCenter Sites 12c (part 1) ,RCU的设置及安装可参考安装Oracle WebCenter Sites 12c (part 2) 。这篇文章从安装WCC开始。

[highlight dark=”no”]1. 安装WCC软件[/highlight]

1.1 启动安装向导

输入命令,[highlight dark=”no”]”c:\Program Files\Java\jdk1.8.0_65\bin\java.exe”[/highlight] -jar fmw_12.2.1.0.0_wccontent_generic.jar启动安装向导。

wcc1

 

wcc2

1.2 自动更新

跳过,点Next.

wcc3

 

1.3 安装位置

选择Oracle Home位置,Next

wcc4

1.4 先决条件检查

检查成功后,Next

wcc5

1.5 安装汇总

点Install,开始安装WCC软件。

wcc6

安装进行中

wcc7

1.6 完成WCC软件安装

wcc8

[highlight dark=”no”]2. 配置WCC域[/highlight]

2.1 运行RCU创建所需的数据库表空间

wcc9

 

wcc10

wcc11

2.2 创建域

转至 ORACLE_HOME/oracle_common/common/bin目录下,运行config.cmd,启动WCC应用域创建向导。

创建新Domain

wcc12

选择域模板

wcc13

Domain模式和JDK

wcc14

数据源

wcc15

数据库配置

[highlight dark=”no”]输入信息后点Get RCU Configuration[/highlight]

wcc16

 

wcc17

 

wcc18

 

Credentials

wcc19

配置管理服务器

wcc20

 

wcc21

 

wcc22

 

wcc23

 

wcc24

 

wcc25

wcc26

 

wcc27

 

完成域配置及安装

wcc28

 

wcc29

wcc30

 

wcc31

2.3 启动管理服务器

利用命令startNodeManager.cmd和startWeblogic.cmd启动Node Manager和Admin Server,通过地址http://localhost:7001/console登入控制台。

wcc32

启动UCM_Server1

wcc33

确认管理服务器已处于Running状态。

wcc34

2.4 访问WCC服务器,完成初始化配置

访问地址http://localhost:16200/cs,登录WCC,完成初始化设定

wcc35

 

wcc36

 

wcc37

 

重新启动服务器,即可正常使用WCC了。

wcc38

 

wcc39

如果要使用Alta UI,必须启动WCCADF_server1,通过地址http://localhost:16225/wcc,即可体验New UI。

wcc40

 

wcc41

 

 

 

 

 

继续本系统文章的最后一篇,配置并运行Oracle WebCenter Sites.

[highlight dark=”no”]6. 配置Oracle WebCenter Sites[/highlight]

6.1 启动管理服务器

运行Oracle Home目录下的user_projects\domains\wc_domain\startWeblogic.cmd,启动管理服务器。

wcs63

6.2 启动Node Manager

运行Oracle Home目录下的user_projects\domains\wc_domain\startNodeManager.cmd,启动Node Manager,成功启动后显示[highlight dark=”no”]<Nov 3, 2015 8:42:22 PM PST> <INFO> <Secure socket listener started on port 5556, host localhost/127.0.0.1>[/highlight]等字眼。

wcs64

6.3 为OPSS授权

运行Oracle Home目录下的user_projects\domains\wc_domain\wcsites\bin\grant-opss-permission.bat,输入管理账户名及密码,进行OPSS授权。

wcs65

6.4 创建共享文件夹

创建名为sitesData的共享文件夹供Sites使用。

wcs66

6.5 启动sites管理服务器

访问地址http://localhost:7001/console,输入用户名及密码,登入Admin Server.

wcs67

Environment–>Servers,转到Control面板,选择wcsites_server1,点Start,启动Sites管理服务器。

wcs68

确认wcsites_server1的状态变为Running.

wcs69

6.6 进行WebCenter Sites初始化配置

访问地址[highlight dark=”no”]http://localhost:8001/sites/sitesconfigsetup[/highlight],点Begin开始进入Sites初始化设置。

wcs70

指定共享目录路径

把路径设置为之前创建的共享目录路径,点Next

wcs71

JNDI数据源

接受默认名称点Next

wcs72

Web应用参数

输入主机名与端口,点Next

wcs73

CAS部署信息

确认信息后点Next

wcs74

WebCenter Sites Administrator Accounts

输入WebCenter Sites管理员的账号与密码信息,点Next

wcs75

Sample Sites

选择所需的示例站点,Next.

wcs76

配置汇总

在配置汇总页面点Test, 确认所有配置信息正确,点Start开始处理。

wcs77

完成配置

等待WebCenter Sites配置完成,显示成功画面。

wcs78

[highlight dark=”no”]7. 测试Oracle WebCenter Sites[/highlight]

7.1 重新启动wcsites_server1

停止重新启动wcsites_server1.

wcs68

7.2 访问WebCenter Sites

访问地址http://localhost:8001/sites,显示sites登录页面,用 fwadmin/xceladmin或者firstsite/firstsite登录系统。

wcs79

选择站点及喜欢的界面,进入系统。

wcs80

 

至此,完成了Oracle WebCenter Sites的安装及初始化配置。吐槽一把可恶的IE,居然无法正常显示Sites的界面,只好重新装个FF来测试。

 

 

 

 

 

 

[highlight dark=”no”]4. 运行RCU,创建数据库[/highlight]

RCU是FMW 12c系列与之前版本最大的区别,在新的版本中,RCU已集成在Oracle Fusion Middleware Infrastructure中,所以只需安装Oracle Fusion Middleware Infrastructure,就可以开始配置FMW应用所需的数据库。

在Oracle Home的oracle_common\bin目录下,运行rcu.bat,开始创建WebCenter Sites所需的表空间。

4.1 运行RCU,开始创建向导

wcs30

4.2 创建Repository

选择Create Repository–>System Load and Product Load, 点Next.

wcs31

4.3 数据库连接信息

输入Oracle数据库的连接信息,点击Next.

wcs32

wcs33

[highlight dark=”no”]注意如果使用XE的话,数据库检查会报错,只要点击忽略就可以继续。[/highlight]

4.4 选择安装组件

勾选WebCenter Sites,其它所需组件会自动先上,确认后点击Next.

wcs34

通过先决条件检查后点OK确认。

wcs35

4.5 设置Schema的密码

输入并确认Schema的密码后点Next.

wcs36

4.6 表空间信息确认并创建表空间

确认表空间信息无误,点击Next.

wcs37

检查后点击OK。

wcs38

开始创建不存在的表空间,完成后点OK,再点Next。

wcs39

4.7 RCU汇总并创建所需的表

确认信息无误后点Create,创建WebCenter Sites所需的表。

wcs40

开始创建所需的组件。

wcs41

4.8 完成RCU安装

完成RCU安装,点Close.

wcs42

[highlight dark=”no”]5. 创建Oracle WebCenter Sites域[/highlight]

5.1 运行config.cmd,开始域创建向导

运行Oracle Home目录下的oracle_common\common\bin\config.cmd。

wcs43

选择创建新Domain,Next.

wcs44

5.2 选择域使用的模板

选择Oracle WebCenter Sites with Examples, Oracle WebCenter Sites – Visitor Services, Oracle Enterprise Manager,点Next.

wcs45

5.3 应用位置

点Next.

wcs46

5.4 设置域管理员账号密码

输入域管理员的账号密码,点Next.

wcs47

5.5 Domain模式和JDK

选择所需模式及JDK后点Next.

wcs48

5.6 数据库连接配置

输入数据库密码后点击Get RCU Configuration,测试数据库连接没问题后点Next.

wcs49

5.7 组件数据源连接设置

输入组件数据源的数据库连接信息,点击Next。

wcs50

5.8 JDBC测试

JDBC测试成功后点Next.

wcs51

5.9 Advanced Configuration

Advanced Configuration选择Administration Server, Node Manager和Managed Servers, Clusters and Coherence.

wcs52

Administration Server

默认7001端口,Next.

wcs53

Node Manager

选择Node Manager的类型,输入Node Manager的用户名及密码。

wcs54

Managed Servers

设定管理服务器的名称及端口,点Next.

wcs55

Clusters

直接Next

wcs56

Coherence Clusters

直接Next

wcs57

5.10 Machines

输入主机名,点Next.

wcs58

5.11 指定管理服务器给主机

为所有的管理服务器指定给上一步设定的主机名,点Next

wcs59

5.12 配置汇总

直接点Create,开始Domain创建。

wcs60

5.13 进行Domain创建

完成配置后点Next

wcs61

5.14 完成域配置

点击Finish,完成Domain的创建及配置。

wcs62

 

至此,我们完成了Oracle WebCenter Sites所需Domain及Managed Server的创建,下一步是进一步配置并真正把WebCenter Sites运行起来。

[highlight dark=”no”]未完待续,To be continued……[/highlight]

 

Oracle WebCenter Sites 12c的安装与之前的版本有较大不同,加上目前官方的文档还不是很详细,导致很多时候安装不成功。特意写下自己的安装过程,供Tongfu的同事参考。

0.安装所需的软件wcs29

准备好所需软件后,即可开始安装。Oracle数据库与JDK的安装就直接跳下,下面从Weblogic Server的安装开始。

[highlight dark=”no”]1.安装Oracle Weblogic Server 12c[/highlight]

1.1 运行Weblogic Server 安装程序

[highlight dark=”no”]Z:\Oinstall\12C>”c:\Program Files\Java\jdk1.8.0_65\bin\java.exe” -jar fmw_12.2.1.0.0_wls.jar[/highlight]

wcs1

运行下载的jar包,启动weblogic安装程序。

wcs2

 

wcs3

1.2 Auto Updates设置

跳过自动更新设定

wcs4

1.3 选择安装路径

wcs5

1.4 选择安装类型

wcs6

1.5 先决条件检查

wcs7

1.6 跳过安全更新设置

wcs8

1.7 安装选择汇总

页面显示安装选择汇总,点击Install按钮开始安装。

 

wcs9

 

1.8 正式安装Weblogic Server

wcs10

1.9 完成Weblogic Server安装

wcs11

[highlight dark=”no”]2.安装Oracle Fusion Middleware Infrastructure[/highlight]

2.1 运行安装命令,启动Oracle Fusion Middleware Infrastructure安装向导

运行安装命令,[highlight dark=”no”]Z:\Oinstall>”c:\Program Files\Java\jdk1.8.0_65\bin\java.exe” -jar fmw_12.2.1.0.0_infrastructure.jar[/highlight],欢迎窗口点击Next.

 

wcs12

 

wcs13

 

2.2 跳过自动更新设定

wcs14

2.3 安装路径

选择Weblogic Server安装选择的Oracle Home位置。

wcs15

2.4 选择安装类型

wcs16

2.5 先决条件检查

wcs17

2.6 安装选择汇总

wcs18

点击Install开始进行安装。

2.7 进行Oracle Fusion Middleware Infrastructure的安装

wcs19

2.8 完成Oracle Fusion Middleware Infrastructure的安装

wcs20

[highlight dark=”no”]3. 安装Oracle WebCenter Sites 12c[/highlight]

3.1 运行命令,WebCenter Sites 12c安装向导

运行命令[highlight dark=”no”]Z:\Oinstall\12C>”c:\Program Files\Java\jdk1.8.0_65\bin\java.exe” -jar fmw_12.2.1.0.0_wcsites_generic.jar[/highlight],进入安装向导。

wcs21

 

wcs22

3.2 跳过自动更新

wcs23

3.3 安装位置

选择之前Weblogic Server安装的Oracle Home路径。

wcs24

3.4 安装类型

选择WebCenter Sites和示例网站。

 

wcs25

3.5 先决条件检查

wcs26

3.6 安装汇总

确认所需的功能模块均已选择,点击Install开始进行WebCenter Sites安装。

wcs27

3.7 正式安装WebCenter Sites

正式安装WebCenter Sites

正式安装WebCenter Sites

3.8 完成WebCenter Sites的安装

完成WebCenter Sites的安装

完成WebCenter Sites的安装

 

至此,我们完成了所需软件的安装,下一步是开始进行WebCenter运行所需环境的配置。To be continued……

最近突然对于API以及API管理相关的内容感兴趣,于是上18摸的API Management网站下载了一本《APIs For Dummies》的IBM版本做入门的学习。当看到其中的APIs versus services一节,对于API与服务差异的解释,很是清晰,也解开了自己一直以来的疑问。尤其是利用汽车来比喻API与Service的异同,真令人印象深刻。不惜做一回搬运工,把书中的内容做个归纳。

SOA的核心是服务(Service),单纯从技术的角度来看,其实API也是一种服务。但是否API就等于服务呢,这又不尽然。服务与API最大的差别,是它们设计目标的不同。API总是设计用来吸引预期的使用者,当使用者的需求发生改变API也相应改变。与此相反,对于服务的设计,全局的成本和稳定性往往更加重要。使用汽车来比喻的话,API的设计是赛车,注重于外观和使用,而服务的设计是常规的汽车,更着眼与成本和大批量的生产。

APIs and services address different concerns

APIs and services address different concerns

API的产品本质是面向特定的使用者,对于使用者来说,使用API意味着快速、方便与极短的学习曲线。至少从服务提供者的角度来看,这些设计标准是传统的服务与API的根本性差别。

  • 对服务提供者来说,重用包含于API交付的努力中;对于API的使用者,重用是关乎他们软件的交付速度,不管需要为作为软件一部分的API付出多大的代价。
  • 对于服务提供者来说,共享是关乎效率;对于API使用者,共享是是否方便(如果不方便,该API将没人使用)
  • 对于服务提供者来说,封装是更少的改变;对于API使用者,封装是更短的学习曲线(如果接口太复杂,API将没人使用)

有多少SOA项目没有因为服务提供者和服务使用者间因为服务接口由什么组成的冲突而停滞的?一方面,一个移动应用开发者希望API对于她的应用要足够简单;另一方面,后台团队希望大家使用相同的标准化的服务和数据模型。有没有一种既能满足需求,又不会产生高昂费用的强制双方接受的权宜解决方法呢?

API与服务的结合

SOA是屏蔽服务使用者与后端变化的方法。但是谁能为需求不断变化的前端多渠道应用的服务提供者提供保护呢?结合API和服务可使你沉着应对剧变的环境。服务是由服务提供商整理的应用域的基本功能,API是在这些功能(服务)以易于共享形式的重新包装,产品化。所以说API和服务是互补,而不是相互矛盾的,把API和服务结合在一起,将极大地提高企业创新的整体效益。

纯粹玩票的性质,因为有个朋友需要一个发匿名邮件的工具,自告奋勇说帮他写。本以为手到擒来的事,结果还是折腾了大半天才弄好。

因为服务器上跑着Wordpress,所以就图方便想着用PHPMailer来写。在Github上下了最新的PHPMailer库,照着示例轻而易举地把页面写出来,在本机上用自己网易的私人邮箱发送邮件成功。但换了公司部署在腾讯上的企业邮箱发送时,因为使用了SSL验证,出现了“[highlight dark=”no”]Extension missing: openssl[/highlight]”的错误(如下图所示)。

Send

因为对PHP实在不熟,刚开始还以为是PHPMailer的SMTPSecure设置问题,查了Github上的文档发现就是tls或者ssl两种方式,转回来在PHP配置上找原因,发现只需要把php.ini的[highlight dark=”no”]extension=php_openssl.dll[/highlight]扩展开打,邮件即可发送成功。

不过当真的想发匿名邮件时,却又碰到一个问题,几乎所有邮件服务厂商都不支持设置Mail的From属性与登录的发件人不一样,发送时会报“MAIL FROM command failed,mail from address must be same as authorization user”的错误。无法可施,只能场外求助,还好付老板帮大力支持帮俺架了一个邮件服务器,终于可以在12点前交货,帮朋友发出匿名邮件了。