ice world

There is nothing too difficult if you put your heart into it.
posts - 104, comments - 103, trackbacks - 0, articles - 0

2012年6月4日

这个问题很多小伙伴都遇到了,网上搜罗了半天也没找到太好、太完美的解决办法,有人说是因为安装IE11时联网了,导致自动打了补丁,这个补丁可以自动检查IE主页是否损坏,可以通过卸载相应的补丁解决,我同时又找到了另外一个通过修改hosts文件的方法,貌似目前解决了我的问题,修改方法如下: 使用记事本打开 C:\Windows\System32\drivers\etc\hosts 文件,在最下面追加一行: 127.0.0.1 ieonline.microsoft.com

posted @ 2016-08-12 10:47 IceWee 阅读(872) | 评论 (0)编辑 收藏

将JDK中BIN文件夹下的 msvcr71.dll 这个文件复制到 TOMCAT 中的 BIN 下

posted @ 2016-01-18 13:43 IceWee 阅读(422) | 评论 (0)编辑 收藏

有段日子没做记录了,这段日子一直在排雷(前人埋下的隐患代码,或者直接说bug),今天这个雷让我排了将近大半天,因为是正式上线的系统,只能看后台日志,不能调试,打印出的异常信息不完整,种种的条件不充分,导致问题很难定位。标题上的两个异常,第一个一看就明白是插入的数值大于数据库字段长度,第二个多是因为Number类型的字段导致,比如精度不足。

我们的这次问题原因是程序员在做除法运算时没有对除数进行非零判断,导致计算出来的数值非法,插入数据库失败,请看代码:
public static void main(String[] args) {
        
double a = 10;
        
double b = 0;
        
double c = 0;
        
        
double m = a/c;
        
double n = b/c;
        
        System.out.println(m);
        System.out.println(n);
    }

经过计算后,m和n的值分别是多少?没在实际开发中遇到的可能不知道,或者你有个好习惯不会出现这样的bug,请看结果:
Infinity
NaN

被除数非零,除数为零做除法的结果是字符串“Infinity”,翻译成中文就是“无限”,你的中学数学老师可能说过;
被除数为零,除数为零做触发的结果是字符串“NaN”,即不是有效的数字。

就是这个“Infinity”花费了我一小天的时间才定位。下面详述问题定位的方法。

异常1:ORA-01438: value larger than specified precision allowed for this column
了解点数据库的打眼一看就知道插入的数值超过了表字段长度,但你知道是哪个表哪个字段吗?我不知道,于是网上查阅了下,Oracle数据库服务器在Linux上。

命令行登陆到数据库所在服务器,进入Oracle的安装目录,假设是/opt/oracle/
进入到如下目录:/opt/oracle/admin/实例名/udump
中间的数据库实例名根据实际情况修改,udump目录下会有一堆的.trc文件,这些文件记录了所有操作当前数据库出现异常的堆栈信息。为了定位问题,我将该目录下的所有.trc文件都删除了(当然,删除之前把udump目录整个备份了),再进行一次系统的业务操作,查看一下udump目录,发现立刻生成一个新 的.trc文件,打开查看(内容片段):
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning
, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
ORACLE_HOME 
= /u01/app/oracle/product/10.2/db_1
System name:    AIX
Node name
:    gsdj1
Release
:    1
Version
:    6
Machine
:    00CFD4644C00
Instance name
: bjwd1
Redo thread mounted by this instance: 1
Oracle process number
: 132
Unix process pid
: 48300280, image: oracle@gsdj1

