2007年6月12日

websphere/weblogic/tomcat/applet 设置远程调试


websphere:
管理控制台(administractive console)->应用程序服务器(application server)->服务器名(如server1)->调试服务(Debug service)->启动(勾上),其它默认,记住JVM调试端口->保存重启
netstat -a查看JVM调试端口是否处于监听状态,以确保调试服务已启动

weblogic:
修改startWeblogic.bat
set PRODUCTION_MODE=true/false
set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n
或(set DEBUG_OPTS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=7009,suspend=n)
然后在启动命令中加入%DEBUG_OPTS%,如%JAVA_HOME%\bin\java %DEBUG_OPTS%...-Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE%...

tomcat:
修改tomcat/bin/的catalina.bat文件
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5888
如在linux下,则
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5888"
也就是把SET去掉,后面加双引号引起来,

在eclipse中,
debug->open debug dialog->
设置好project ,host和port就行了,port就是以上配置的端口号(address)

applet:

1. 在程序运行机器上为Applet程序启动时自动开启JDWP服务。

$>cd $JAVA_HOME/bin

$>./ControlPanel

在 随后弹出的Java Control Panel对话框中,选择Java Tab页,在Java Applet Runtime Settings项中点击View按钮,在弹出的Java Runtime Versions对话框中设置Java Runtime Parameters为:

-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

注:Windows上可到控制面板中运行Java控制面板程序打开Java Control Panel对话框。

2. 在Eclipse中建立Java Service Client程序的工程,使其包含需要调试的源代码。编译打包目标代码并拷贝到上一步设置好的机器上的相应目录中。注意编译时要选择打开debug模式 (确保javac的调试相关参数为-g或没有。如果使用Eclipse编译,请使用Eclipse的相关设置,Eclipse默认的编译选项是打开 debug选项的)。

3.在设置好的机器上启动目标程序。

4.在Eclipse中使用Debug对话框("Run"->"Debug")建立一个Remote Java Application调试项目。填入下列信息:

Host:程序执行机器的IP地址

Port:8000 (就是是第一步设置的address参数)

启动这个调试项目。


提示:如果将suspend参数设为y,则每次启动程序都会自动挂起,直到远程调试机器连接上后才继续执行。这样就可以从程序入口处单步跟踪程序的执行过程了。


posted @ 2008-09-10 12:12 hardson 阅读(2361) | 评论 (0)编辑 收藏

用户组及sudoers权限问题

1、列出所属用户组:
groups
2、sudo chmod u+w /etc/sudoers后,不能再执行sudo命令,提示sudo 的 mode 为0640,应该是0440。此时系统不能以root用户登录到gnome,不能更改sudoers权限。于是在xp下载了Paragon Ext2FS Anywhere 3.0安装并修改/boot/grub/menu.list文件,使启动延时设为3(原来为了快速启动,设为0,导致不能选择linux启动菜单),重启进入ubuntu启动菜单,选择recover模式,进入后又一个菜单,选择进入root命令行模式(此时root尚未设置密码,后来设了),执行chmod u-w /etc/sudoers后进入正常模式ubuntu,一切恢复正常
3、装了db2后,以实例用户登录管理数据库,实例db2inst1不能执行root权限,很不方便。可以把db2inst1加入admin组后重启,就可以执行sudo了。
sudo usermod -G  admin db2inst1(如果是-g,则会替换现有的组,所以必须是-G才能追加)
或者在系统管理/用户和组里管理用户和组。


posted @ 2008-05-21 02:50 hardson 阅读(705) | 评论 (0)编辑 收藏

db2 9.5 express 在ubuntu下的图形安装及中文处理

参照http://wiki.ubuntu.org.cn/Java%E4%B8%AD%E6%96%87%E6%94%AF%E6%8C%81
1、下载db2exc_950_LNX_x86.tar.gz和语言包支持(中文支持需要这个包)db2_v95_linuxia32_nlpack.tar.gz
2、将上面两个包考至/opt/并解压
3、在系统管理的语言支持那里转入英文环境(中文环境无法显示中文),重启。
4、在安装目录直接sudo ./db2setup按提示安装。
5、复制微软字体simsun.ttc到/usr/share/fonts/truetype/songti/下,songti目录随便建。
6、进入db2的java安装目录中的/opt/ibm/db2/V9.5/java/jdk32/jre/lib,sudo cp ./fontconfig.RedHat.3.properties.src ./fontconfig.properties
(注:使用fontconfig.RedHat.5.properties.src不成功,没有偿试使用fontconfig.RedHat.4.properties.src)
7、sudo gedit ./fontconfig.properties
把第一部分的allfonts...改成
# 中文字体支持部分=====
allfonts.chinese-gb18030=-songti yuanti-medium-r-normal--*-%d-*-*-*-*-iso10646-1
allfonts.chinese-gb18030.motif=-songti-medium-r-normal--*-%d-*-*-*-*-gb2312.1980-0
allfonts.chinese-big5=-songti-medium-r-normal--*-%d-*-*-*-*-iso10646-1
allfonts.chinese-big5.motif=-songti-medium-r-normal--*-%d-*-*-*-*-gb18030.2000-0
# =====中文字体支持部分
8、在后面的filename.部分的后面加入
# 中文字体支持部分=====
filename.-songti-medium-r-normal--*-%d-*-*-*-*-iso10646-1=/usr/share/fonts/truetype/songti/simsun.ttc
filename.-songti-medium-r-normal--*-%d-*-*-*-*-gb2312.1980-0=/usr/share/fonts/truetype/songti/simsun.ttc
filename.-songti-medium-r-normal--*-%d-*-*-*-*-gb18030.2000-0=/usr/share/fonts/truetype/songti/simsun.ttc
# =====中文字体支持部分
9、保存后用实例用户登录,在sqllib/bin/db2cc,中文出来了

