记事本

学习编程历程--QQ:841189754
posts - 19, comments - 169, trackbacks - 0, articles - 4
   :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理

公告

置顶随笔

摘要: 暑假的时候做过一次权限设计,也在博客园中发布了一篇:用户-组-角色-权限 指点的文章 ,也得到不少高手的指点,但随着项目的进行,感觉自己对这个权限是过度的设计了。由于对开发人员要求过于复杂了于是这个设计就废弃了,现在采用这种模式设计:Ø权限描述项目中的权限管理总的可以分为功能管理和资源管理。其中功能管理中的功能就是对应一个网页(url),资源管理中的资源就是对网络系统中的所有对象进行分类...阅读全文

posted @ 2009-11-17 09:55 永不满足 阅读(2160) 评论(10) 编辑

摘要: 这些天闲着没事情。然后看了"吉拉"整的数据访问层的代码封装,于是自己就想是否可以把所有在DotNet的通用代码都给封成一个个的组件呢?于是自己在不忙的时候就整整弄弄,想把通用的东西都给弄出来,这样以后其他人包裹自己在内在开发上应该效率就会更高了。同时自己也可以有更多的时间去专注自己的学习和研究了。现在我把这个项目命名为DNCC(DotNet Common Code),希望通过我,或者有感兴趣的朋友...阅读全文

posted @ 2009-10-19 17:53 永不满足 阅读(2462) 评论(15) 编辑

摘要: 现在项目需要做一个权限平台系统。原来也没有碰到过这些。自己就设计了一个权限平台的数据库结构表,但不知道怎么样。希望高手可以指点一下。本结构中。有用户表users,组表groups,角色表roles,权限表permissions,行为表action,资源表resource用户与组之间关系gurelation,用户与角色之间关系urrelation,组与角色之间关系grrelation,角色与权限之间...阅读全文

posted @ 2009-08-26 15:37 永不满足 阅读(3530) 评论(41) 编辑

摘要: 一直以来都在做asp.net开发。所有东西都在服务端执行。感觉很不爽,但也一直没有系统的学习过javascript,开发的时候。用到的javascript代码都很简单。现在快要放假了。就可以系统的学习一下了呀!哈哈。大家支持我吧!,学习的道路仍在进行中。哈哈阅读全文

posted @ 2009-06-21 11:29 永不满足 阅读(870) 评论(6) 编辑

2012年5月19日

今天给大家分享一个“Java po 转换为C# po工具 ”,代码在下面,希望对需要的朋友有个帮助

/Files/flex/ConvertTool_V1.0ByDsk.rar

背景:公司架构,后台服务用java 写,前台为C#写,由于后台java 有大量的po对象(数据库映射的po,业务需要的po),后台的java数据,通过json格式(fastJson)传输到前台(C#)

C#要将这些json格式转换为同样的po,由于没有现成的工具,因此自己写了一个java po 转换为C# po的工具

 

代码结构图: 

 

实现思路:

1.加载配置文件

2.通过 jarHelper 过滤出符合条件(正则表达式过滤) 的className字符串

3.通过className字符串和URLClassLoader类(ClassLoaderHelper),获取该字符串对应的类型clazz

4.通过类型clazz调用ReflextionHelper 反射出该类的 set,get方法(支持代码混淆)

5.获取到该java的po字段(JavaPropertyInfo),在转换为C#的po属性(csharpPropertyInfo)

6.在根据C#的模板(Template)文件,生成C#的po

7.调用FileHelper 写文件,结束 

 

代码今天完工,分享出来,希望给需要的朋友提供一个参考,如有问题,欢迎讨论


posted @ 2012-05-19 17:24 永不满足 阅读(844) 评论(2) 编辑

2012年3月23日

以下代码可以在有“代码混淆器,混淆后正常工作”,希望分享给有可以使用到的人,(*^__^*) 嘻嘻