*** SERVICE NAME:(bjwd) 2014-03-28 16:48:05.683
*** SESSION ID:(2969.439612014-03-28 16:48:05.683
*** 2014-03-28 16:48:05.683
ksedmp
: internal or fatal error
ORA
-01438: value larger than specified precision allowed for this column
Current SQL statement 
for this session:
insert into CP_TEMP_STOCKTRAN (APPLY_ID, ALIEN, CER_TYPE, CER_NO, TRANS_AM, TRANS_AM_PR, TRANS_TYPE, TRANS_DATE, ENDORSOR, BLIC_TYPE, ALIEN_ID, ENDORSOR_ID, STOCKTRAN_ID) values (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13)

黄色背景红色字体的SQL就是罪魁祸首,这仅仅能定位发生问题的数据库表,字段还得自己排查。异常1让我定位到了这里,这时想起了异常2。


异常2: Could not synchronize database state with session
之前也搜索过这个异常,多数是由于Number类型的字段导致。冷静的思考一下,平常我们在做表设计时,会把文字类型的字段设置大一些,Number类型的精度也会根据实际业务进行设计,但往往Number类型的字段最容易出问题:
1、如果将非Number值插入该字段,比如字符串
2、如果插入的数值精度过多,如字段设计Number(10,2),也就是最大支持8为整数和两位小数,要插入34.121313就会失败

根据表名定位到hibernate的映射文件以及实体类,再从业务功能入口(一个action方法)搜索,终于定位到一个业务接口做了该实体类的保存代码,定位到了那个字段,定位到了做除法没有判断除数是否为0。








posted @ 2014-03-28 18:54 IceWee 阅读(861) | 评论 (0)编辑 收藏

网络配置:
临时(重丢失)
ifconfig eth0 192.168.1.xxx netmask 255.255.xxx.0


永久(重启有效)
vi /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.xxx
        netmask 255.255.xxx.0
        network 192.168.1.1
        broadcast 192.168.1.255
        gateway 192.168.1.1
        
# dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 202.106.196.115


由于非法关机导致重启后无法联网

ifconfig eth0 192.168.1.xxx netmask 255.255.xxx.0 

route add default gw 192.168.1.1

重启后配置丢失,所以必须在重启之前执行:
apt-get update

apt-get install ifupdown

不能联网是因为非法关机导致ifup脚本丢失





posted @ 2014-01-24 10:50 IceWee 阅读(887) | 评论 (0)编辑 收藏

源机器:192.168.1.1
备份机器:192.168.1.2

前提条件:
1、两台机器的网络是连通的
2、两台机器必须同时安装了SVN服务器

假设:
源机器上需要同步的库名为autoSync,访问地址为:svn://192.168.1.1/autoSync,对其具备读写权限的账户:sync/sync

备份机器配置:
1、创建与源机器库名相同的空库
# 假设备份机器的SVN根目录建立在 /home/backup/svn/repository下
svnadmin create /home/backup/svn/repository/autoSync

2、配置备份机器上的autoSync
分别修改conf下的svnserve.conf、passwd、authz,根据实际情况配置,假设创建了用户sync/sync,对库autoSync具备读写权限,配置方法略,配置完成后启动SVN服务

3、创建并修改pre-revprop-change文件
cd /home/backup/svn/repository/autoSync/hooks
cp pre
-revprop-change.tmpl pre-revprop-change
vi pre-revprop-change

将文件末尾的“exit 1”改为“exit 0”即可,保存退出
REPOS="$1"
REV
="$2"
USER
="$3"
PROPNAME
="$4"
ACTION
="$5"

if
[ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi

echo
"Changing revision properties other than svn:log is prohibited" >&2
exit
0

增加可执行权限
chmod 755 pre-revprop-change

4、初始化
命令:
svnsync init --username 用户名 --password 密码 备份机器库URL 源机器库URL

说明:
用户名和密码是对源机器SVN库具备读写权限的SVN用户

示例:
svnsync init --username sync --password sync svn://192.168.1.2/autoSync svn://192.168.1.1/autoSync

5、首次同步
首次同步即为一次全备份过程,在此期间请停止客户端段源机器哦一切操作(提交代码等)
命令:
svnsync sync 备份机器库URL
示例:
svnsync sync svn://192.168.1.2/autoSync

源机器配置
6、增量自动同步配置
创建并修改post-commit文件
# 假设源机器的SVN根目录建立在 /home/svn/repository下
cd /home/svn/repository/autoSync/hooks
cp post
-commit.tmpl post-commit
vi post
-commit

在文件末尾追加:svnsync sync --non-interactive 备份机器库URL --username 用户名 --password 密码

说明:
用户名和密码是对备份机器SVN库具备读写权限的SVN用户

示例:
svnsync sync --non-interactive svn://192.168.1.2/autoSync --username sync --password sync

7、术语
配置完成,今后客户端再向SVN(192.168.1.1)提交文件时,会自动触发源机器(192.168.1.1)向备份机器(192.168.1.2)提交更新

8、版本库UUID一致性
首先查看源机器库的UUID,假设得到的是:fcdcbee9-6be3-4575-8d4a-681ec15ad8e0
svnlook uuid svn://192.168.1.1/autoSync

更新备份机器库的UUID为源机器库的UUID
svnadmin setuuid svn://192.168.1.2/autoSync fcdcbee9-6be3-4575-8d4a-681ec15ad8e0




posted @ 2014-01-23 11:08 IceWee 阅读(633) | 评论 (0)编辑 收藏

本文记录的安装步骤是基于基本安装后的Debian,启动后漆黑一片,只有命令行,采用在线安装方式,因此配置中国的镜像软件源能提高软件的下载速度,首先配置软件源。

备份源文件
# cp /etc/apt/sources.list /etc/apt/sources.list.bak

编辑源文件
# nano /etc/apt/sources.list

注释掉本地光盘源这一行,注释后如:
# deb cdrom:[Debian GNU/Linux 6.0.7 _Squeeze_ - Official amd64 NETINST Binary-1 20130223-18:50]/ squeeze main

取消下面两行官方源前面的注释
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

追加163的镜像源地址
deb http://mirrors.163.com/debian/ squeeze main non-free contrib
deb http://mirrors.163.com/debian/ squeeze-proposed-updates main contrib non-free
deb http://mirrors.163.com/debian-security/ squeeze/updates main contrib non-free
deb-src http://mirrors.163.com/debian/ squeeze main non-free contrib
deb-src http://mirrors.163.com/debian/ squeeze-proposed-updates main contrib non-free
deb-src http://mirrors.163.com/debian-security/ squeeze/updates main contrib non-free
deb http://ftp.sjtu.edu.cn/debian/ squeeze main non-free contrib
deb http://ftp.sjtu.edu.cn/debian/ squeeze-proposed-updates main contrib non-free
deb http://ftp.sjtu.edu.cn/debian-security/ squeeze/updates main contrib non-free
deb-src http://ftp.sjtu.edu.cn/debian/ squeeze main non-free contrib
deb-src http://ftp.sjtu.edu.cn/debian/ squeeze-proposed-updates main contrib non-free
deb-src http://ftp.sjtu.edu.cn/debian-security/ squeeze/updates main contrib non-free

保存修改
# ctrl + o 回车
退出
# ctrl + x

更新源
# apt-get update

更新系统
# apt-get upgrade

安装SVN服务器
# apt-get install subversion subversion-tools

安装完成后可以运行命令查看SVN服务器版本信息
# svnserve --version

配置SVN
首先创建版本库的根目录,如位置:/home/svn/repository,所有项目都将在该目录下创建相应子文件夹
# mkdir –p /home/svn/repository

创建项目版本库test(仅为演示)
# svnadmin create /home/svn/repository/test


修改SVN配置文件
nano /home/svn/repository/test/conf/svnserve.conf

以下为文件内容:
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository.  (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.tigris.org/ for more information.

[general]
### These options control access to the repository for unauthenticated
### and authenticated users.  Valid values are "write", "read",
### and "none".  The sample settings below are the defaults
# 未授权配置为禁止访问none,已授权配置为可以读写write
anon-access = none
auth-access = write
### The password-db option controls the location of the password
### database file.  Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
# 用户数据库文件,配置授权用户,当前使用的文件是和svnserve.conf在相同目录下的passwd文件,也可以指定其他绝对路径文件,如:/home/svn/passwd
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control.  Unless you specify a path
### starting with a /, the file's location is relative to the the
### directory containing this file.  If you don't specify an
### authz-db, no path-based access control is done.
### Uncomment the line below to use the default authorization file.
# 授权文件,配置如同用户配置
authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.  The default realm
### is repository's uuid.
# realm = My First Repository

[sasl]
### This option specifies whether you want to use the Cyrus SASL
### library for authentication. Default is false.
### This section will be ignored if svnserve is not built with Cyrus
### SASL support; to check, run 'svnserve --version' and look for a line
### reading 'Cyrus SASL authentication is available.'
# use-sasl = true
### These options specify the desired strength of the security layer
### that you want SASL to provide. 0 means no encryption, 1 means
### integrity-checking only, values larger than 1 are correlated
### to the effective key length for encryption (e.g. 128 means 128-bit
### encryption). The values below are the defaults.
# min-encryption = 0
# max-encryption = 256


保存
# ctrl + o 回车

退出
# ctrl + x

配置用户
# nano passwd

以下为文件内容:
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret
IceWee = IceWee

增加用户IceWee,密码也为IceWee,=号两侧需要有空格,保存(ctrl + o 回车)退出(ctrl + x)

配置访问权限
# nano authz

以下为文件内容:
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
###  - a single user,
###  - a group of users defined in a special [groups] section,
###  - an alias defined in a special [aliases] section,
###  - all authenticated users, using the '$authenticated' token,
###  - only anonymous users, using the '$anonymous' token,
###  - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
developers = IceWee

# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

[/]
* = r
IceWee = rw
@developers = rw

[/tags]
IceWee = rw

默认所有用户可读取根,IceWee可以读写根。可以分别对子目录进行授权,如上的tags目录,IceWee具有读写权限,以及IceWee所在的组developers也具备读写权限。

启动SVN服务器
# svnserve -d -r /home/svn/repository
-d含义为后台运行(daemon),-r指定的根目录,如访问test应该使用这样的地址 svn://hostname:port/test

停止SVN服务
# killall svnserve

备份还原命令,与oracle的备份有些类似
导出
# svnadmin dump /home/svn/repository/test > /home/bak/test.dump

导入
# svnadmin load /home/svn/repository/demo < /home/bak/demo.dump
导入前提:
必须先创建要导入版本库目录,如上的demo,则需要做以下操作
# svnadmin create /home/svn/respository/demo
修改svnserve.conf、passwd、authz等文件,前面已介绍


 





posted @ 2014-01-17 15:48 IceWee 阅读(1216) | 评论 (0)编辑 收藏


2013年12月10日
---------------------------
冒泡排序
void bubble(int[] array) {
       
boolean swaped = true;
       
for (int t = 1; t < array.length && swaped; t++) {
            swaped
= false;
           
for (int i = 0; i < array.length - t; i++) {
               
if (array[i] > array[i + 1]) {
                  
int temp = array[i];
                    array[i]
= array[i + 1];
                    array[i
+ 1] = temp;
                    swaped
= true;
                }

            }

        }

    }


2013年11月26日
---------------------------
1、String的split方法
平常总是这样用,String str = "a,b,c,d,e"; String[] arr = str.split(",");
其实还可以这样用,String lan = "Java;C#?C++:C"; String si = lan.split("[;?:]"); 返回的是字符串数组{"Java", "C#", "C++", "C"}


2013年11月21日
---------------------------

1、Java对象池知多少?
示例:String s1 = "abc"; String s2 = "abc"; s1 == s2 返回ture还是false?只要不是new出来的都先从对象池中读取,因此结果为true,两个变量指向的是同一块内存空间地址。

Java除了String类使用了对象池以外,还有5个基本类型的封装类:Byte、Short、Integer、Long和Character,例如:Integer inA = 20; Integer inB = 20; 那么 inA == inB 的结果为true,其他类与此相同,不做示例。

特别注意:
(1)浮点型的两个封装类Float和Double并没有参与对象池;
(2)整形封装类(Byte、Short、Integer和Long)只有数值小于或等于127时才使用对象池,例如:Integer x = 128; Integer y = 128; x == y的结果为false。

2、Java变量命名规范
A. String #name = "Joe";
B. int $age = 30;
C. Double _height = 174.4;
D. float ~temp = 37.6;
以上A到D,哪个无法通过编译?答案是A和D,因为Java变量名只允许字母、下划线(_)、美元符($)开头,那么 int _ = 30; String $$ = "I DO";可以吗?答案是完全可以,但很少有人这样定义变量名,虽然没有违法命名规范,但最后我估计程序员自己都会被自己绕晕。

3、0和1能标识布尔值吗?
int flag = 0;
if (flag) {
    System.out.print("error");
}
error会打印吗?不会,因为根本就不会编译通过,编译器会提示flag是int类型而不是boolean类型,如果你会有这种想法可能之前学过C,C总的0和1可以标识布尔的。

4、静态导入
例:
ClassA.java
package bing.test.sub1;

public class ClassA {
  
public static final int MAX_INT = Integer.MAX_VALUE;
}



ClassB.java
package bing.test.sub2;

import static bing.test.sub1.ClassA.MAX_INT;

public class ClassB {
 
public static void main(String[] args) {
System.out.println(MAX_INT);
  }

}

输出:2147483647。不仅仅可以静态导入其他类的静态属性还可以导入静态方法,这些特性在实际开发中很少见。









posted @ 2013-11-21 12:49 IceWee 阅读(455) | 评论 (0)编辑 收藏

Apache Commons的FTPClient局域网上传文件速度本应该很快的,但却在实际开发中发现上传一个文件蜗牛速度,都是因为调用了如下API:

ftpClient.storeFile(fileName, inputStream)

原因是因为默认缓冲区大小是1024,也就是1K,当然慢了,在调用上传API之前重新修改以下默认设置即可,如将缓冲区改为10M,API:

ftpClient.setBufferSize(1024 * 1024 * 10)

posted @ 2013-09-13 16:32 IceWee 阅读(6692) | 评论 (0)编辑 收藏

第一步,查询锁表信息
--查询被锁住的数据库对象
select object_name, machine, s.sid, s.serial#
 
from v$locked_object l, dba_objects o, v$session s
where l.object_id = o.object_id
  
and l.session_id = s.sid;


第二步,杀死数据库会话
--杀死数据库会话
alter system kill session '207,707'; -- 207为SID, 707为SERIAL#


第三步,如果第二步无法杀死会话,报ORA-00031,那么只能杀死UNIX/LINUX系统进程了
--查询当前操作的系统进程ID
select spid, osuser, s.program
 
from v$session s, v$process p
where s.paddr = p.addr
  
and s.sid = 207; -- 207为SID


第四步,根据查询到的系统PID,杀掉进程
kill -9 24664 // 24664为UNIX/LINUX系统进程ID



posted @ 2013-08-23 10:20 IceWee 阅读(517) | 评论 (0)编辑 收藏

     摘要: 备用。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;...  阅读全文

posted @ 2013-07-27 11:53 IceWee 阅读(1429) | 评论 (0)编辑 收藏

Java获取本地IP地址方法网上搜一箩筐,但基本上都是获得一个IP,实际开发中一台电脑很可能有多个IP地址,如多网卡,或者安装了VM Ware虚拟机,就会虚拟出其他的网卡,那么传统的方法得到的一个IP地址就不全面了,下面贴出获取本机IP列表的方法:
/**
     * IceWee 2013.07.19
     * 获取本地IP列表(针对多网卡情况)
     *
     * 
@return
     
*/

    
public static List<String> getLocalIPList() {
        List
<String> ipList = new ArrayList<String>();
        
try {
            Enumeration
<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            NetworkInterface networkInterface;
            Enumeration
<InetAddress> inetAddresses;
            InetAddress inetAddress;
            String ip;
            
while (networkInterfaces.hasMoreElements()) {
                networkInterface 
= networkInterfaces.nextElement();
                inetAddresses 
= networkInterface.getInetAddresses();
                
while (inetAddresses.hasMoreElements()) {
                    inetAddress 
= inetAddresses.nextElement();
                    
if (inetAddress != null && inetAddress instanceof Inet4Address) // IPV4
                        ip = inetAddress.getHostAddress();
                        ipList.add(ip);
                    }

                }

            }

        }
 catch (SocketException e) {
            e.printStackTrace();
        }

        
return ipList;
    }




posted @ 2013-07-19 11:10 IceWee 阅读(4352) | 评论 (1)编辑 收藏

项目开发组建立后一般要统一开发环境,一般是指开发环境,开发工具的版本和设置,其中编码设置是个较为重要的部分,其重要性不言而喻。以下为eclipse编码设置方法(将默认编码改为UTF-8为例):

1.工作空间的编码(这样以后新建的文件也是新设置的编码格式) 
   
eclipse->window->preferences->General->workspaceTypes->Other->UTF-8->OK

2.工程的编码

Project->Properties->General->Resource->Other->UTF-8->OK

3.某类文件的编码
 
eclipse->window->preferences->General->Content Types->右侧找到需要修改的文件的类型(如JAVA,JSP等)->在下面的Default encoding,输入框中输入UTF-8->点击Update->OK

4、单个文件的编码
 
在包资源管理器视图,右键点击文件->属性,改变文本文件编码格式为UTF-8

posted @ 2013-06-17 14:15 IceWee 阅读(808) | 评论 (0)编辑 收藏

进来的看官使用的是win7吧?!是64位的吧!?安装了eclipse的subclipse插件了吧!每次用到SVN插件时都会弹出如下的对话框,虽然不影响使用但是很不爽是不是啊?LZ也是一个有丁点儿强迫症的人,我想干掉这个弹出框!

稍后上图,服务器估计挂了!!

解决方法:
Window-Preferences-Team-SVN,在SVN接口的下拉框可以看到,默认选择的是JavaHL(JNI) Not Available,手动更改为SVNKit(Pure Java) SVNKit v1.3.5.7406,OK,enjoy it!

错误提示框:


修改前:


修改后:

posted @ 2013-03-18 15:13 IceWee 阅读(78900) | 评论 (6)编辑 收藏

一、Redhat上VNC Server配置
本文以当前Linux系统未安装VNC服务器为基本,如果已安装请跳过第1节!

前提:
1.连接到互联网,将使用yum在线安装VNC服务器
2. 确认 SSH 在运行

1.安装 TigerVNC Server

# yum search tigervnc-server


返回大概如下内容:

tigervnc-server.x86_64 : A TigerVNC Server
tigervnc-server-applet.noarch : Java TigerVNC Viewer applet for TigerVNC Server
tigervnc-server-module.x86._
64 : TigerVNC Mode to Xorg
...


第一行即是我们要安装的VNS服务器,第二行是客户端,执行

# yum install tigervnc-server.x86_64


回车后会有一次安装确认,输入y后回车即可安装,安装完毕后返回到命令行输入光标,执行

# vncserver


会提示输入验证密码,至少6位,该密码是客户端连接时用到的。


2.配置图形界面
修改配置文件,激活图形界面,执行命令:

# vi /root/.vnc/xstartup


注释掉这行

#twm & // 注释该行


末尾增加一行

gnome-session & // 增加该行


保存退出


3.启动VNC服务
执行命令

# /etc/init.d/vncserver start

# service vncserver start


启动后提示:

Starting VNC server: no displays configured [FAILED]


解决方法:
执行命令

# vim /etc/sysconfig/vncservers


修改最后两行如:

VNCSERVERS="1:root"
VNCSERVERARGS
[1]="-geometry 1024x768"


说明:

第一行为服务配置,当前只配置了一个VNC服务,使用用户root启动,如果还需要使用其他用户登陆,可以修改VNCSERVERS的值如:“1:root 2:tiger”(tiger为系统另一存在用户)。第二行可以注释,是配置窗口分辨率的,需要去掉后面的-localhost


VNC Server随系统自动启动
执行命令

# sudo chkconfig --level 345 vncserver on


4.停止VNC服务

执行命令

# /etc/init.d/vncserver stop

# service vncserver stop


二、Windows借助VNC Viewer访问Linux
首先安装RealVNC,从互联网下载获得
开始 - Run VNC Viewer,输入IP地址,后面的:1代表使用root用户登陆,在RH上配置的1:root,如果想使用其他用户登陆则调整冒号后的数字即可,密码就是先前配置的。
 


解决连接不上问题的方法

执行命令,查看VNC监听的端口是什么,在防火墙中开放端口即可

# netstat -ntupl|grep vnc


返回列表如:

1. tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 4411/Xvnc 
2. tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 4411/Xvnc 
3. tcp 0 0 :::6001 :::* LISTEN 4411/Xvnc


修改防火墙配置文件,开放5901端口即可

# vi /etc/sysconfig/iptables


可以复制22端口一行,黏贴修改即可,重新启动防火墙服务

# service iptables restart


 


 

posted @ 2013-02-22 17:46 IceWee 阅读(21946) | 评论 (2)编辑 收藏

基本信息
操作系统:CentOS Release 6.3 (Final)
内核版本:Kernel Linux 2.6.32-279.el6.x86_64
JDK版本:Oracle ®Java SE Development Kit 7u15 (1.7.0_15-b03)
JBoss版本:JBoss Application Server 7.1.1
安装包: jdk-7u15-linux-x64.rpm、jboss-as-7.1.1.Final.zip

安装准备
上传安装文件
将JDK和JBoss安装文件(先解压成目录)上传到服务器,目录随意,如:/home/下

开始安装
JDK安装
使用root登陆系统,打开命令行窗口,先为安装文件授权

# chmod 755 jdk-7u15-linux-x64.rpm


执行安装

# rpm -ivh jdk-7u15-linux-x64.rpm


自动安装到目录 /usr/java 下

 

JDK配置
Root登陆执行

# vi /etc/profile


增加下面内容

JAVA_HOME=/usr/java/jdk1.7.0_15
CLASSPATH
=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH
=$JAVA_HOME/bin:$PATH


保存退出,执行如下命令立即生效以上环境配置

# source /etc/profile


JDK版本检测,执行:

# java – version

返回JDK版本信息

JBoss安装
JBoss为绿色版本,不需要安装,解压即可使用,和Tomcat一样,下面将JBoss目录移动到一个相对规范的位置,Root登陆执行

# mv /home/jboss-as-7.1.1.Final /usr/jboss-as-7.1.1.Final


OK,安装完毕,配置一下环境变量,执行

# vi /etc/profile


增加下面内容

JBOSS_HOME=/usr/jboss-as-7.1.1.Final


启动服务

# /usr/jboss-as-7.1.1.Final/bin/standalone.sh

访问,在浏览器地址栏中输入:http://127.0.0.1:8080,出现欢迎界面,证明启动成功!

停止服务
可以在启动终端窗口按键 CTRL + C,即可完全停止JBoss服务

局域网访问
http://xxx.xx.xx.xxx:8080是不能访问的,如果想让局域网内的其他机器访问必须要修改JBoss配置,方法如下:
编辑jboss-as-7.1.1.Final\standalone\configuration\standalone.xml,找到

<interface name="public">
    <inet-address value
="${jboss.bind.address:127.0.0.1}"/>
</interface>


127.0.0.1修改为JBoss所在机器的IP地址即可,但是依旧无法访问,是因为Linux防火墙没有开放8080端口,执行:

# vi /etc/sysconfig/iptables


发现有一行

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
复制它把22改成8080追加该行后面保存退出!

创建管理员用户

# ./add-user.sh

 

What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a):

回车

Enter the details of the new user to add.
Realm (ManagementRealm) :                      //回车,默认
Username :                                               // 管理员用户名,如:admin
Password :                                                // 管理员密码,如:jboss
Re-enter Password :                                  // 重复密码


管理员控制台访问

http://127.0.0.1:9990/console
如果也想在其他局域网机器上访问管理员控制台,防火墙需要开放端口9990,修改standalone.xml

<interface name="management">
  <inet-address value
="${jboss.bind.address.management:127.0.0.1}"/>
</interface>


同样将127.0.0.1修改为JBoss所在机器的IP地址

posted @ 2013-02-22 17:12 IceWee 阅读(5034) | 评论 (0)编辑 收藏

1、先用system和密码登陆SQLPLUS(如果不能直接以sys登陆到sqlplus的话),进入到sql*plus之后,可以通过conn /as sysdba转变为sysdba身份连接到数据库
2、开始修改编码
shutdown immediate;  // 停止oracle服务以及监听。如果服务停止,这部可省略
startup mount;
alter system enable restricted session;
alter system set job_queue_processes=0; // 初始化设置job
alter database open;
alter database character set internal_use utf8; //设置编码 (alter database character set internal_use ZHS16GBK;)(alter database character set internal_use WE8ISO8859P1;)
shutdown immediate;  // 关闭
startup;  // 重启
至此编码已经设置完成。

posted @ 2013-02-21 16:01 IceWee 阅读(307) | 评论 (0)编辑 收藏



基本信息
WLS版本:Oracle ® Weblogic Server 11g Release 1 (10.3.6)
安装包: jrockit-jdk1.6.0_37-R28.2.5-4.1.0-linux-x64.bin、wls1036_generic_x64.jar
操作系统:CentOS Release 6.3 (Final)
内核版本:Kernel Linux 2.6.32-279.el6.x86_64
JDK版本:Oracle ®JRockit JDK R28.2.5 for Java SE 6 (1.6.0_37)

安装准备
上传安装文件
将JDK和
WLS安装文件上传到服务器,目录随意,如:/home/下

开始安装
JDK安装
使用root登陆系统,打开命令行窗口,先为安装文件授权,自行进入安装文件所在目录,执行

# chmod a+x jrockit-jdk1.6.0_37-R28.2.5-4.1.0-linux-x64.bin


执行安装命令

# ./ jrockit-jdk1.6.0_37-R28.2.5-4.1.0-linux-x64.bin


弹出安装图形界面
 


Next


默认安装路径在root/jrockit-…,依个人习惯进行修改


保持默认,Next


Done


安装完成后在命令行执行命令查看安装JDK版本信息,执行
# java -version

如图

JDK配置
执行
# vi /etc/profile

在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL上面增加下面内容
export JAVA_HOME=/usr/java/jrockit-jdk1.6.0_37-R28.2.5-4.1.0 
export PATH
=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH 
export CLASSPATH
=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

保存退出,执行如下命令立即生效以上环境配置
# source /etc/profile


WLS安装
为全部用户授权,让全部用户具备执行安装文件的权限(Linux比较墨迹,习惯就好了),执行
# chmod a+x wls1036_generic_x64.jar

执行安装命令
# java –jar wls1036_generic_x64.jar

弹出图形化安装界面


Next


默认安装路径 /root/Oracle/middleware,可根据个人习惯修改,Next


取消勾选“I wish to…”,Next


取消勾选“I wish to…”,Continue


Yes


保持默认,典型安装,Next


默认选择上文配置好的JDK,Next


Next


Next


安装过程中


Done


弹出QUICKSTART窗口,点击“Getting started with…”


可以新建域或扩展已存在的,Next


Next


根据实际情况修改域名称,Next


输入管理员密码,要求8位以上,为了好记示例中用了weblogic11,Next


Next


Next


Create





配置完成


启动服务器
示例:
# cd /opt/oracle/Middleware/user_projects/domains/vcl_domain/bin
# ./startWebLogic.sh &

启动完成后可以进入管理员控制台部署WEB项目等操作,帐号weblogic/weblogic11
http://xxx.xxx.xx.xx:7001/console







posted @ 2013-02-18 17:02 IceWee 阅读(2881) | 评论 (1)编辑 收藏

基本信息

操作系统:CentOS Release 6.3 (Final)
内核版本:Kernel Linux 
2.6.32-279.el6.x86_64
Oracle版本:Oracle 11g Release2
安装包:linux.x64_11gR2_database_1of2.zip、linux.x64_11gR2_database_2of2.zip


安装准备

上传安装文件

将两个压缩文件覆盖解压后得到文件夹database,借助SSH工具上传到服务器上,目录如:/home/database

创建组

# groupadd dba
# groupadd oinstall

 
创建用户
 

# useradd –g oinstall –G dba oracle

 
修改用户密码  

# passwd oracle


创建安装目录

# mkdir -p /opt/oracle/product/11.2/db_1

# mkdir -p /opt/oraInventory

# mkdir -p /opt/oracle/oradata

# mkdir -p /var/opt/oracle


设置目录的所有者、所属组和权限

# chown -R oracle.oinstall /opt/oracle

# chown -R oracle.oinstall /opt/oracle/oradata

# chown -R oracle.oinstall /opt/oracle/product/11.2/db_1

# chown -R oracle.dba /opt/oraInventory

# chown oracle.dba /var/opt/oracle

# chmod -R 775 /opt/oracle

# chmod -R 755 /var/opt/oracle


设置用户oracle的环境变量

# su – oracle
# vim /home/oracle/.bash_profile


在文件中添加如下:

export ORACLE_BASE=/opt/oracle

export ORACLE_HOME
=$ORACLE_BASE/product/11.2/db_1

export ORACLE_SID
=orcl

export ORACLE_OWNER
=oracle

export ORACLE_TERM
=vt100

export PATH
=$PATH:$ORACLE_HOME/bin:$HOME/bin

export PATH
=$ORACLE_HOME/bin:$PATH

LD_LIBRARY_PATH
=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

export LD_LIBRARY_PATH

CLASSPATH
=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

CLASSPATH
=$CLASSPATH:$ORACLE_HOME/network/jlib

export CLASSPATH

PATH
=$PATH:/usr/sbin; export PATH

PATH
=$PATH:/usr/bin; export PATH

ORA_NLS33
=$ORACLE_HOME/nls/admin/data


保存退出,执行以下命令使得配置立刻生效或使用Oracle重登陆系统

# source $HOME/.bash_profile

 
开始安装

进入数据库安装文件(database文件夹)所在目录,如:/home/,为所有用户授权

# chmod –R 777 database

 

切换到oracle用户,使用oracle重登陆或使用下面命令切换用户

# su – oracle

 

进入database目录,运行安装文件开始安装

# ./runInstaller


进入图形化界面,一步步安装,取消勾选I wish…(依照个人),点击Next,弹出确认框再点Yes


三选一界面,选择第二项:Install database software only


保持默认:Singel instance database installation,点击Next
 
 
选择产品语言,默认英语,附加选择了简体中文,点击Next


选择数据库版本,默认企业版,点击Next


配置Oracle安装目录,由于安装前环境变量的配置,安装程序自动读取配置,自动选择好了Oracle Base和Software Location如图所示,点Next


同上,Oracle Inventory Directory目录也自动选择好了,oraInventory Group Name选择安装前创建的组dba,点击Next


保持默认,两个组都选择的dba,点击Next


装检查中


查结束,不满足条件列表


解决以上错误,新建命令行窗口,切换到root用户,需要输入root的密码

# su – root

修改进程数和最大会话数的设置,执行
# vi /etc/security/limits.conf

(在该文件的最后追加下面四行)
oracle   soft    nproc   2047
oracle   hard    nproc  
16384
oracle   soft    nofile
  1024
oracle   hard    nofile  
65536

系统内核参数设置
# vi /etc/sysctl.conf

(在该文件后追加以下内容)
kernel.sem = 250 32000 100 128
net
.ipv4.ip_local_port_range = 9000 65500
fs
.file-max = 6815744
net
.core.rmem_default = 262144
net
.core.rmem_max = 4194304
net
.core.wmem_default = 262144
net
.core.wmem_max = 1048576
fs
.aio-max-nr = 1048576

保存退出,立即生效执行:
# cd /etc
# sysctl -p

安装以下列表中的包(使用yum在线安装),其中pdksh-5.2.14没有找到,不安装也没有问题
-libaio-0.3.105(i386)
-libaio-devel-
0.3.105(i386)
-libaio-devel-
0.3.105(x86_64)
-glibc-
2.3.4-2.41(i686)
-compat-libstdc++-
33-3.2.3(i386)
-compat-libstdc++-
33-3.2.3(x86_64)
-gcc-c++-
3.4.6(x86_64)
-elfutils-libelf-devel-
0.97(x86_64)
-libgcc-
3.4.6(i386)
-libstdc++-
3.4.6(i386)
-unixODBC-
2.2.11(i386)
-unixODBC-
2.2.11(x86_64)
-unixODBC-devel-
2.2.11(i386)
-unixODBC-devel-
2.2.11(x86_64)
-pdksh-
5.2.14(x86_64)

以上步骤完成后点击按钮Check Again,发现不满足列表并没有清除,而是少了一些,此时勾选右侧复选框Ignore all即可向下安装了,直到安装完成。


安装监听器

使用oracle用户登陆系统或在命令行窗口切换到oracle用户,执行
# netca

进入图形化配置,直接默认下一步,到最后完成,其中你也可以修改监听去的名称,协议,端口。




 








 




安装完成后可以使用如下命令来查看监听是否配置成功
# ps –ef


安装数据库程序

执行

# dbca


进入图形化配置界面,几乎全Next








配置全局数据库名称,如果该服务器只安装这一个数据库建议使用orcl,鉴于习惯作




备配置四个内置超级管理员密码,建议统一密码,便于记忆用

提示密码过于简单,不管它,点击Yes














到这数据库实例就算创建完成了!并且会自动启动!
PS:10g客户端连接11g服务器需要手动修改客户端文件,如下:

X:\oracle\product\10.2.0\client_1\network\ADMIN


文件名:
tnsnames.ora
修改前不要忘记备份原文件,手动配置要连接的11g数据库连接信息,如:

ORCL_11g =
  (DESCRIPTION
=
    (ADDRESS_LIST
=
      (ADDRESS
= (PROTOCOL = TCP)(HOST = 172.25.78.88)(PORT = 1521))
    )
    (CONNECT_DATA
=
      (SID
= orcl)
      (SERVER
= DEDICATED)
    )
  )


其中:
ORCL_11g为本地连接服务名
172.25.78.88为数据库所在服务器IP
你会发现CONNECT_DATA内部和10g的配置不同,这就是区别,导致PL/SQL连不上11g




 

posted @ 2013-01-30 16:56 IceWee 阅读(19797) | 评论 (2)编辑 收藏

 
此问题一般发生在Myeclipse 保存文件并自动部署时候。
Errors occurred during the build.
Errors running builder 'DeploymentBuilder' on project '项目名'.
java.lang.NullPointerException

有一种产生此错误的原因是因为此项目不不是由myeclipse创建的。
所以你需要检查.project 文件。
并且添加 <nature>com.genuitec.eclipse.j2eedt.core.webnature</nature>


然后重新打开项目。

posted @ 2012-09-27 10:27 IceWee 阅读(9149) | 评论 (0)编辑 收藏

出现以下异常信息,一般删除下Tomcat的work目录即可
严重: IOException while loading persisted sessions: java.io.EOFException
java
.io.EOFException
    at java
.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java
.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java
.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java
.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org
.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
    at org
.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
    at org
.apache.catalina.session.StandardManager.load(StandardManager.java:204)
    at org
.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
    at org
.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org
.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5282)
    at org
