随意心情
===========================================================
批量测试FlashFXP的站点文件
===========================================================

批量测试FlashFXP的站点文件

GzlLm@msn.com

一、起因

个人FTP站点资源太多,开始的时候整理比较简单,但是随着有些论坛的关闭,一些FTP的转型等原因,导致站点管理器里面的站点信息相对的混乱,特别是有很多密码不正确,或者ftp地址更改,端口更改等情况,如果想一一测试所有的站点,费时又费事,于是就考虑花半天的时间自己写个小program来解决这个问题。

二、计划

FlashFTP的站点文件为Sites.dat文件,所有的站点信息都记录在这个文件中,包括分组信息。sites.dat文件结构比较简单,用ultraedit直接打开的话,是看到一个文本文件转换成十六进制编辑模式就能看到一点不同了,一个站点名,包括其目录名都在一个"[]",例如目录abc下的子目录def下的站点sitename(以上信息部分摘录于互联网)。了解了sites.dat的结构,再需要考虑的是ip的转换,现在的ip地址的表现方式有几种,域名可以等同于ip地址,不过如果ip地址经过了如下方式的编码,程序在解析的时候就会出问题:

public String encodeIP(String ip) {

long ip1 = Long.parseLong(ip.split(".")[0]) * 256 * 256 * 256;

long ip2 = Long.parseLong(ip.split(".")[1]) * 256 * 256;

long ip3 = Long.parseLong(ip.split(".")[2]) * 256;

long ip4 = Long.parseLong(ip.split(".")[3]);

return Long.toString(ip1 + ip2 + ip3 + ip4);

}

这样编码的ip地址会变成全部数字的字符串,可以考虑使用:

public String decodeIP(String ip) {

long ip1 = Long.parseLong(ip) / 256 / 256 / 256;

long ip2 = (Long.parseLong(ip) - ip1 * 256 * 256 * 256) / 256 / 256;

long ip3 = (Long.parseLong(ip) - ip1 * 256 * 256 * 256 - ip2 * 256 * 256) / 256;

long ip4 = (Long.parseLong(ip) - ip1 * 256 * 256 * 256 - ip2 * 256

* 256 - ip3 * 256) % 256;

return ip1 + "." + ip2 + "." + ip3 + "." + ip4;

}

进行解析,不过有些地址在解析的时候会出现问题,例如以0开头的ip地址字符串等,根据以上情况,直接调用ping命令来获取ip地址,我觉得应该算是一个很简便的方法了,在这个问题上追求的不是速度,而是准确。

另外为了小程序维护分发的方便,不考虑使用第三方的FTP的包,而直接使用
sun.net.ftp.FtpClient;

sun.net.ftp.FtpLoginException;

sun.net.ftp.FtpProtocolException;

以上三个类

三、实现

1、备份原来的sites.dat文件,加上时间戳,避免文件备份被覆盖

File fbak = new File(Tester.SITE_FILENAME + "."

+ Calendar.getInstance().getTime().getTime() + ".bak");

2sites.dat文件的获取。遍历一边sites.dat文件,获取到站点信息包括获取到正确的ip地址,获取ip地址的方法如下:

