Brent



天道酬勤



在每一层ADF都有它的一些组件。我这次主要想讲讲ADF的data binding,因为它隔离了业务逻辑层和web层,使得两个层次的独立性更强。但是,ADF似乎做得过于复杂,使得很难上手使用。
ADF中关键的数据绑定概念如下:
Data Control:
Data Control是对业务接口的抽象,也就是说所有访问业务对象的方法现在都通过Data Control来进行,这样使得绑定层使用一种方式来访问数据,不论后台的数据对象是种实现。可以把Data Control看做是一种代理机制。
Iterator Bindings and Control Bindings:
Binding 是一种轻量级的对象,它的主要目的就是让后台数据和前台显示解藕,这是老生常谈的问题,让我们看看ADF是怎么做的。Iterator Binding 和提供集合对象数据的Data Control合作。 Control Bindings 则提供了一个标准的接口让用户界面可处理集合对象或者调用业务方法。
Binding Containers:
Binding Container 对象记录了某一个用户界面使用了哪些iterator binding、control binding。 有一个XML文件记录了这些内容,在运行时就会根据这个XML来生产一个Binding Container。
Binding Context:
Binding Context 则是比Binding Container更大的一个概念,它包含了所有的Binding Container以及Data Control的信息。
下面介绍一个简单的应用蓝图:
这 个应用是这样的, 现在有一个论坛,在这个论坛上有一个页面用来Review 一些Threads并指定一个team回复它,这个页面叫做ReviewThreads.jsp 。 这个页面需要从后台的ForumService来获得数据并指定回复的Team. ForumService是一个ADF的Application Module组件(Application module组件是对业务逻辑的一种抽象,它可以实现为java class,EJB,webservice等等,它也有自己的方法来调用View Object,这里大家只需要认为它是一种业务组件就行了)。另外,这个页面还需要一个所有可选Team的下拉框,这个下来框的数据来自一个web service LookupCodes。
对应每一个业务组件会有一个Data Control包装了该组件的业务方法。在该应用的Binding Context中包含了两个Binding Container, ReviewThreads和UnansweredPostings。前者提供给ReviewThreads.jsp使用,后者则同事支持uix页面 (uix是一种基于XML的界面语言),以及Jclient的一个Swing Panel。
ReviewThreads绑定容器包含了以下Binding:
1. 三个指向该应用使用的数据集合的iterator binding。两个由ForumService提供,一个由LookupCodes提供,如图所示
2. 三个支持了界面上元素的Control Binding
首先是一个Attribute control binding 用来在页面上Name输入框中显示Forum名字
其次是一个list binding来支持下拉框
最后是一个range binding用来支持JSTL的
3. 一个control binding用来调用ForumService的一个方法,用来指定Team答复Thread.
需 要注意的是,control value bindings 是需要通过iterator binding来获得他们的数据。特别是list value binding它同时需要使用两个iterator binding,一个用来取得所有的list中的值,另一个用来提供list中选择的值。
下图介绍了上述的组件在运行时是怎么样配合 的。一个Binding Context包含了一个或者多个Data Control和Binding Container。每一个Binding Container会有一个或者多个iterator binding 指定了一个页面使用的数据集合。每一个iterator binding从一个特定的Data control获取及更改数据。Binding Container也会有一个或多个control binding 来支持页面控制。当Control binding需要和数据绑定时,就要一个iterator binding相关联。如果是一个control action binding,比如说和页面上的submit健关联的binding则会要和一个data control 关联用来调用service 层的方法。
Symptom: Can't complete un-installation process
Reproduce steps:
EPM System Release 11.1.1.1 supports both Windows and UNIX operating systems. If you are planning to install in a UNIX environment, be sure to carefully read the System Requirements chapter for details on which Windows and UNIX versions are supported for products (see System Requirements.)
At a high level, the following table lists components of products that may only be installed on Windows.
Note:
This does not cover any limitations within UNIX support such as support for certain UNIX versions.
| Product Category | Product | Products/Components Supported on Windows Only |
|---|---|---|
| Foundation Services | Smart View | Smart View Client |
| Remote Authentication Module | If using Remote Authentication Module, you must install Shared Services on Windows. Remote Authentication Module is part of the Shared Services installation. | |
| Performance Management Architect |
| |
| Essbase | Essbase | Essbase Client (Oracle Essbase Spreadsheet Add-in) |
| Administration Services | Essbase Administration Services Console | |
| Integration Services | Essbase Integration Services Client 32 bit | |
| Essbase Studio | Essbase Studio Client | |
| Application Builder for .NET | HabNet Client | |
| Oracle Essbase Visual Explorer | Smart View with Visual Explorer Client | |
| Reporting and Analysis | Interactive Reporting |
|
| Financial Reporting |
| |
| Production Reporting | All Client components | |
| Financial Performance Management Applications | Financial Management | All Components |
| Strategic Finance | All Components | |
| Data Management | FDM | All Components |
在我们添加硬盘前,首先要了解linux系统下对硬盘和分区的命名方法。在Linux下对IDE的设备是以hd命名的,第一个ide设备是hda,第二个是hdb。依此类推
我们一般主板上有两个IDE接口,一共可以安装四个IDE设备。主IDE上的两个设备分别对应hda和hdb,第二个IDE口上的两个设备对应hdc和hdd。
一般我们的硬盘安装在主IDE的主接口上,所以是hda,光驱一般安装在第二个IDE的主接口上,所以是hdc(应为hdb是用来命名主IDE上的从接口),SCSI接口设备是用sd命名的,第一个设备是sda,第二个是sdb。依此类推
分区是用设备名称加数字命名的。例如hda1代表hda这个硬盘设备上的第一个分区。每个硬盘可以最多有四个主分区,作用是1-4命名硬盘的主分区。逻辑分区是从5开始的,每多一个分区,数字加以就可以。
比如我们一般的系统都有一个主分区用来引导系统,这个分区对应我们常说的C区,在linux下命名是hda1。后面我们分三个逻辑分区对应常说的D、E、F,在linux下命名是hda5、hda6、hda7
给硬盘分区
在slackware下有两个分区软件fdisk和cfdisk,例如我们已经有一个硬盘了,现在添加另一个硬盘到系统,那么我们根据命名规则知道这个新添加的硬盘应该是hdb。我们用下面命令给硬盘分区
fdisk /dev/hdb
你也可以用cfdisk来分区,命令如下:
cfdisk /dev/hdb
格式化硬盘
格式化成ext3格式
mkfs.ext3 /dev/hdb1
格式化成reiserfs的格式
mkfs.reiserfs /dev/hdb1
让硬盘启动自动挂载
例如挂载/dev/hdb1分区到/mnt/hd目录下
用vi编辑/etc/fstab文件,加入如下内容
首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。
命令格式:
mount [-t vfstype] [-o options] device dir
其中:
1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
3.device 要挂接(mount)的设备。
4.dir设备在系统上的挂接点(mount point)。
挂接光盘镜像文件
由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在Windows下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟 光驱来使用。这样做有许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问题,随用随调十分方便;三、硬盘的读取速度要远 远高于光盘的读取速度,CPU占用率大大降低。其实linux系统下制作和使用光盘镜像比Windows系统更方便,不必借用任何第三方软件包。
1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。
#cp /dev/cdrom /home/sunky/mydisk.iso 或
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso
注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso
2、将文件和目录制作成光盘镜像文件,执行下面的命令。
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk
3、光盘镜像文件的挂接(mount)
#mkdir /mnt/vcdrom
注:建立一个目录用来作挂接点(mount point)
#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。
挂接移动硬盘
对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter /]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
在这里可以清楚地看到系统有一块SCSI硬盘/dev/sda和它的四个磁盘分区/dev/sda1 -- /dev/sda4, /dev/sda5是分区/dev/sda4的逻辑分区。接好移动硬盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况
[root at pldyrouter /]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
Disk /dev/sdc: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 510 4096543+ 7 HPFS/NTFS
/dev/sdc2 511 4864 34973505 f Win95 Ext'd (LBA)
/dev/sdc5 511 4864 34973473+ b Win95 FAT32
大家应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev/sdc1?、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和/dev/sdc5。
#mkdir -p /mnt/usbhd1
#mkdir -p /mnt/usbhd2
注:建立目录用来作挂接点(mount point)
#mount -t ntfs /dev/sdc1 /mnt/usbhd1
#mount -t vfat /dev/sdc5 /mnt/usbhd2
注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。
#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1
#mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2
linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。
#mount /dev/sdc1 /mnt/usbhd1
挂接U盘
和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
Disk /dev/sdd: 131 MB, 131072000 bytes
9 heads, 32 sectors/track, 888 cylinders
Units = cylinders of 288 * 512 = 147456 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 * 1 889 127983+ b Win95 FAT32
Partition 1 has different physical/logical endings:
phys=(1000, 8, 32) logical=(888, 7, 31)
系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。
#mkdir -p /mnt/usb
注:建立一个目录用来作挂接点(mount point)
#mount -t vfat /dev/sdd1 /mnt/usb
注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。
#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb
挂接Windows文件共享
Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到 www.samba.org网站下载......新的版本是3.0.10版。
当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:
# mkdir –p /mnt/samba
注:建立一个目录用来作挂接点(mount point)
# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba
注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享
如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。以上操作在redhat as server 3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2000、windows xp、windows 2003环境下测试通过。
挂接UNIX系统NFS文件共享
类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。
在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。
1、Solaris系统NFS服务端配置方法如下:
(1)修改 /etc/dfs/dfstab, 增加共享目录
share -F nfs -o rw /export/home/sunky
(2)启动nfs服务
# /etc/init.d/nfs.server start
(3)NFS服务启动以后,也可以使用下面的命令增加新的共享
# share /export/home/sunky1
# share /export/home/sunky2
注:/export/home/sunky和/export/home/sunky1是准备共享的目录
2、linux系统NFS服务端配置方法如下:
(1)修改 /etc/exports,增加共享目录
/export/home/sunky 10.140.133.23(rw)
/export/home/sunky1 *(rw)
/export/home/sunky2 linux-client(rw)
注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、 linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机 /etc/hosts文件里增加linux-client主机ip定义。格式如下:
10.140.133.23 linux-client
(2)启动与停止NFS服务
/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
/etc/rc.d/init.d/nfs start 启动NFS服务
/etc/rc.d/init.d/nfs stop 停止NFS服务
注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。
3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享
# mkdir –p /mnt/nfs
注:建立一个目录用来作挂接点(mount point)
#mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs
注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。
如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过。
权限问题:
假設 server 端的使用者 jack, user id 為 1818, gid 為 1818, client 端也有一個使用者 jack,但是 uid 及 gid 是 1818。client 端的 jack 希望能完全讀寫 server 端的 /home/jack 這個目錄。server 端的 /etc/exports 是
這樣寫的:
/home/jack *(rw,all_squash,anonuid=1818,anongid=1818)
這個的設定檔的意思是,所有 client 端的使用者存取 server 端 /home/jack 這
目錄時,都會 map 成 server 端的 jack (uid,gid=1818)。我 mount 的結果是
1. client 端的 root 可以完全存取該目錄, 包括讀、寫、殺……等
2. client 端的 jack (uid,gid=1818) 我可以做:
rm -rf server_jack/*
cp something server_jack/
mkdir server_jack/a