.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org
.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
    at org
.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
    at org
.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
    at org
.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:649)
    at org
.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1585)
    at java
.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java
.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java
.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java
.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java
.lang.Thread.run(Thread.java:662)
2012-7-12 10:08:04 org.apache.catalina.session.StandardManager startInternal
严重
: Exception loading sessions from persistent storage
java
.io.EOFException
    at java
.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java
.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java
.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java
.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org
.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
    at org
.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
    at org
.apache.catalina.session.StandardManager.load(StandardManager.java:204)
    at org
.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
    at org
.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org
.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5282)
    at org
.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org
.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
    at org
.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
    at org
.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
    at org
.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:649)
    at org
.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1585)
    at java
.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java
.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java
.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java
.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java
.lang.Thread.run(Thread.java:662)

posted @ 2012-07-12 10:15 IceWee 阅读(705) | 评论 (0)编辑 收藏

多系统(异构系统)进行交互时,一种良好的方式便是调用Web Service,本示例基于Apache组织的CXF,为了方便起见特将服务端和客户端写在同一个工程下,实际项目中是不可能的,但是客户端却依赖于服务端的Web Service接口,那么可以通过导出jar的方式。

环境:
MyEclipse10
JDK6
Tomcat7
CXF2.5
Spring3

示例项目结构图:


如上图所示,全部依赖的第三方库都在lib中,下面贴出全部代码。
IHelloService.java
package bing.server;

import javax.jws.WebService;

/**
* <p>
* WebService接口
* </p>
*
*
@author IceWee
* @date 2012-7-6
*
@version 1.0
*/

@WebService
public interface IHelloService {

   
public String sayHello(String username);
   
}


HelloServiceImpl.java
package bing.server;

import javax.jws.WebService;

/**
* <p>
* WebService实现类
* </p>
*
*
@author IceWee
* @date 2012-7-6
*
@version 1.0
*/

@WebService(endpointInterface
= "bing.server.IHelloService", serviceName = "HelloService")
public class HelloServiceImpl implements IHelloService {

    @Override
   
public String sayHello(String username) {
       
return "hello, " + username;
    }


}


HelloServiceClient.java
package bing.client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import bing.server.IHelloService;

/**
* <p>
* WebService调用方-客户端
* </p>
*
*
@author IceWee
* @date 2012-7-6
*
@version 1.0
*/

public class HelloServiceClient {

   
public static void main(String[] args) {
        ApplicationContext context
= new ClassPathXmlApplicationContext("applicationContext-client.xml");
        IHelloService helloService
= (IHelloService) context.getBean("client");
        String response
= helloService.sayHello("Peter");
        System.out.println(response);
    }


}