public String getRealIp(String ip) {

String realip = ip;

Process process = null;

BufferedReader bufferedReader = null;

try {

process = Runtime.getRuntime().exec("ping " + ip);

bufferedReader = new BufferedReader(new InputStreamReader(process

.getInputStream()));

String linedata = null;

while ((linedata = bufferedReader.readLine()) != null) {

if (linedata.startsWith("Pinging")) {

realip = linedata.split(" ")[1];

break;

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

bufferedReader.close();

} catch (IOException e) {

e.printStackTrace();

}

bufferedReader = null;

process = null;

}

return realip;

}

3、站点名称有些麻烦,一个站点名,包括其目录名都在一个"[]"中例如目录abc下的子目录def下的站点sitename

String[] name=new String[]{"abc","def","sitename"}来表示

那么在sites.dat文件中应该写入的内容如下result

代码:

StringBuffer result = new StringBuffer();

result.append("[");

int len = name.length;

for (int j = 0; j < len - 1; j++) {

if (name[j] != null && !name[j].equals(""))

result.append((char) 0x7f + name[j] + (char) 0x1e + (char) 0x20);

}

result.append(name[len - 1] + "]");

还一个要注意的是站点的注释中

回车要用0x01来替换

我自己处理的时候没有在网上看到上面的信息,所以直接用了点傻的方法,直接读取全部的包括了分组信息的站点名,然后在构造站点信息数据的类中,再进一步的分解成为组名称和站点名称。

以下子为SiteDate的构造器:

public SiteData(String fullName) {

this.setFullName(fullName);

if (fullName.startsWith("[")) {// 这个site属于一个分组

int lastindex = fullName.lastIndexOf("");

String tempStr = fullName.substring(lastindex + 1);

this.setGroupName(fullName.substring(0, lastindex + 1)

+ tempStr.substring(0, tempStr.indexOf(" ") + 1));

this.setSiteName(getRealSiteName(tempStr.substring(tempStr

.indexOf(" ") + 1)));

} else {

this.setGroupName("[");

this.setSiteName(getRealSiteName(fullName.substring(fullName

.indexOf("[") + 1)));

}

}

public String getRealSiteName(String siteName) {

String siterealname = siteName;

if (siterealname.indexOf("|") >= 2

&& siterealname.indexOf("|") != siterealname.lastIndexOf("|")) {

siterealname = siteName.substring(0, siterealname.indexOf("|") - 2)

+ siteName.substring(siterealname.lastIndexOf("|") + 1);

}

return siterealname;

}

4、再就是对站点数据文件中的站点密码信息解密,采用了网友kanbol

* 经写了一个解码flashfxp密码的方法:

private static final char[] FlashFXP_Key = "yA36zA48dEhfrvghGRg57h5UlDv3"

.toCharArray();

public String decodePWD(String input) {

if (input.equals("") || input == null)

return "";

StringBuffer result = new StringBuffer();

char[] inputArr = input.toCharArray();

for (int i = 0; i < inputArr.length - 2; i = i + 2) {

String source = "" + inputArr[i + 2] + inputArr[i + 3];

String key = ""

+ Integer.toHexString((byte) (FlashFXP_Key[i / 2 % 28]));

String magic_number = "" + inputArr[i] + inputArr[i + 1];

int chr = (Integer.parseInt(source, 16) ^ Integer.parseInt(key, 16))

- Integer.parseInt(magic_number, 16);

if (chr < 0) {

chr = chr + 255;

}

result.append((char) chr);

}

return result.toString();

}

5、最后就是测试站点信息,并将反馈的结果修改原来的站点的文件名(这里需要注意,只能修改原来的站点名,不能修改组的名字,否则会将分组信息打乱)。测试的时候处理连接到服务器的各种异常是关键:

try {

fc = new FtpClient(hostname, port);

System.out.print("登录...");

fc.login(uid, pwd);

System.out.print("退出服务器...");

fc.sendServer("QUITrn");

System.out.println("n测试成功:" + sd.getFullName());

System.out.println();

} catch (FtpLoginException e) {

msg = "nFtpLoginException|" + hostname + "登录失败!请检查用户名或密码是否正确n";

System.out.println(msg);

retResult = 1;

// return false;

} catch (ConnectException e) {

msg = "nConnectException|" + hostname + "连接失败!找不到主机n";

System.out.println(msg);

retResult = 0;

} catch (SocketException e) {

msg = "nSocketException|" + hostname + "连接失败!网络连接失败n";

System.out.println(msg);

retResult = 4;

} catch (UnknownHostException e) {

msg = "nUnknownHostException|" + hostname + "解析成为IP地址失败!n";

System.out.println(msg);

retResult = 3;

// return false;

} catch (FtpProtocolException e) {

msg = "nFtpProtocolException|连接主机:" + hostname + "失败!请检查端口是否正确n";

System.out.println(msg);

retResult = 6;

// return false;

} catch (IOException e) {

e.printStackTrace();

msg = "nIOException|连接主机:" + hostname + "失败!请检查端口是否正确n";

System.out.println(msg);

retResult = 5;

// return false;

} catch (SecurityException e) {

msg = "nSecurityException|无权限与主机:" + hostname + "连接!请检查是否有访问权限n";

System.out.println(msg);

retResult = 2;

// return false;

} finally {

fc = null;

}

6、根据以上的几种异常和反馈结果,来重新命名站点文件,并写入新的站点文件中。

switch (returnint) {

case -1:

break;

case 0:

preStr = "00|ConnectFalse|";

break;

case 1:

preStr = "01|PasswordError|";

break;

case 2:

preStr = "02|NoPrivileg|";

break;

case 3:

preStr = "03|UnknownHost|";

break;

case 4:

preStr = "04|SocketError|";

break;

case 5:

preStr = "05|IOException|";

break;

case 6:

preStr = "06|FtpProtocolError|";

break;

default:

preStr = "*|UnknowError|";

break;

}

四、扩展

已经登录FTP,想获取文件啥的,就看个人的考虑了,原先曾经考虑做一个所有ftp的文件列表,存放到本地,在需要的时候可以进行本地文件查询(以前就出现过我在一个ftp上看到一个文件,当时没有想到下载,不过等我需要的时候,却怎么也找不到那个ftp,如果上天再给我一个重来一次的机会,我会download,如果非要给下载的文件大小加一个限制,我希望是10000G……),不过这样就超出我这个小程序的预期目的了,所以就不多此一举了,够用就行。


gzllm 发表于:2005.12.22 13:25 ::分类: ( 生活 ) ::阅读:(1765次) :: 评论 (1)
===========================================================
更新:Becky Ver.2.24.02 主文件汉化
===========================================================

■ 声明

☆ 本汉化纯粹方便个人使用,无意取代其他的更好汉化版本,是否取用根据个人需要

☆ 本程序仅作研究和学习之用,在Windows 98/Me/2K/XP测试通过,经严格测试无毒,请勿用于非法用途,制作者不保证你所使用本补丁的安全性,稳定性以及合法性,对于使用本程序所造成的一切后果以及法律纠纷,补丁制作者概不负责 。

☆ 不要随意对这个版本中的相关文件进行 脱壳,反汇编,更改资源等等可能损坏原文件的行为 否则可能导致程序的崩溃或者其他未知后果

☆ 如您不同意以上声明,请立刻删除本程序。

■ 安装说明:
本文件为单个汉化文件,需要先下载原版Becky 2.24.02版本,然后安装后,用汉化压缩包内的b2.exe覆盖安装路径下同名文件,覆盖前建议备份原b2.exe文件.

■原版下载地址:http://www5a.biglobe.ne.jp/~rimarts/B2/bk22402.zip
■汉化主文件下载地址:http://blog.dream4ever.org/Files/gzllm/B2.rar


Ver.2.24.01 -> Ver.2.24.02 (2005/12/16)
- 修复BUG: 在过滤规则中, 只从Ver.2.23开始,多个信件头"未找到"功能不正常的工作.
- 修复BUG: 当提醒消息匹配"复制到文件夹"过滤规则时候非正常的终止.

Ver.2.24 -> Ver.2.24.01 (2005/12/11)
- 修复BUG: 2.24版本中"同步到移动媒体" 命令异常中止.
- 如果你在文件夹属性中改变"允许 IE 组件" 和 "允许图片" 选项,他们中的一个将不会更改.

Ver.2.23 -> Ver.2.24 (2005/12/09)
- 添加一个在HTML消息中阻止IE组件下载图片的选项. ("常规设置" > "信件察看" 文件夹属性中)
- 当邮件接收时候发现为"Cc",则在列表视图图标中加入了一个 "Cc"图标. (它将会应用到这个版本以后接收的信件中.如果你正在使用第三方的图标模块,它将不会显示.)
- 如果你在远程邮箱中所有的邮件头信息未完全接收的情况下标记已读/未读,即使你放弃远程邮箱,这个已读/未读也将被保存.
- 当你从一个IMAP服务器中接收一个大信件的时候将会出现一个进度条.
- What's New列表中的项目最大值从100扩展到500.
- 修复BUG: 当你按照来自和主体在线索模式时进行分类的时候,日期排序变得不规则.


GzlLm
QQ:13163539
MSN:gzllm@msn.com
Email:gzllm@netease.com 


gzllm 发表于:2005.12.19 14:48 ::分类: ( 生活 ) ::阅读:(896次) :: 评论 (6)
===========================================================
更新:Becky Ver.2.24.01 主文件汉化
===========================================================
更新:Becky Ver.2.24.01 主文件汉化

■ 声明

☆ 本汉化纯粹方便个人使用,无意取代其他的更好汉化版本,是否取用根据个人需要

☆ 本程序仅作研究和学习之用,在Windows 98/Me/2K/XP测试通过,经严格测试无毒,请勿用于非法用途,制作者不保证你所使用本补丁的安全性,稳定性以及合法性,对于使用本程序所造成的一切后果以及法律纠纷,补丁制作者概不负责 。

☆ 不要随意对这个版本中的相关文件进行 脱壳,反汇编,更改资源等等可能损坏原文件的行为 否则可能导致程序的崩溃或者其他未知后果

☆ 如您不同意以上声明,请立刻删除本程序。

安装说明:
本文件为单个汉化文件,需要先下载原版Becky 2.24.01版本,然后安装后,用压缩包内的b2.exe覆盖安装路径下同名文件,覆盖前建议备份原b2.exe文件.

源软件下载:http://www5a.biglobe.ne.jp/~rimarts/B2/bk22401.zip
汉化主文件下载:http://blog.dream4ever.org/Files/gzllm/B2.rar

Ver.2.24 -> Ver.2.24.01 (2005/12/11)
- 修复BUG: 2.24版本中"同步到移动媒体" 命令异常中止.
- 如果你在文件夹属性中改变"允许 IE 组件" 和 "允许图片" 选项,他们中的一个将不会更改.

Ver.2.23 -> Ver.2.24 (2005/12/09)
- 添加一个在HTML消息中阻止IE组件下载图片的选项. ("常规设置" > "信件察看" 文件夹属性中)
- 当邮件接收时候发现为"Cc",则在列表视图图标中加入了一个 "Cc"图标. (它将会应用到这个版本以后接收的信件中.如果你正在使用第三方的图标模块,它将不会显示.)
- 如果你在远程邮箱中所有的邮件头信息未完全接收的情况下标记已读/未读,即使你放弃远程邮箱,这个已读/未读也将被保存.
- 当你从一个IMAP服务器中接收一个大信件的时候将会出现一个进度条.
- What's New列表中的项目最大值从100扩展到500.
- 修复BUG: 当你按照来自和主体在线索模式时进行分类的时候,日期排序变得不规则.


GzlLm
QQ:13163539
MSN:gzllm@msn.com
Email:gzllm@netease.com 


gzllm 发表于:2005.12.12 10:23 ::分类: ( 生活 ) ::阅读:(1886次) :: 评论 (1)
===========================================================
Xdoclet生成SessionBean 和 EntityBean代码
===========================================================

Xdoclet生成SessionBean 和 EntityBean代码

Xdoclet生成SessionBean EntityBean代码

GzlLm

MSNGzlLm@msn.com

xDoclet 简介

使用XDoclet,你能够在J2EE环境下更加高效地工作,你所看到的Bean以及Bean之间的关系将更加简单,许多繁杂的事情将远离你的EJB开发过程。

XDocletRickard Oberg创建的EJBDoclet工具发展而来,它的设想很简单:避免为每个EJB提供多个文件,而是从单一Bean类文件中提供组件需要的所有信息。那么,这是如何实现的呢?Java没有.NET吹嘘的“属性”,但JavaJavadoc标记。我们可以把一个特殊的@标记放入Javadoc注释,然后让一个Doclet工具处理这些标记。由工具为指定的Bean生成合适的XML描述器文件和接口文件。XDoclet建立在EJBDoclet思想的基础上,但适用范围不再局限于EJB。现在,我们已经可以用XDoclet生成Web服务、Web应用描述器,甚至还可以对它进行扩展,满足自己的特殊需要。

@标记有一个标准的格式,包含一个“名称空间”以及一个属于该名称空间的“标记名称”。标记的属性以“名字=值”的形式在标记中指定。下面是一个例子:

/**

* @namespace:tag name="value" name2="value2" ...

*/

当前可用的名称空间包括:

ejb 标准的EJB信息(非厂商私有的信息)

jboss 面向JBoss应用服务器的信息。

weblogic 面向BEA Weblogic应用服务器的信息。

webSphere 面向IBM WebSphere应用服务器的信息。

orion 面向Orion应用服务器(Oracle)的信息。

castor Castor框架生成映射信息。

mvcsoft MVCSoft EJB 2.0持久化管理器生成文件。

soap 生成SOAP描述器。

struts 生成struts-config.xml

web Web应用生成web.xml配置文件。

jsp 生成标记库扩展描述器信息。

从上面的清单可以看出,除了EJB之外,XDoclet还提供了许多其它方面的支持(因此它的名字也从EJBDoclet变成了XDcolet)。

myEclipse中的配置

以下本文使用eclipse结合myeclipse插件,进行ejb的开发和演示。安装好eclipsemyeclipse以后,就可以新建项目进行ejb project的开发。

1. 新建立EJB Project

输入工程名称:myEJB,注意,src是默认的源码输出文件夹,因为在myeclipse中很多xdoclet配置文件的输出文件目标路径默认值都是该文件夹,所以建议大家不要修改这个默认值。

新建立项目后,由于目前没有ejb-jar.xml的配置文件,所以会有一个warning信息:

这个警告信息会在xdoclet运行生成ejb-jar.xml文件后消失。

2. 鼠标右键选择新建的myejb项目,弹出窗口中选择properties

进入到myeclipse-xdoclet,准备进行项目的xdoclet配置

增加一个标准的配置,然后选择ejb的标准配置

这个操作将生成ejb代码的选项都进行默认的配置,不依赖于任何的应用程序服务器

不过我这个演示是用的jboss的服务器,所以还需要增加jboss的选项,右键点上图中的ejbdoclet的根节点,选择add来增加ejb的生成项目,在出现的选择列表中,选择jboss

然后配置新增加的jboss的选项,一般来说,有如下4项需要填写,见下图标记部分:

其中,

version表明你用的jboss的版本,我用的是jboss-4.0.3,但是只需要标记4.0即可,如果你使用的是3.2.*的版本,那就填写成为3.2

第二个是你在jboss中配置的datasource的名称

第三个是你用到的数据源映射名称,这个名称是不能够任意填写,必须按照jboss配置文件中填写,配置文件在C:jboss-4.0.3serverdefaultconfstandardjbosscmp-jdbc.xml(我的jboss安装目录)我测试用的是mysql,所以填写mySQL。如果是oracle9i的数据库,则为Oracle9i,更加详细的信息,察看standardjbosscmp-jdbc.xml文件

最后一个是生成jboss.xmljbosscmp-jdbc.xml的目标文件夹,一般生成到src/META-INF文件夹。

到这里,xdoclet的配置完成,下面将创建EntityBean的类并根据定义的tag来生成代码。

生成EntityBean代码

首先创建一个entitybean,名称为User,如下图所示,需要注意,包名必须最后是.ejb结尾,否则xdoclet不认

创建完成后,检查生成的代码,User.java,会发现在类的上方,会出现如下的tag

* @ejb.bean name="User"

* display-name="Name for User"

* description="Description for User"

* jndi-name="ejb/User"

* type="CMP"

* cmp-version="2.x"

* view-type="both"

这些是默认生成的tag,不能完全的符合我们的要求,我们修改成为如下,红色为增加的部分:

* @ejb.bean name = "User"

* type = "CMP"

* cmp-version = "2.x"

* display-name = "User"

* description = "User"

* view-type = "both"

* jndi-name = "ejb/UserHome"

* local-jndi-name = "ejb/UserLocalHome"

* primkey-field = "userId"

* @ejb.persistence table-name = "systemuser"

* @jboss.persistence table-name = "systemuser"

* @ejb:util

* generate="physical"

然后,需要为user entity增加它的几个相关的方法

在相关的地方修改这个抽象的类,修改后,红色为增加的部分:

public abstract class User implements EntityBean {

/** The entity context */

private EntityContext context;

/**

* @ejb.interface-method view-type = "both"

* @ejb.persistence column-name = "userId"

* @ejb.pk-field

*

* @return

*/

public abstract String getUserId();

/**

* @ejb.interface-method view-type = "both"

*

* @param userId

*/

public abstract void setUserId(String userId);

/**

* @ejb.interface-method view-type = "both"

* @ejb.persistence column-name = "userName"

*

* @return

*/

public abstract String getUserName();

/**

* @ejb.interface-method view-type = "both"

*

* @param userName

*/

public abstract void setUserName(String userName);

/**

* @ejb.interface-method view-type = "both"

* @ejb.persistence column-name = "Password"

*

* @return

*/

public abstract String getPassword();

/**

* @ejb.interface-method view-type = "both"

*

* @param password

*/

public abstract void setPassword(String Password);

好了,entitybean修改成为这样以后就可以生成相关的接口和实现类了

如果运行正常,在控制台窗口中会出现如下提示:

Buildfile: F:workspaceMyEJB.xdoclet-build.tmp.xml

N65540:

[ejbdoclet] (XDocletMain.start 47 ) Running <remoteinterface/>

[ejbdoclet] Generating Remote interface for 'com.mycom.myejb.entity.ejb.User'.

[ejbdoclet] (XDocletMain.start 47 ) Running <localinterface/>

[ejbdoclet] Generating Local interface for 'com.mycom.myejb.entity.ejb.User'.

[ejbdoclet] (XDocletMain.start 47 ) Running <homeinterface/>

[ejbdoclet] Generating Home interface for 'com.mycom.myejb.entity.ejb.User'.

[ejbdoclet] (XDocletMain.start 47 ) Running <localhomeinterface/>

[ejbdoclet] Generating Local Home interface for 'com.mycom.myejb.entity.ejb.User'.

[ejbdoclet] (XDocletMain.start 47 ) Running <dataobject/>

[ejbdoclet] Generating Data Object class for 'com.mycom.myejb.entity.ejb.User'.

[ejbdoclet] (XDocletMain.start 47 ) Running <valueobject/>

[ejbdoclet] (XDocletMain.start 47 ) Running <entitypk/>

[ejbdoclet] (XDocletMain.start 47 ) Running <entitycmp/>

[ejbdoclet] Generating CMP class for 'com.mycom.myejb.entity.ejb.User'.

[ejbdoclet] (XDocletMain.start 47 ) Running <entitybmp/>

[ejbdoclet] (XDocletMain.start 47 ) Running <session/>

[ejbdoclet] (XDocletMain.start 47 ) Running <dao/>

[ejbdoclet] (XDocletMain.start 47 ) Running <utilobject/>

[ejbdoclet] Generating Util class for 'com.mycom.myejb.entity.ejb.User'.

[ejbdoclet] (XDocletMain.start 47 ) Running <deploymentdescriptor/>

[ejbdoclet] Generating EJB deployment descriptor (ejb-jar.xml).

[ejbdoclet] (XDocletMain.start 47 ) Running <jboss/>

[ejbdoclet] Generating jboss.xml.

[ejbdoclet] Generating jbosscmp-jdbc.xml.

_xdoclet_generation_:

BUILD SUCCESSFUL

Total time: 8 seconds

如果你在运行中,出现了

N65540:

BUILD FAILED

java.lang.UnsupportedClassVersionError: xjavadoc/ant/XJavadocTask (Unsupported major.minor version 49.0)

的异常,建议你更换以下eclipsejre环境。例如当我用jdk1.4.2的时候就出现上述异常,更换为jdk1.5后即正常运行。

生成SessionBean代码

修改生成的类为抽象的类

public abstract class UserManager implements SessionBean {

…………….

修改UserManagerxdoclet标签为:

* @ejb.bean name="UserManager"

* display-name="Name for UserManager"

* description="Description for UserManager"

* jndi-name="ejb/UserManagerHome"

* type="Stateless"

* view-type="both"

下面将增加一个login的方法,将UserManager.java移动到最下方,你会发现xdoclet已经给你创建了一个现有的方法:

/**

* An example business method

*

* @ejb.interface-method view-type = "both"

*

* @throws EJBException Thrown if method fails due to system-level error.

*/

public void replaceWithRealBusinessMethod() throws EJBException {

// rename and start putting your business logic here

}

根据你自己的需要修改这个方法,或者增加新的方法,不过一定要保留它的ejb的标签

例如增加一个方法:

/**

* @ejb.interface-method view-type = "both"

*

* @param username

* @param password

* @return

* @throws EJBException

*/

public boolean login(String username,String password) throws EJBException {

boolean loginresult = false;

if(username.equals("gary") && password.equals("gzllm")){

System.out.println("用户名与密码匹配,允许登录系统");

loginresult = true;

}else{

System.out.println("用户名与密码不匹配,不登录失败");

loginresult = false;

}

return loginresult;

}

然后再次运行xdoclet

运行成功后会生成如下图所示结构的代码:

这个时候就生成了最常用的SessionBean的代码。

部署EJB程序

1、 部署ejb代码,首先需要设置你的应用程序服务器,以下我配置了一个jboss的应用程序服务器。在eclipsewindows菜单下选择preferences,选择myeclipse选项,选择你需要使用的服务器,并配置相关的路径,如下图所示:

2、 Jboss下面的进一步的选项中能够选择运行的模式,可以选择debug模式和run模式,建议现在选择debug模式

3、 JDK选用你正在使用的jdk,点ok配置结束

4、 由于发布的jbossejb程序需要用到mySQL数据库,所以还需要配置一下JBoss,首先拷贝mysql的数据库配置文件,从C:jboss-4.0.3docsexamplesjcamysql-ds.xml拷贝到需要发布的服务器中,修改配置文件数据库连接部分为:
<jndi-name>MyEJB</jndi-name>

<connection-url>jdbc:mysql://192.168.2.26:3306/MyEJB</connection-url>

<driver-class>com.mysql.jdbc.Driver</driver-class>

<user-name>root</user-name>

<password>root</password>

<connection-url>jdbc:mysql://192.168.2.26:3306/MyEJB</connection-url>然后启动你自己的mysql的数据库,并创建MyEJB数据库以及相关的User表。

另外,还需要将用到的数据库连接驱动程序mysql-connector-java-3.1.10-bin.jar(我用的mysqljdbc驱动程序是mysql-connector-java-3.1.10)拷贝到应用程序服务器的lib目录中,我的目录是C:jboss-4.0.3serverdefaultlib,否则在启动jboss的时候会报异常:

16:48:25,078 WARN [JBossManagedConnectionPool] Throwable while attempting to get a new connection: null

org.jboss.resource.JBossResourceException: Could not create connection;

- nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: com.mysql.jdbc.Driver;

- nested throwable: (java.lang.ClassNotFoundException:

No ClassLoaders found for: com.mysql.jdbc.Driver))

5、 eclipse的工具栏中找到如图所示的一个按钮

6、 增加一个配置

7、 选择刚才配置的jboss服务器

8、 选择完成。

9、 部署完成

10、 运行ejb,点击部署旁边的一个按钮:

11、 Jboss启动过程中,可以看到,刚才写的ejb部分已经发布成功。在控制台的启动log中,你可以看到类似以下语句:17:00:16,453 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:name=MyEJB,service=DataSourceBinding' to JNDI name 'java:MyEJB'

17:00:17,312 INFO [EjbModule] Deploying User

17:00:17,812 INFO [EjbModule] Deploying UserManager

17:00:18,250 INFO [BaseLocalProxyFactory] Bound EJB LocalHome 'User' to jndi 'ejb/UserLocalHome'

17:00:18,328 INFO [ProxyFactory] Bound EJB Home 'User' to jndi 'ejb/UserHome'

17:00:22,796 INFO [BaseLocalProxyFactory] Bound EJB LocalHome 'UserManager' to jndi 'UserManagerLocal'

17:00:22,812 INFO [ProxyFactory] Bound EJB Home 'UserManager' to jndi 'ejb/UserManagerHome'

17:00:22,828 INFO [EJBDeployer] Deployed: file:/C:/jboss-4.0.3/server/default/deploy/MyEJB.jar/

说明entitybean sessionbean 部署运行成功。

JBoss的管理界面中,也可以找到如下的关于myejb.jar的部署说明:

测试EJB程序

1、 新建一个java projectproject name MyEJBTest


在项目的libraries中,将J2EE的包添加到项目中,另外还需要增加一个变量,如下图所示:
然后将新增加的变量也增加到你的项目libories中:

2、 在项目的构建路径中增加对MyEJB项目的引用:

3、 新建一个类Test

4、 编辑生成的Test的类,修改后的代码如下所示:
package com.mycompany.myejb.test;

import java.rmi.RemoteException;

import java.util.Properties;

import javax.ejb.CreateException;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.rmi.PortableRemoteObject;

import com.mycom.myejb.session.interfaces.UserManager;

import com.mycom.myejb.session.interfaces.UserManagerHome;

public class Test {

Properties properties;

public Test() {

properties = new Properties();

properties.put("java.naming.factory.initial",

"org.jnp.interfaces.NamingContextFactory");

properties.put("java.naming.factory.url.pkgs",

"org.jboss.naming:org.jnp.interfaces");

properties.put("java.naming.provider.url", "jnp://localhost:1099");

properties.put("jnp.disableDiscovery", "true");

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Test t = new Test();

System.out.println("登录测试结果:" + t.testLogin("gary", "gzllm"));

System.out.println("登录测试结果:" + t.testLogin("errorUser", "gzllm"));

}

public boolean testLogin(String username, String password) {

boolean loginresult = false;

Context ctx;

try {

ctx = new InitialContext(properties);

Object object = ctx.lookup(UserManagerHome.JNDI_NAME);

UserManagerHome userManagerHome = (UserManagerHome) PortableRemoteObject

.narrow(object, UserManagerHome.class);

UserManager userManager = userManagerHome.create();

loginresult = userManager.login(username, password);

} catch (NamingException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

} catch (CreateException e) {

e.printStackTrace();

}

return loginresult;

}

}

5、 如上的测试程序测试部署成功的myejb.jar中的login的方法,如果输入的用户名与密码为gary/gzllm则返回true,否则其他的就返回false,运行生成的Test,可以看到如下输出结果:

整个程序测试成功。

总结与补充

1. 由于EJB的一个最基本的设计模式Session Façade,我并没有在测试程序中直接调用User这个entitybean,甚至为了简便,甚至生成了这个类以后就没有使用它。建议在SessionBean中再调用EntityBean,也就是说,你可以在UserManager这个sessionbean中调用User这个EntityBean进行进一步的读取数据库,验证输入的用户名称与密码是否和数据库表中的数据一致,具体的访问操作,在EntityBean中操作。

2. Hibernate的出现,给ejb的使用带来了新的机遇,你可以生成hibernate的相关对象,然后在SessionBean的方法中不调用EntityBean,而是直接调用Hibernate的对象,进行数据库的访问。这将带来更大的灵活性,并能提高程序开发的效率

3. 在测试程序中,可以使用Factory模式,简化SessionBean对象的创建,并能够提高重用。

4. xdoclet不止能够创建ejb的代码,还能够产生hibernate等很多代码,需要进行相关的配置即可,这需要对xdoclet的文档进行进一步的查看与研究,另外还能够自定义tag,例如生成javascript的校验代码。Xdoclet是个好东西,就是用起来很复杂。

5. eclipseexport功能可以输出antbuild.xml文件,不过这个配置文件很基本,你可以根据生成的build配置文件,进一步的扩充,使开发-〉测试-〉打包-〉部署自动化,能提高开发效率。


gzllm 发表于:2005.12.06 13:00 ::分类: ( 工作 ) ::阅读:(5125次) :: 评论 (5)
===========================================================
Becky 2.23 主文件汉化
===========================================================
■ 声明

☆ 本汉化纯粹方便个人使用,无意取代其他的更好汉化版本,是否取用根据个人需要

☆ 本程序仅作研究和学习之用,在Windows 98/Me/2K/XP测试通过,经严格测试无毒,请勿用于非法用途,制作者不保证你所使用本补丁的安全性,稳定性以及合法性,对于使用本程序所造成的一切后果以及法律纠纷,补丁制作者概不负责 。

☆ 不要随意对这个版本中的相关文件进行 脱壳,反汇编,更改资源等等可能损坏原文件的行为 否则可能导致程序的崩溃或者其他未知后果

☆ 如您不同意以上声明,请立刻删除本程序。

安装说明:
本文件为单个汉化文件,需要先下载原版Becky 2.22.02版本,然后安装后,用压缩包内的b2.exe覆盖安装路径下同名文件,覆盖前建议备份原b2.exe文件.


GzlLm
QQ:13163539
MSN:gzllm@msn.com
Email:gzllm@netease.com 
使用者可至itpub软件交流板下载,或者给我发邮件

gzllm 发表于:2005.11.23 11:00 ::分类: ( 生活 ) ::阅读:(783次) :: 评论 (0)
===========================================================
[笔记]周一清晨的领导课
===========================================================

10.1期间我再次把《周一清晨的领导课》这本书看了一遍,看的同时,想想自己和自己周边的事情,觉得这本书的确是本值得推荐的好书,能让我在阅读的同时想到很多,虽然我不太认同书上说的一些论点,但是这跟周围的环境和氛围有很大关系,毕竟,书中所描述的一些处理方法,不一定符合中国的国情,虽然这些处理方法是相对的正确(不同的情况要适当处理,适合自己的情况,也许在国外这些处理方法是标准的处理方法).下面摘抄一下书中的一些经典总结和原则,时刻提醒自己.

作者的总结
1.作为一名司机,无论如何,只有在承担了所有的责任制后,你才能做好计划来达到自己的目标。从经理转变为领导者需要你做出不同的转变。
2.什么是要事?人们对“要事”的理解形形色色。在炒公司鱿鱼之前,他们已经先炒了上司的鱿鱼。
3.逃离管理黑洞,与下属保持联系。你的职责并不是通过关照流星来降低最低线,你应该通过承认和嘉奖超级明星来提高最上限。
4.正确,就要坚持,在陷入危机之前,拟好行动方案。维护正直的形象,就好像它是宝贵的领导财富一般。
5.只雇佣合适的员工,公司最重要的财富是团队中拥有合适的员工。不要为了填补一个职位空缺而降低标准——以后你会为此付出代价。
6.效率!效率!规划时间是你自己的责任。控制自己的时间,这样就可以控制自己的生活了。通过清理事情的轻重缓急并进行合理统筹,减少干扰,有效的管理会议来挤出一点一滴的时间。
7.装满许多桶,装桶的四种方法:
a.)知道首要的事物是什么
b.)提出对业绩的反馈意见
c.)表扬员工
d.)交流对团队的评价
你越努力装桶,自己的桶越充盈。
8.进入学习地带,脱离舒适地带,每天读书十分钟,倾听员工的意见,回报,订立目标,保持自信

