因为专注,所以专业

我的Java Blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  21 随笔 :: 30 文章 :: 6 评论 :: 0 Trackbacks

2010年1月12日 #

在缺省配置的情况下,tomcat使用了三个端口:

shutdown端口: <Server port="8005" shutdown="SHUTDOWN">
http端口:<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
AJP端口:<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 这样,不仅两个tomcat里的应用不会互相影响,而且两个tomcat程序也可以分别升级。
posted @ 2011-04-02 17:54 kevin.zhan 阅读(254) | 评论 (0)编辑 收藏

1.恢复出厂默认, *#7780#.默认密码:12345或00000

上网设置:步骤如下:设置—→配置设置—→个人配置设置—→操作—→新增—→网络   接下来对网络进行配置:   帐号名称:默认(我的网),可换成自己喜欢的名字   主页:http://wap.monternet.com   用户名:(空) 密码:(空) 使用首选接入点:取消   接入点设置: 代理:启动 代理地址: 10.0.0.172   代理端口: 80   传输方式:分组数据 传输方式设置:   分组数据接入点: cmwap   网络类型: Ipv4   鉴权类型:普通   用户名:(空)   密码:(空) 这样, GPRS 就设置好了 接下来设置彩信 首先要新增 步骤如下:设置—→配置设置—→个人配置设置—→操作—→新增—→彩信   接下来对彩信进行配置: 帐号名称:默认(彩信),可换成自己喜欢的名字 服务器地:http://mmsc.monternet.com  (注意:从http的h开始,要不然设置就白费了) 使用首选接入点:取消   接入点设置: 代理:启动 代理地址: 10.0.0.172   代理端口: 80   传输方式:分组数据 传输方式设置: 分组数据接入点: cmwap   网络类型: Ipv4 鉴权类型:普通 用户名:(空) 密码:(空) OK ,彩信也设置好了   然后回到:设置—→配置设置—→预设配置设置,选择:个人配置   设置—→配置设置—→为全部应用软件启动预设(有提示出现,选择:确认)   经过以上的工作,收、发彩信及通过手机自带的浏览器上网都没有问题了,但是,不少机友发现,想通过 ucweb 或者 QQ上网却不行。接下来,我们再对像 ucweb 或者 QQ 之类的 JAVA 程序配置一个接入点,把最后的障碍清除掉: 新增接入点: 步骤如下: 设置—→配置设置—→个人配置设置—→操作—→新增—→接入点 对接入点进行设置: 帐号名称:默认(我的接入点) 接入点设置: 传输方式:分组数据   传输方式设置: 分组数据接入点: cmwap (默认是 internet ,一定要改过来哦 ` !)   网络类型: Ipv4 鉴权类型:普通 用户名:(空) 密码:(空) OK ,接入点也设置好了 然后回到:设置—→配置设置—→首选接入点,这个时候就可以看到你刚刚设置好的接入点点了,选择它,搞定了! 最后 进入设置---数据连通---分组数据 分组数据连接---当需要时 分组数据设置---已选接入---移动CMNET(如果不是这个就进入修改接入点) 修改接入点---接入点别名---移动CMNET 分组数据接入点---CMNET

posted @ 2011-03-25 08:50 kevin.zhan| 编辑 收藏

JS代码,片段一:
{
        // 片段1
    fieldLabel : '机构名称',
    name : 'org.name',
    hiddenName: 'org.name',
    width : 
250,
    allowBlank : 
false,
    blankText : '机构名称不能为空',
    maxLength : 
20,
    maxLengthText : '最大长度不能超过20个字符
!',
    validator : UserCfg.checkOrgName,
    invalidText: '已经存在的名称'
}
// 片段二
var IsExsit=false;//此变量一定要在方法外面定义
UserCfg.checkOrgName = function(){
 
var orgName = Ext.get('org.name').dom.value;
 Ext.Ajax.request(
{
    url : ORG_OPERATE_URL 
+ "?action=checkOrgName",
    params : 
{
     random : Math.random(),
     orgName : orgName
    }
,
    callback : 
function(opt, success, response) {
     
var obj = Ext.util.JSON.decode(response.responseText);
     
if (obj.success) {
      ReturnValue(
true);
     }
 else {
      ReturnValue(
false);
     }

    }

   }
);
 
function ReturnValue(ok) {// 此方法必须放CheckUserName里面。
  IsExsit = ok;
 }

 
return IsExsit;
}