applicationContext-server.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws
="http://cxf.apache.org/jaxws"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans.xsd
                       http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
>
   
<!--
        ***注意***
        手动添加的内容:
        xmlns:jaxws="http://cxf.apache.org/jaxws"
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
    
-->
   
   
<import resource="classpath:META-INF/cxf/cxf.xml" />
   
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
   
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

   
<jaxws:endpoint id="helloService" implementor="bing.server.HelloServiceImpl" address="/helloService" />
       
</beans>

applicationContext-client.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws
="http://cxf.apache.org/jaxws"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans.xsd
                       http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
>
   
<!--
        ***注意***
        手动添加的内容:
        xmlns:jaxws="http://cxf.apache.org/jaxws"
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
    
-->
   
   
<import resource="classpath:META-INF/cxf/cxf.xml" />
   
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
   
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

   
<bean id="client" class="bing.server.IHelloService" factory-bean="clientFactory" factory-method="create" />

   
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
       
<property name="serviceClass" value="bing.server.IHelloService" />
       
<property name="address" value="http://localhost:8080/CXFDemo/ws/helloService" />
   
</bean>
</beans>

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns
="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
>
 
<display-name>CXFDemo</display-name>
 
 
<context-param>
     
<param-name>contextConfigLocation</param-name>
     