托尼的良言集锦
1.谈到领导问题,不仅仅是你会遇到这个问题。
2.尽管你当了经理后权力增加了,但同时你也失去了过去可以享受的某些自由。
3.真正的领导者只会花时间解决问题,而不是责备别人。
4.当你把这些都写下来时,你便做出了实施的承诺。如果你只是口头上告诉我你想做什么,就不会对你构成约束。
5.如果你想靠别人的领会来达到你的期望,最终你会感到失望。
6.在炒公司鱿鱼之前,他们已经先炒了上司的鱿鱼。
7.像管理下属一样来管理一下你的老板。
8.领导者的"首要问题"之一是消除下属的迷惑
9.你应该学会原来管理黑洞,并与下属保持联系。
10.你的职责并不是通过关照业绩最差的职员,来降低最底限;你应当通过承认并嘉奖超级明星来提高最上限。
11.做正确的事情并非轻而易举--事实上有时真的很难--但要记住,作正确的事情始终都是正确的
12.你做的任何事情都会产生影响,因为员工看着呢--他们要靠你来树立"做正确的事"的榜样
13.你必须维护正直的形象,就好像它是宝贵的领导财富一样,事实上也的确如此。
14.作为领导者,最重要的任务是要雇佣合适的员工。
15.不要为了填补一个职位空缺而降低标准--以后你会为此付出代价的。
16.压力、焦虑和苦恼的主要原因在于,你觉得生活失控了。
17.如果你想充分地利用时间,就要想办法一点一点地挤时间--这儿挤一分钟,那儿挤五分钟。把零碎的时间加在一起,你就有更多的时间来支配了。
18.你是主要的装桶人,装桶的最佳方法是良好的沟通。
19.你要想出人头地,就不能放任自己躺在舒适的地带上自鸣得意。
20.你要追求进步。
21.生活中有很多事情都与生活态度、如何面对生活带来的苦恼有关。生活是美好的--即使情况恶化时也依然如此.