/*

* HashMapToPo 转换为集合对象
*/
public static <T> ArrayList<T> HashMapToPoList(
final ArrayList<HashMap<String, Object>> hmList,
final Class<T> clazz, boolean encode, boolean isEncode)
throws ForerDealArgumentException {
if (hmList == null || clazz == null) {
String msg = className
+ ".HashMapToPoList(final ArrayList<HashMap<String, Object>> hmList,final Class<?> clazz,boolean encode) Args is not null";
logger.error(msg);
throw new ForerDealArgumentException(msg);
}
final HashMap<String, String> dic = GetObjectPropertyName(clazz);
final HashMap<String, Method> dic2 = GetObjectMethodName(clazz);
final ArrayList<T> lt = new ArrayList<T>();
for (HashMap<String, Object> hm : hmList) {
T o = null;
try {
o = clazz.newInstance();
} catch (final Exception e) {
e.printStackTrace();
}
for (Map.Entry<String, Object> entry : hm.entrySet()) {
String key = entry.getKey().toUpperCase().replace("_", "");
Object value = entry.getValue();
if (dic.containsKey(key) && value != null) {
try {
String str = dic.get(key);
String temp = str.substring(0, 1);
str = str.replaceFirst(temp, temp.toUpperCase());
str = "set" + str;
Class<?> paraType = dic2.get(str).getParameterTypes()[0];
if (paraType != value.getClass())// 类型一致
value = StringToObject(paraType, value.toString());
if (isEncode) {
if (encode) {// iso8859-1 编码
if (paraType == String.class) {
value = CharsetConvert.charsetConvert(value
.toString());
}
} else {// GBK
if (paraType == String.class) {
value = CharsetConvert
.ISO_8859_1ToGBK(value.toString());
}
}
}
try {
dic2.get(str).invoke(o, value);
} catch (Exception e) {
logger.error("paraType:" + paraType + ";valueType:"
+ value.getClass() + "[" + str + ":"
+ value + "]");
}
} catch (Exception e) {
e.printStackTrace();
}
} else if (!dic.containsKey(key)) {
String msg = clazz.getName()
+ "Object does not contain the '" + key + "' field";
logger.debug(msg);
}
}
lt.add(o);
}
return lt;
}
/*
* 字段类型转换
*/
private static Object StringToObject(Class<?> clazz, String str) {
Object o = str;
if (clazz == Date.class && str != null && str != "") {
DateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
o = dt1.parse(str);
} catch (ParseException e1) {
DateFormat dt2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
try {
o = dt2.parse(str);
} catch (ParseException e2) {
DateFormat dt3 = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
try {
o = dt3.parse(str);
} catch (ParseException e3) {
DateFormat dt4 = new SimpleDateFormat("yyyyMMdd");
try {
o = dt4.parse(str);
} catch (ParseException e4) {
e4.printStackTrace();
}
}
}
}
} else if (clazz == BigDecimal.class) {
o = new BigDecimal(str);
} else if (clazz == Long.class) {
o = new Long(str);
} else if (clazz == Integer.class) {
o = new Integer(str);
} else if (clazz == int.class) {
o = Integer.parseInt(str);
} else if (clazz == float.class) {
o = Float.parseFloat(str);
} else if (clazz == boolean.class) {
o = Boolean.parseBoolean(str);
} else if (clazz == byte.class) {
o = Byte.parseByte(str);
}
return o;
}
/*
* HashMap转换为单一对象
*/
public static <T> T HashMapToSinglePo(final HashMap<String, Object> hm,
final Class<T> clazz, boolean encode, boolean isEncode)
throws Exception {
if (hm == null || clazz == null) {
String msg = className
+ ".HashMapToSinglePo(final ArrayList<HashMap<String, Object>,boolean encode> hmList,final Class<T> clazz) Args is  null";
logger.error(msg);
}
T o = null;
ArrayList<HashMap<String, Object>> hmList = new ArrayList<HashMap<String, Object>>();
hmList.add(hm);
ArrayList<T> lt = HashMapToPoList(hmList, clazz, encode, isEncode);
if (lt != null && lt.size() > 0) {
o = lt.get(0);
}
return o;
}
/*
* 对象比较 ,结果HashMap<String, String> key 为checkColums 字段,value 相同 Same
* ,不同Different,不存在Object does not contain the
*/
public static <T> HashMap<String, String> Compare(Class<T> clazz, T o1,
T o2, String[] checkColums) {
HashMap<String, String> ht = new HashMap<String, String>();
if (clazz == null || o1 == null || o2 == null) {
String msg = className
+ ".Compare(Class<T> clazz,T o1, T o2,List<String> checkColums) Args clazz,o1,o2 is null";
logger.error(msg);
}
final HashMap<String, String> dic1 = GetObjectPropertyName(clazz);
final HashMap<String, Method> dic2 = GetObjectMethodName(clazz);
if (checkColums == null) {
int count = dic1.size();
checkColums = new String[count];
dic1.values().toArray(checkColums);
}
for (String str : checkColums) {
try {
String temp = str.toUpperCase();
if (dic1.containsKey(temp)) {
String str1 = dic1.get(temp);
String temp1 = str1.substring(0, 1);
str1 = str1.replaceFirst(temp1, temp1.toUpperCase());
str1 = "get" + str1;
Object result1 = dic2.get(str1).invoke(o1);
Object result2 = dic2.get(str1).invoke(o2);
if (result1 != null || result2 != null) {
if (result1 != null && result2 != null) {
if (!result1.equals(result2)) {
ht.put(str, "Different");
} else {
ht.put(str, "Same");
}
} else {
ht.put(str, "Different");
}
}
} else {
String msg = clazz.getName()
+ " Object does not contain the '" + str
+ "' field";
ht.put(str, msg);
logger.debug(msg);
}
} catch (Exception e) {
e.printStackTrace();
logger.equals(e);
}
}
return ht;
}
/*
* 对象克隆
*/
public static <T> T Clone(Class<T> clazz, T o) {
if (o == null || clazz == null) {
String msg = className
+ ".Clone(Class<T> clazz,Object o) Args clazz or o is null";
logger.error(msg);
}
T cloneObject = null;
try {
cloneObject = clazz.newInstance();
} catch (final Exception e) {
e.printStackTrace();
}
final HashMap<String, String> dic = GetObjectPropertyName(clazz);
final HashMap<String, Method> dic2 = GetObjectMethodName(clazz);
for (Map.Entry<String, String> entry : dic.entrySet()) {
try {
String str = entry.getValue();
String temp = str.substring(0, 1);
str = str.replaceFirst(temp, temp.toUpperCase());
String str1 = "get" + str;
String str2 = "set" + str;
if (dic2.containsKey(str1) && dic2.containsKey(str2)) {
Object result = dic2.get(str1).invoke(o);
dic2.get(str2).invoke(cloneObject, result);
} else {
String msg = str1 + ";" + str2 + "Error";
System.out.println(msg);
logger.error(msg);
}
} catch (Exception e) {
e.printStackTrace();
logger.error(e);
}
}
return cloneObject;
}
/*
* 反射获取对象字段
*/
private static HashMap<String, HashMap<String, String>> propertys = new HashMap<String, HashMap<String, String>>();
private static HashMap<String, HashMap<String, Method>> methods = new HashMap<String, HashMap<String, Method>>();
private static HashMap<String, String> GetObjectPropertyName(Class<?> clazz) {
HashMap<String, Method> method = GetObjectMethodName(clazz);
String className = clazz.getName();
HashMap<String, String> ht = new HashMap<String, String>();
if (propertys.containsKey(className)) {
ht = propertys.get(className);
} else {
ht = new HashMap<String, String>();
getPropertys(clazz, ht, method);// 递归父类
propertys.put(className, ht);
}
return ht;
}
private static HashMap<String, String> getPropertys(Class<?> clazz,
HashMap<String, String> ht, HashMap<String, Method> method) {
Method[] md = clazz.getMethods();
for (int i = 0; i < md.length; i++) {
String str = md[i].getName().replace("get", "").replace("set", "");
if (method.containsKey("get" + str)
&& method.containsKey("set" + str)) {
if (!ht.containsKey(str)) {
ht.put(str.toUpperCase(), str);
}
}
}
Class<?> superClazz = clazz.getSuperclass();
if (superClazz != null && superClazz != Object.class) {
getPropertys(superClazz, ht, method);
}
return ht;
}
/*
* 反射获取类的方法名
*/
private static HashMap<String, Method> GetObjectMethodName(Class<?> clazz) {
HashMap<String, Method> ht = null;
String className = clazz.getName();
if (methods.containsKey(className)) {
ht = methods.get(className);
} else {
ht = new HashMap<String, Method>();
getMethods(clazz, ht);// 递归父类
methods.put(className, ht);
}
return ht;
}
private static HashMap<String, Method> getMethods(Class<?> clazz,
HashMap<String, Method> ht) {
Method[] md = clazz.getMethods();
for (int i = 0; i < md.length; i++) {
ht.put(md[i].getName(), md[i]);
}
Class<?> superClazz = clazz.getSuperclass();
if (superClazz != null && superClazz != Object.class) {
getMethods(superClazz, ht);
}
return ht;
}