在后台代码实现方法省略,不过返回一定要JSON格式,且有 success属性,如果用户存在,返回true, 否则返回false
posted @ 2010-08-12 11:57 kevin.zhan 阅读(472) | 评论 (0)编辑 收藏

     摘要: (转载自 http://callan.javaeye.com/blog/158392 ) JAAS是对JCE安全框架的重要补充,通过提供认证用户和确定用户授权来增强JAVA解决方案的动态安全性,使得资源能够得到很好得到保护和控制(JAAS使用动态的安全策略来定义权限,而不是将其静态的嵌入到代码中)。 JAAS采用的是插件的运行方式,一开始就被设计成可插拔的(Pluggable),根据应用...  阅读全文
posted @ 2010-06-22 09:10 kevin.zhan 阅读(298) | 评论 (0)编辑 收藏

移动心机,就是垃圾,一按到功能键就上网,这样每个月都不知道要扣多少GPRS流量费。
好了,不多说,上解决方法:
1、菜单----设置----Internet配置文件----选择----新增-----
2、标题“关闭上网”(随便一个名称都行)----使用代理“关”----接入点“DM APN”----完成
3、移动梦网----设置----模式----选择“新增”
4、标题“关闭上网”----主页“输入一个无效网址”----互联网配置文件(选择)“步骤2中的‘关闭上网’”----完成----激活。
5、设置完成后,在“桌面”状态下按到“梦网上网键”,则会出现“未发现请求的主机”的提示,按“确定”即刻返回“桌面”。
posted @ 2010-06-11 22:33 kevin.zhan 阅读(308) | 评论 (0)编辑 收藏

1. Session和事务范围(transaction scope)
   SessionFactory
对象的创建代价很昂贵,它是线程安全的对象,它为所有的应用程序线程所共享。它只创建一次,通常是在应用程序启动的时候,由一个Configuraion的实例来创建。

Session对象的创建代价比较小,是非线程安全的,对于单个请求,单个会话、单个的 工作单元而言,它只被使用一次,然后就丢弃。只有在需要的时候,一个Session对象 才会获取一个JDBC的Connection(或一个Datasource) 对象,因此假若不使用的时候它不消费任何资源。

此外我们还要考虑数据库事务。数据库事务应该尽可能的短,降低数据库中的锁争用。 数据库长事务会阻止你的应用程序扩展到高的并发负载。因此,假若在用户思考期间让数据库事务开着,直到整个工作单元完成才关闭这个事务,这绝不是一个好的设计。

一个操作单元(Unit of work)的范围是多大?单个的Hibernate Session能跨越多个 数据库事务吗?还是一个Session的作用范围对应一个数据库事务的范围?应该何时打开 Session,何时关闭Session?,你又如何划分数据库事务的边界呢?
1.1 操作单元(Unit of work)

         首先,别用session-per-operation这种反模式了,也就是说,在单个线程中, 不要因为一次简单的数据库调用,就打开和关闭一次Session!数据库事务也是如此。 应用程序中的数据库调用是按照计划好的次序,分组为原子的操作单元。(注意,这也意味着,应用程 序中,在单个的SQL语句发送之后,自动事务提交(auto-commit)模式失效了。这种模式专门为SQL控制台操作设计的。 Hibernate禁止立即自动事务提交模式,或者期望应用服务器禁止立即自动事务提交模式。)数据库事务绝不是可有可无的,任何与数据库之间的通讯都必须在某个事务中进行,不管你是在读还是在写数据。对读数据而言,应该避免auto-commit行为,因为很多小的事务比一个清晰定义的工作单元性能差。后者也更容易维护和扩展。

在多用户的client/server应用程序中,最常用的模式是 每个请求一个会话(session-per-request)。 在这种模式下,来自客户端的请求被发送到服务器端(即Hibernate持久化层运行的地方),一 个新的Hibernate Session被打开,并且执行这个操作单元中所有的数据库操作。 一旦操作完成(同时对客户端的响应也准备就绪),session被同步,然后关闭。你也可以使用单 个数据库事务来处理客户端请求,在你打开Session之后启动事务,在你关闭 Session之前提交事务。会话和请求之间的关系是一对一的关系,这种模式对 于大多数应用程序来说是很棒的。

实现才是真正的挑战。Hibernate内置了对"当前session(current session)" 的管理,用于简化此模式。你要做的一切就是在服务器端要处理请求的时候,开启事务,在响应发送给客户之前结束事务。你可以用任何方式来完成这一操作,通常的方案有ServletFilter,在service方法中进行pointcut的AOP拦截器,或者proxy/interception容器。EJB容器是实现横切诸如EJB session bean上的事务分界,用CMT对事务进行声明等方面的标准手段。假若你决定使用编程式的事务分界,请参考本章后面讲到的Hibernate Transaction API,这对易用性和代码可移植性都有好处。

在任何时间,任何地方,你的应用代码可以通过简单的调用sessionFactory.getCurrentSession()来访问"当前session",用于处理请求。你总是会得到当前数据库事务范围内的Session。在使用本地资源或JTA环境时,必须配置它,请参见第 2.5 节 “上下文相关的(Contextual)Session”

有时,将Session和数据库事务的边界延伸到"展示层被渲染后"会带来便利。有些serlvet应用程序在对请求进行处理后,有个单独的渲染期,这种延伸对这种程序特别有用。假若你实现你自己的拦截器,把事务边界延伸到展示层渲染结束后非常容易。然而,假若你依赖有容器管理事务的EJB,这就不太容易了,因为事务会在EJB方法返回后结束,而那是在任何展示层渲染开始之前。请访问Hibernate网站和论坛,你可以找到Open Session in View这一模式的提示和示例。
1.1 长对话

         

session-per-request模式不仅仅是一个可以用来设计操作单元的有用概念。很多业务处理都需 要一系列完整的与用户之间的交互,而这些用户是指对数据库有交叉访问的用户。在基于web的应用和企业 应用中,跨用户交互的数据库事务是无法接受的。考虑下面的例子:

  • 在界面的第一屏,打开对话框,用户所看到的数据是被一个特定的 Session 和数据 库事务载入(load)的。用户可以随意修改对话框中的数据对象。

  • 5分钟后,用户点击“保存”,期望所做出的修改被持久化;同时他也期望自己是唯一修改这个信息的人,不会出现 修改冲突。

从用户的角度来看,我们把这个操作单元称为长时间运行的对话(conversation),或者(or 应用事务,application transaction)。 在你的应用程序中,可以有很多种方法来实现它。

头一个幼稚的做法是,在用户思考的过程中,保持Session和数据库事务是打开的, 保持数据库锁定,以阻止并发修改,从而保证数据库事务隔离级别和原子操作。这种方式当然是一个反模式, 因为锁争用会导致应用程序无法扩展并发用户的数目。

很明显,我们必须使用多个数据库事务来实现这个对话。在这个例子中,维护业务处理的 事务隔离变成了应用程序层的部分责任。一个对话通常跨越多个数据库事务。如果仅仅只有一 个数据库事务(最后的那个事务)保存更新过的数据,而所有其他事务只是单纯的读取数据(例如在一 个跨越多个请求/响应周期的向导风格的对话框中),那么应用程序事务将保证其原子性。这种方式比听 起来还要容易实现,特别是当你使用了Hibernate的下述特性的时候:

  • 自动版本化 - Hibernate能够自动进行乐观并发控制 ,如果在用户思考 的过程中发生并发修改,Hibernate能够自动检测到。一般我们只在对话结束时才检查。

  • 脱管对象(Detached Objects)- 如果你决定采用前面已经讨论过的 session-per-request模式,所有载入的实例在用户思考的过程 中都处于与Session脱离的状态。Hibernate允许你把与Session脱离的对象重新关联到Session 上,并且对修改进行持久化,这种模式被称为 session-per-request-with-detached-objects。自动版本化被用来隔离并发修改。

  • Extended (or Long) Session - Hibernate 的Session 可以在数据库事务提交之后和底层的JDBC连接断开,当一个新的客户端请求到来的时候,它又重新连接上底层的 JDBC连接。这种模式被称之为session-per-conversation,这种情况可 能会造成不必要的Session和JDBC连接的重新关联。自动版本化被用来隔离并发修改, Session通常不允许自动flush,而是明确flush。

session-per-request-with-detached-objectssession-per-conversation 各有优缺点,我们在本章后面乐观并发 控制那部分再进行讨论。


posted @ 2010-05-20 00:04 kevin.zhan 阅读(199) | 评论 (0)编辑 收藏

在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean
Spring IoC:IoC容器负责容纳此前所描述的bean,并对bean进行管理。
    职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
posted @ 2010-05-19 23:58 kevin.zhan 阅读(175) | 评论 (0)编辑 收藏


===================常用========================
Ctrl+J : 列出成员 智能感知
Ctrl+F: 查找
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Ctrl+Shift+L: 删除当前行
Ctrl+E,D     ----格式化全部代码   
Ctrl+E,F     ----格式化选中的代码  
Ctrl+W,P: 属性窗口

Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写
Ctrl+K+Crtr+C: 注释选定内容
Ctrl+K+Crtr+U: 取消选定注释内容


===================全部========================
Ctrl+m+Crtr+o折叠所有大纲
Ctrl+M+Crtr+P: 停止大纲显示
Ctrl+K+Crtr+C: 注释选定内容
Ctrl+K+Crtr+U: 取消选定注释内容
Ctrl+J : 列出成员 智能感知
Shift+Alt+Enter: 切换全屏编辑
Ctrl+B,T / Ctrl+K,K: 切换书签开关
Ctrl+B,N / Ctrl+K,N: 移动到下一书签
Ctrl+B,P: 移动到上一书签
Ctrl+B,C: 清除全部标签
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
Ctrl+Shift+V: 剪贴板循环
Ctrl+左右箭头键: 一次可以移动一个单词
Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
Ctrl+Shift+L: 删除当前行
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态

Ctrl+E,S: 查看空白
Ctrl+E,W: 自动换行
Ctrl+G: 转到指定行
Shift+Alt+箭头键: 选择矩形文本
Alt+鼠标左按钮: 选择矩形文本
Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写
代码快捷键

Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息
Ctrl+K,I: 快速信息
Ctrl+E,U / Ctrl+K,U: 取消选定注释内容
Ctrl+K,M: 生成方法存根
Ctrl+K,X: 插入代码段
Ctrl+K,S: 插入外侧代码
F12: 转到所调用过程或变量的定义
窗口快捷键
Ctrl+W,W: 浏览器窗口
Ctrl+W,S: 解决方案管理器
Ctrl+W,C: 类视图
Ctrl+W,E: 错误列表
Ctrl+W,O: 输出视图
trl+W,P: 属性窗口
Ctrl+W,T: 任务列表
Ctrl+W,X: 工具箱
Ctrl+W,B: 书签窗口
Ctrl+W,U: 文档大纲
Ctrl+D,B: 断点窗口
Ctrl+D,I: 即时窗口
Ctrl+Tab: 活动窗体切换
Ctrl+Shift+N: 新建项目
Ctrl+Shift+O: 打开项目
Ctrl+Shift+S: 全部保存
Shift+Alt+C: 新建类
Ctrl+Shift+A: 新建项
Shift+Alt+Enter: 切换全屏编辑
Ctrl+B,T / Ctrl+K,K: 切换书签开关
Ctrl+B,N / Ctrl+K,N: 移动到下一书签
Ctrl+B,P: 移动到上一书签
Ctrl+B,C: 清除全部标签
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
Ctrl+Shift+V: 剪贴板循环
Ctrl+左右箭头键: 一次可以移动一个单词
Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
Ctrl+Shift+L: 删除当前行
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态
Ctrl+M,P: 停止大纲显示
Ctrl+E,S: 查看空白
Ctrl+E,W: 自动换行
Ctrl+G: 转到指定行
Shift+Alt+箭头键: 选择矩形文本
Alt+鼠标左按钮: 选择矩形文本
Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写

posted @ 2010-01-12 15:53 kevin.zhan 阅读(213) | 评论 (0)编辑 收藏