领导学原则

价值原则 正直原则:绩效与领导者获得的信任程度成正比。
责任原则:如果领导和下属都为自己的行为负责,绩效便会提高。
委托原则:领导者雇佣并提拔有才能对员工,绩效会随之提高。
构想原则:如果领导者将自己的构想解释得一清二楚,而且抱有这种构想的原因也令人心悦诚服,绩效便会提高。

同心协力原则
交流原则:员工了解自己的职责,并因为取得对成就而获得奖励,他们对绩效便会提高。
矛盾解决对原则:领导者解除了压抑下属的障碍后,绩效会提高。
乐观原则:绩效与领导对自尊心和态度成正比。
改革管理方式对原则:领导崇尚改革,而且积极地致力于改革事务,绩效会随之提高。

投资原则 授权原则:当员工愿为自己的行为负责时,他们对绩效便会提高。
勇气原则:领导正面影响员工的问题的能力越强,业绩就会同比上升。
榜样原则:领导成为正面的榜样时,业绩会提升。
准备原则:领导越促进自身及员工的成长,绩效水平越高。


gzllm 发表于:2005.10.10 11:09 ::分类: ( 工作 ) ::阅读:(1806次) :: 评论 (1)
===========================================================
最近心情有些烦躁
===========================================================
最近心情有些烦躁,工作很忙,无止境的修改,客户的需求不断的提出与修改.这里的软件开发管理太糟糕.
gzllm 发表于:2004.11.24 14:49 ::分类: ( 心情 ) ::阅读:(830次) :: 评论 (0)
===========================================================
统一软件过程RUP
===========================================================