posted @ 2012-03-23 14:16 永不满足 阅读(191) 评论(3) 编辑

2011年1月27日

摘要: 其实对于一个WebIM来说,我们一般都几种方式来实现1.服务器拉送方式:就是客户端主动定时的去服务器端获取信息,一般我们可以通过 Ajax控件+定时器 来实现,优点:实现简单,缺点:服务器承受的压力重2.服务器推送方式:就是服务器主动将获取到的信息,发送给客户端,Asp.net我们可以通过IHttpAsyncHandler这个接口来实现,优点:服务器承受的压力小 缺点:服务器 和客户端同时配合编写(js)3.Flash Socket方式:通过在网页中嵌入Flash,编写Socket程序 通过AS 3.0语言,Socket编程,优点:并发量大,服务器压力小,缺点:浏览器中要支持Flash,加载F阅读全文

posted @ 2011-01-27 17:58 永不满足 阅读(1388) 评论(12) 编辑

摘要: 马上要过年了,现在也没有什么事情要做,今天就给大家讲讲基于WebService的文件上传,和下载,其实我们只是通过WebService来实现文件流的传输下面说说我设计的文件上传系统需求:1.要可定制文件策略,也就是我可以允许系统上传什么格式的文件,每个格式文件允许多大 ,这些都可以通过后台来设定2.上传文件的存储位置要支持多种,以便以后有所变动,目前支持有:数据库,Ftp,磁盘 三种存储介质3. ...阅读全文