注:如果是64位系统,下载64位的db2安装文件和安装语言包,安装前先执行如下命令
 
sudo apt-get install libstdc++5
sudo apt-get install libaio-dev

如果开启了特效,安装图形界面会显示空白,必须关掉特效来安装

posted @ 2008-05-13 01:09 hardson 阅读(1566) | 评论 (0)编辑 收藏

非基本数据类型对象列表比较器

写了一个比较器,实现功能如下:
有列表List list,list存放对象(如Person p等),对象里面有若干属性。
要求对列表按照列表对象的某个属性进行排序。列表对象类型未知,对象属性未知。
通过通知比较器列表对象类型和排序字段,以及升序或降序,来对列表进行排序
(其实就是实现复杂对象列表排序)
注:由于实际应用中,要排序的列表结果集已经得到,程序应用没有错误或异常,
比较器只实现排序功能,因此在比较器中封闭异常

本人实现代码如下,希望大家提供一些意见来完善

//比较器总接口类
package myutil.comparator;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Comparator;

public abstract class ListComparator implements Comparator{
    public static final int DATATYPE_STRING=1;//字符串类型
    public static final int DATATYPE_DOUBLE=2;//双精度浮点型
    public static final int DATATYPE_DATE=3;//日期类型
   
    public static final int ORDER_ASC=100;//顺序
    public static final int ORDER_DESC=101;//倒序

    protected String colName="";//被比较的属性名称
    protected Class cl=null;//被比较的列表对象的类型
    protected int order=ORDER_ASC;//顺序或倒序,默认为顺序

       
    /**
     * 比较器的比较方法,在子类中实现
     */
    public abstract int compare(Object o1, Object o2);
       
    /**
     * 获取两个比较对象的指定属性(colName)的值
     * @param obj1 要比较的一个对象
     * @param obj2 要比较的另一个对象
     * @return Object[],被比较的两个对象中指定属性的值的数组
     */
    protected Object[] getValueObj(Object obj1,Object obj2){
        if(obj1==null || obj2==null)
            return null;
        try {           
            int first=colName.charAt(0)-32;//获得字段名的首字母,并转化成大写
            String mName="get"+(char)first+colName.substring(1);//获得字段的获取方法
            Method m = cl.getMethod(mName,null);//构造方法对象
            Object val1=m.invoke(obj1,null);//调用方法,得到对象1的colName属性值
            Object val2=m.invoke(obj2,null);//调用方法,得到对象2的colName属性值
            return new Object[]{val1,val2};//返回对象数组
        }  catch (NoSuchMethodException e) {           
            e.printStackTrace();
        } catch (IllegalArgumentException e) {           
            e.printStackTrace();
        } catch (IllegalAccessException e) {           
            e.printStackTrace();
        } catch (InvocationTargetException e) {           
            e.printStackTrace();
        }       
        return null;
    }   

    /**
     * 交换两个对象,用于控制升序或降序
     * @param obj1
     * @param obj2
     * @return
     */
    protected Object[] swap(Object obj1,Object obj2){
        if(this.order==ORDER_DESC){
            Object oTmp=obj1;
            obj1=obj2;
            obj2=oTmp;           
        }
        return new Object[]{obj1,obj2};
    }
    /**
     * @return 排序方式(顺序/倒序)
     */
    public final int getOrder() {
        return order;
    }

    /**
     * @param 排序方式(顺序/倒序)
     */
    public final void setOrder(int order) {
        this.order = order;
    }
   
   
    /**
     * @return 列表包装类型
     */
    public final Class getCl() {
        return cl;
    }

    /**
     * @param 列表包装类型
     */
    public final void setCl(Class cl) {
        this.cl = cl;
    }

    /**
     * @return 排序字段
     */
    public final String getColName() {
        return colName;
    }

    /**
     * @param 排序字段
     */
    public final void setColName(String colName) {
        this.colName = colName;
    }
   