RUP同样适合小团队的开发,关键是对RUP的剪裁,根据自己团队的能力,对RUP进行合适的剪裁。而且小团队的实施会比大团队实施要简单

 

听课心得(参考了网上的另外一个总结,再加上我自己的):

1.软件开发过程,本身也是一个软件产品

2.rup实施,关键是要能对现在的RUP产品进行剪裁,制作出适合自己企业的RUP。

3.以迭代的方法培育一个先启-精化-构建-测试-产品化的软件开发过程。其理论上认为可以弥补流瀑式开发方法带来的风险过大,人力资源利用率不高等不足。个人认为迭代方式符合人对客观世界的认识:多次反复地实践。目前尚未仔细研究不同迭代阶段之间的承启关系,但最担心的是如何在涉众(如客户、老板们)要求较短的时间内完成合格的迭代

4.学习及实现关键:如何深刻理解并实施工作流程。当开发工作到中后期时,最容易暴露分析设计阶段考虑不足的问题,这时候感觉为什么文档不全,不细。所以我刚接触RUP时,第一感觉就是RUP能否提供较全面的文档。粗略地看了一下‘工作流程’后,认识到文档只是工作流程的一个产物,开发工作是一个process,孤立的文档是没有意义的,为文档而分析设计看似目的明确,其实忽视了最重要的过程控制。当然,完整的文档是成功的分析设计最明显的体现。