<param-value>classpath:applicationContext-server.xml</param-value>
 
</context-param>

 
<listener>
   
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 
</listener>
 
 
<servlet>
   
<servlet-name>CXFServlet</servlet-name>
   
<display-name>CXFServlet</display-name>
   
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
   
<load-on-startup>1</load-on-startup>
 
</servlet>
 
<servlet-mapping>
   
<servlet-name>CXFServlet</servlet-name>
   
<url-pattern>/ws/*</url-pattern>
 
</servlet-mapping>
 
<welcome-file-list>
   
<welcome-file>index.jsp</welcome-file>
 
</welcome-file-list>
</web-app>

所有项目都已配置完成,可以发布到Tomcat了,在浏览器中输入:http://localhost:8080/CXFDemo/ws,返回如图:


从上图中可以看到我们对外发布的WebService接口,点击蓝色超链接,返回如图:

到此,证明我们的Web Service已经发布成功,可以进行调用测试了。运行HelloServiceClient,返回如图:


全文完!


























posted @ 2012-07-06 17:29 IceWee 阅读(51136) | 评论 (27)编辑 收藏

本演示例程是继Java Tomcat SSL 服务端/客户端双向认证(一),密钥库可证书的生成脚本不再重复黏贴,仅仅是用程序来代替浏览器访问服务端。
例程中使用到了Apache HttpClient库,版本为4.1.3
全部依赖库:
commons-logging-1.1.1.jar
httpclient-4.1.3.jar
httpcore-4.1.4.jar
httpmime-4.1.3.jar(上传文件使用)

在(一)中的程序包中创建一个客户端类:HttpsClient
HttpsClient.java
package com.icesoft.client;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.KeyStore;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class HttpsClient {
   
   
private static final String KEY_STORE_TYPE_JKS = "jks";
   
private static final String KEY_STORE_TYPE_P12 = "PKCS12";
   
private static final String SCHEME_HTTPS = "https";
   
private static final int HTTPS_PORT = 8443;
   
private static final String HTTPS_URL = "https://127.0.0.1:8443/HttpClientSSL/sslServlet";
   
private static final String KEY_STORE_CLIENT_PATH = "E:/ssl/client.p12";
   
private static final String KEY_STORE_TRUST_PATH = "E:/ssl/client.truststore";
   
private static final String KEY_STORE_PASSWORD = "123456";
   
private static final String KEY_STORE_TRUST_PASSWORD = "123456";

   
public static void main(String[] args) throws Exception {
        ssl();
    }

   
   
private static void ssl() throws Exception {
        HttpClient httpClient
= new DefaultHttpClient();
       
try {
            KeyStore keyStore 
= KeyStore.getInstance(KEY_STORE_TYPE_P12);
            KeyStore trustStore 
= KeyStore.getInstance(KEY_STORE_TYPE_JKS);
            InputStream ksIn
= new FileInputStream(KEY_STORE_CLIENT_PATH);
            InputStream tsIn
= new FileInputStream(new File(KEY_STORE_TRUST_PATH));
           
try {
                keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray());
                trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());
            }
finally {
               
try { ksIn.close(); } catch (Exception ignore) {}
               
try { tsIn.close(); } catch (Exception ignore) {}
            }

            SSLSocketFactory socketFactory
= new SSLSocketFactory(keyStore, KEY_STORE_PASSWORD, trustStore);
            Scheme sch
= new Scheme(SCHEME_HTTPS, HTTPS_PORT, socketFactory);
            httpClient.getConnectionManager().getSchemeRegistry().register(sch);
            HttpGet httpget
= new HttpGet(HTTPS_URL);
            System.out.println(
"executing request" + httpget.getRequestLine());
            HttpResponse response
= httpClient.execute(httpget);
            HttpEntity entity
= response.getEntity();
            System.out.println(
"----------------------------------------");
            System.out.println(response.getStatusLine());
           
if (entity != null) {
                System.out.println(
"Response content length: " + entity.getContentLength());
                BufferedReader bufferedReader
= new BufferedReader(new InputStreamReader(entity.getContent()));
                String text;
               
while ((text = bufferedReader.readLine()) != null) {
                    System.out.println(text);
                }

                bufferedReader.close();
            }

            EntityUtils.consume(entity);
        }
finally {
            httpClient.getConnectionManager().shutdown();
        }

    }


}



启动Tomcat,运行HttpsClient,控制台返回:


OK,和使用浏览器访问得到的结果一模一样!

全文完!

posted @ 2012-06-05 09:32 IceWee 阅读(5213) | 评论 (1)编辑 收藏

     摘要: SSL——Secure Sockets Layer双向认证(个人理解):客户端认证:客户端通过浏览器访问某一网站时,如果该网站为HTTPS网站,浏览器会自动检测系统中是否存在该网站的信任证书,如果没有信任证书,浏览器一般会拒绝访问,IE会有一个继续访问的链接,但地址栏是红色,给予用户警示作用,即客户端验证服务端并不是强制性的,可以没有服务端的信任证书,当然是否继续访问完全取...  阅读全文

posted @ 2012-06-04 17:36 IceWee 阅读(32892) | 评论 (22)编辑 收藏