    public String toString(){
        StringBuffer buf=new StringBuffer();
        buf.append("Column Name(colName):").append(this.colName).append(";");
        buf.append("Class In List Name(c1):").append(cl.getName()).append(";");
        buf.append("Order Type(order):").append(this.order).append(".");
        return buf.toString();
    }
}

//工厂类
package myutil.comparator;

public class ListComparatorFactory {
   
    public static final ListComparator getListComparator(int dataType){
       
        switch(dataType){
        case ListComparator.DATATYPE_STRING:
            return new StringListComparator();
        case ListComparator.DATATYPE_DOUBLE:
            return new NumberListComparator();
        case ListComparator.DATATYPE_DATE:
            return new DateListComparator();
        default:           
            return new DefaultListComparator();
        }       
    }   
}
//默认实现类
package myutil.comparator;

public class DefaultListComparator extends ListComparator{
   
    public int compare(Object obj1, Object obj2) {
        Object swapObj[]=this.swap(obj1,obj2);
        Object obj[]=this.getValueObj(swapObj[0],swapObj[1]);
        if(obj==null)
            return 0;
        Comparable cmp1=(Comparable)obj[0];
        Comparable cmp2=(Comparable)obj[1];
        return cmp1.compareTo(cmp2);       
    }
   
    public String toString(){       
        return super.toString();
    }
   
}


//比较字段为日期型的实现类
package myutil.comparator;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateListComparator extends ListComparator{
   
    public int compare(Object obj1, Object obj2) {
        Object swapObj[]=this.swap(obj1,obj2);
        Object obj[]=this.getValueObj(swapObj[0],swapObj[1]);
        if(obj==null)
            return 0;
        DateFormat format=new SimpleDateFormat("yyyyMMddhhmmss");
        Comparable cmp1,cmp2;
        try{
            cmp1=format.parse(obj[0]==null?"00000000000000":obj[0].toString());           
        }catch(ParseException pe){
            cmp1=new Date(0);
        }
        try {
            cmp2=format.parse(obj[1]==null?"00000000000000":obj[1].toString());
        } catch (ParseException e) {
            cmp2=new Date(0);
        }
        return cmp1.compareTo(cmp2);       
    }
   
    public String toString(){       
        return super.toString();
    }
   
}
//比较字段为数字型的实现类,兼容整数,浮点数
package myutil.comparator;

public class NumberListComparator extends ListComparator{
   
    public int compare(Object obj1, Object obj2) {
        Object swapObj[]=this.swap(obj1,obj2);
        Object obj[]=this.getValueObj(swapObj[0],swapObj[1]);
        if(obj==null)
            return 0;
        Comparable cmp1,cmp2;
        try{
            cmp1=new Double(obj[0]==null?"0":obj[0].toString());
        }catch(NumberFormatException nfe){
            cmp1=new Double(0);
        }
        try{
            cmp2=new Double(obj[1]==null?"0":obj[1].toString());
        }catch(NumberFormatException nfe){
            cmp2=new Double(0);
        }
        return cmp1.compareTo(cmp2);       
    }
   
    public String toString(){       
        return super.toString();
    }
   
}

//比较字段为字符串型的实现类
package myutil.comparator;

public class StringListComparator extends ListComparator{
   
    public int compare(Object obj1, Object obj2) {
        Object swapObj[]=this.swap(obj1,obj2);
        Object obj[]=this.getValueObj(swapObj[0],swapObj[1]);
        if(obj==null)
            return 0;
        Comparable cmp1=obj[0]==null?"":obj[0].toString();
        Comparable cmp2=obj[1]==null?"":obj[1].toString();
        return cmp1.compareTo(cmp2);       
    }
   
    public String toString(){       
        return super.toString();
    }
   
}

//应用测试示例
package myutil.comparator.test;

public class MyFile {

    private int age;
    /**
     * @return the age
     */
    public final int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public final void setAge(int age) {
        this.age = age;
    }

    public void display() {
        // TODO Auto-generated method stub
       
    }

    public String toString(){
        return String.valueOf(age);
    }
}

package myutil.comparator.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import myutil.comparator.ListComparator;
import myutil.comparator.ListComparatorFactory;


public class SortTest {

    public List doIt(){
        List list=new ArrayList(10);   
        Random ran=new Random();
        for(int i=0;i<10;i++){
            MyFile mf=new MyFile();
            mf.setAge(ran.nextInt(100));
            list.add(mf);
        }
        return list;

    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        SortTest t=new SortTest();
        List list=t.doIt();
        ListComparator cm=ListComparatorFactory.getListComparator(ListComparator.DATATYPE_DOUBLE);
        cm.setColName("age");
        cm.setCl(MyFile.class);
        System.out.println(cm);
        cm.setOrder(ListComparator.ORDER_DESC);
        Collections.sort(list,cm);
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }

}



posted @ 2007-06-12 10:54 hardson 阅读(1271) | 评论 (1)编辑 收藏

<2007年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