5.开发中队文档的维护,可以直接维护一个MDL文件,然后通过soda导出RUP文档

6.RUP可扩充,不仅适用于软件,扩充后可对硬件开发管理


gzllm 发表于:2004.10.21 15:01 ::分类: ( 心情 ) ::阅读:(1076次) :: 评论 (1)
===========================================================
男人失去曾全力认真的第一次爱后就不再认真了
===========================================================

有个女孩写出这么一段话,看出对爱情的迷茫,其实男人一旦将第一次爱全部付出后,可能就不再认真的谈爱了,心灰意冷了。原文与我的感想见以下:

原文:
“ ...一次偶然进了男友的信箱,看了他写给前女友的信,看了那些信……他对那女孩的爱,尽管已经过去了,但还是让我有些酸酸的妒忌。因为他从来不曾那样对我,我竟以为他不会,我竟以为他生就木讷,不会说甜言蜜语不会轰轰烈烈的爱不会为爱生气或开心,原来不是,他会的,只是要说的对象不是我,或者,该说的想说的都已经对那个女孩说玩了,到我这就没有了…… 我不知道,是因为那是他的初恋,所以才那样全心全意?还是因为是我追他的,让他不那么在乎我?或者,我不是他的真爱,所以不会像对那个女孩那样对我?又或者是,现在年纪大了(其实也才24),没了当初的热情??
我好困惑。。。好难过。。。男同学们,你们是不是都对初恋念念不忘?你们是不是都不在乎追你们的女孩,哪怕已经是男女朋友了?你们是不是只对第一次爱情付出最多,以后就越来越少了?你们是不是长大了,就没有年少时的激情了?”
  