posted @ 2011-01-27 10:30 永不满足 阅读(2529) 评论(15) 编辑

2011年1月11日

摘要: 由于最近在忙着项目上的事情,自己的组件库也很少去修改了,最近一直有不少博客园的朋友来问我要这个组件,现在我就把它再次发布出来,这次发布的没有源代码,只有使用这个组件的一个项目例子,如果你正在做多用户多权限的项目,这个例子也可以直接拿去使用,目前只支持B/S项目/Files/flex/Permission.rar系统管理账户:sysadmin 密码:111111 如有问题,可以一起交流阅读全文

posted @ 2011-01-11 17:54 永不满足 阅读(1240) 评论(6) 编辑

2010年4月17日

权限组件(二)

 

由于最近比较忙,所以先把权限组件源代码给大家发布出来,源代码包括两部分:权限组件,权限DemoControl用户控件),如果想在项目中使用,可以直接把权限组件,和Conrol目录直接拷贝过去,就行了,当然还有有权限数据库

 

源代码图

 

对于Permissions项目,Permissions.Services为权限服务接口,其中PermissionsServices.csPermissionsMoudle.csSystemServices.cs分别为权限服务,Web权限验证(合法性Url检测),系统服务

 

由于时间原因和第一次开发组件,所以对权限组件没有进行很好的结构性设计,目前只是趋向功能服务的实现,关于组件结构设计和需求上的不足,请大家多提提意见,争取我们做出一个好的权限组件来

 

 

 

 

posted @ 2010-04-17 21:54 永不满足 阅读(1855) 评论(21) 编辑

2010年4月5日

摘要: 研究权限有好一段时间了,自己也做了一个权限组件,主要是针对web开发的,目前这个组件还在不断完善中,权限组件支持:功能权限,分级授权,数据权限等功能要求,现在先给大家发个样本,等这个权限组件做完了再给大家分享出来,这个组件的使用,将来只需要在web.config中设置一下,数据库配置注册一下就可以完成阅读全文

posted @ 2010-04-05 20:03 永不满足 阅读(2889) 评论(18) 编辑

2010年3月17日

摘要: 背景:由于项目中存在太多资源对象(每一资源对象都是一个模块),现在有很多对象都在引用其它的对象,而有些对象模块还没有开发 如果按传统的做法,只有相关模块开发完,才能进行其它的模块开发,这样模块就不能同步开发,如果同步开发,那么要求需求必须弄清楚,定义出 接口这样才行,但由于现在客户也暂时弄不清需求,这样项目就很难做,而且以后返工的几率也太,所以设计了这样一种通过配置注册 来达到模块间的引用,以后如...阅读全文

posted @ 2010-03-17 12:01 永不满足 阅读(1943) 评论(5) 编辑

2010年1月21日

摘要: 最近在开发一个事务管理模块,该事务有多种状态,事务创建,事务派发,事务受理,事务处理,事务结束等多种状态,而且要求事务可以根据状态的不同,而执行不同的处理,我现在根据State设计模式,设计了一下类库,该事务管理模块采用的是B/s模式,现在有一点迷茫:就是事务的状态变换了,如何自动调用该事务的方法,让其自动执行,还有一点就是该事务所有过程都要经过消息队列,该事务管理模块,很像现在的工单系统,有做过...阅读全文

posted @ 2010-01-21 15:56 永不满足 阅读(1273) 评论(2) 编辑

2009年12月17日

摘要: 现在正在开发一个多用户系统,需要实现这样的功能问题:网址:www.abc.com用户A:个人地址: www.abc.com/a 重写到www.abc.com/default.aspx?Id=a用户B:个人地址: www.abc.com/a重写到www.abc.com/default.aspx?Id=b前提是不建立a,b文件夹这种情况和博客园中的个人主页地址,是一样的,以前没有做过这个,今天看了一些...阅读全文

posted @ 2009-12-17 18:27 永不满足 阅读(649) 评论(2) 编辑