我的感想:  

“这是男生的共同心声,我就是完全这么体会的。真想把失去爱后的男生的心声告诉给每位女同胞,真正的恋爱只有一次,爱要珍惜,请勿过分伤了男人的心,切记切记!!!
失去认认真真的第一次爱后,男人可能不会再那样对以后的女孩真正好了,没有心劲了,没有激情了,也没有对浪漫爱情的信仰了!有些事,一辈子只有一次。 当全心爱过一个人后,该付出的全付出了,全心努力去把握过,曾试图给她想要的一切,试图为她而死,但回报是无动于衷的,在寂寞的等待中,心血一点一滴的滴干了最后心血全无 心灰意冷了,等年龄大了,激情不再,加之事业压力,旧事不想再提起,心力不足,无奈里不再去相信憧憬纯真爱情。爱情失去信仰与希望,感情失去忠一的港湾后,对于男人来说,爱情是什么一切无所谓了,所以不少人去包情人 去找第三者,甚至去嫖妓,这些现象某种意义上说是正常的!

男人心冷了,就难再热起来,一切不可逆呀
女人呀,就原谅男人这一点吧,除了你自己要好好把握第一次恋爱的男人外,
其他只能怪造物主了!!!”

好文章,推荐一下


gzllm 发表于:2004.10.01 14:53 ::分类: ( 生活 ) ::阅读:(898次) :: 评论 (3)
===========================================================
值班第一天
===========================================================

已经发送了值班之志,但是遗留两个问题:

System.Error:

[04-9-30 19:30:08:844 CST]  728e1a7 SystemErr     R COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/6000] SQL0204N  "TALADMIN.CONTRACTINFO" 是未定义的名称。  SQLSTATE=42704


System.out.print Error:
[04-9-30 9:55:08:812 CST] 64252191 OSEListenerDi E PLGN0021E: Servlet 请求处理程序异常:未找到虚拟主机/Web 组 : 未定义 web 组 /_vti_inf.html
[04-9-30 9:55:09:562 CST] 64252191 OSEListenerDi E PLGN0021E: Servlet 请求处理程序异常:未找到虚拟主机/Web 组 : 未定义 web 组 /_vti_bin/shtml.exe/_vti_rpc

[04-9-30 19:30:08:578 CST]  728e1a7 WebGroup      I SRVE0180I: [TallyWeb] [/TallyWeb] [Servlet.LOG]: /chgCustContract.jsp: init
[04-9-30 19:30:08:844 CST]  728e1a7 WebGroup      E SRVE0026E: [Servlet 错误]-[]:java.lang.NullPointerException
 at org.apache.jsp._chgCustContract._jspService(_chgCustContract.java:266)
 at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java(Compiled Code))
 at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java(Compiled Code))
 at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code))
 at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code))
 at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code))
 at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))
 at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))
 at com.post.shanghai.tally.servlet.Controller.process(Controller.java(Compiled Code))
 at com.post.shanghai.tally.servlet.Controller.doGet(Controller.java(Compiled Code))
 at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
 at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code))
 at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code))
 at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code))
 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java(Compiled Code))
 at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code))
 at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))
 at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))
 at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java(Compiled Code))
 at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java(Compiled Code))
 at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java(Compiled Code))
 at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java(Compiled Code))
 at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java(Compiled Code))
 at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java(Compiled Code))
 at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java(Compiled Code))
 at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code))
 at com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code))
 at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))

需要修改数据库.

希望明天轻松些,让我好好的休息休息


gzllm 发表于:2004.09.30 23:24 ::分类: ( 工作 ) ::阅读:(1621次) :: 评论 (0)
===========================================================
这个假期有点惨
===========================================================
要值班,先要在家里闷死,幸好老婆过来几天陪我,否则,岂不是要枯萎了?还要买几套衣服穿,嗯,多买几件白衬衣.让老婆给我挑,我老婆的眼光好,从她挑中我做老公这点就能看出来,眼光的确是好~~ 查看全文
gzllm 发表于:2004.09.29 15:57 ::分类: ( 生活 ) ::阅读:(635次) :: 评论 (0)
===========================================================
职业装
===========================================================
女人追求的是与众不同,如果一个女人看到别人穿得跟自己一样,哪怕是一个款式的丝巾,都会郁闷的不得了。但是....为什么男人的穿着都那么的一致。10。1要到了,过了10.1就要穿白衬衣,深蓝西装,还有领带,如果从远处看,任何一个男人都一样。难道这就是职业的表现?标准一致,已经到了这个地步,都作为公司的制度来实施,看来以后要多备些白衬衣了。又要买衣服了。白+深蓝+黑,职业装
gzllm 发表于:2004.09.27 20:36 ::分类: ( 心情 ) ::阅读:(59432次) :: 评论 (0)
===========================================================
喜事成双
===========================================================

今天好事成双,

第一,今天老婆在凌晨的时候给我打电话啦,虽然还有些生我的气,但是至少又理我了.

第二,做在新的办公室里面,环境相当的好,在39楼看上海的风景,还真的不错,特别是晴空万里的时候.终于,又回到了以前的工作环境,很喜欢

但是有几个要担心的事情:

第一,跟客户沟通不方便了

第二,台风或者地震的时候,大楼是不是在摇晃呢,怕怕,这么高,打雷不要劈倒我,跳楼倒是很方便了,周围全部是玻璃

第三,千万不要把我困在电梯里面


gzllm 发表于:2004.09.25 12:02 ::分类: ( 生活 ) ::阅读:(59353次) :: 评论 (0)
===========================================================
金牛座今日运势
===========================================================

金牛座 Taurus (04/20 - 05/20)

☉综合运势:★★★★

☉爱情运势:★★★★

☉工作状况:★★★★

☉理财投资:★★★

☉健康指数:70%

☉商谈指数:74%

☉Lucky Color:粉红色

☉Lucky Number:3

☉速配星座:巨蟹座

对艺术与美的事物感性且敏感,具有美的鉴赏力。

今天不妨多看看美的事物,心灵更加充实之感。而爱情上也与艺术相关人物易谱出恋曲,你为对方洋溢的才华所倾倒,与从事美术设计、绘画、雕刻艺术等创作相关的人颇有吸引力呢。有美感且具复古风味的小饰品也是今天的幸运物喔。

我的评价:放屁!


gzllm 发表于:2004.09.22 14:59 ::分类: ( 生活 ) ::阅读:(1454次) :: 评论 (0)
===========================================================
心情很糟
===========================================================
本来工作就很忙,女朋友莫名其妙的怀疑我骗她工作忙,吵了一下,突然心情很糟糕,今天什么日子???.继续工作.
gzllm 发表于:2004.09.22 14:52 ::分类: ( 心情 ) ::阅读:(737次) :: 评论 (0)
自我介绍
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
Blog信息
网站链接...