计算机程序虚拟的人生
虚拟世界中的游魂

2009年6月25日

第一次接触mina这个物件,在网上看了一些相关的资料,同时也参考了别人的一些分析mina的心得和方式!
mina是何物?
Mina是一个用于开发高性能和高可用性的网络应用程序基础架构,它封装了底层的I/O和线程并发等复杂工作。
Mina主要是基于java NIO类库开发;采用非阻塞方式的异步传输、事件驱动、批量数据传输;支持TCP、UDP网络协议

首先从服务器端启动NioSocketAcceptor对象进行分析。
1、实例化DefaultSocketSessionConfig会话配置器和异步传输NioProcessor处理器
2、实例化AbstractPollingIoAcceptor构造器同时实例化SimpleIoProcessorPool处理器池
      --〉在SimpleProcessorPool中初始化执行器<线程池>,然后初始化一个IoProcessor对象数组,长度为3,最后将处理器对象放入到IoProcessor数组中
      --〉处理化传输带元数据
      --〉初始化服务监视器
      --〉初始化异常监视器
3、初始化过滤链
4、初始化选择器

架构介绍

应用结构图

深入分析结构图

mina的基本应用可以分为3层:
1、I/O Serivce:实际执行I/O层
2、I/OFilter chain:数据过滤和转换层,主要是把字节转换为需要的数据格式或者反过来处理
3、I/OHandler:业务处理层
创建Mina应用分为3部分:
1、创建I/O 2、创建过滤链
3、创建I/O业务处理

posted @ 2009-09-04 12:25 小兄弟(Robbins) 阅读(1396) | 评论 (1)编辑 收藏
 
 Dojo介绍
       Dojo 是一个用javascript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)), 这也是为什么叫它a \"unified\" toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些,长期存在 、历史问题。historical problems with DHTML 跨浏览器问题。Dojo让你更容易 使web页面具有动态能力,或在任何稳健的支持javascript语言的环境中发挥作用。

a、利用dojo提供的组件,你可以提升你的web应用程序可用性、交互能力以及功能上的提高;
b、你也可以 更容易的建立degradeable user interfaces ??,dojo提供小巧的 widgets ,animate transitions;
c、利用它的低级APIs和可兼容的代码,写出轻便的、单一风格(复杂)的javascript代码,Dojo的 event system, I/O APIs, and generic language enhancement form the basis of a powerful programming environment.
d、通过Dojo提供的工具,你可以为你的代码写命令行式的单元测试代码。
e、the Dojo package system使你自己的代码更容易维护,偶合性更低。

Dojo通过很少的代码完成了以上的功能。(以后可能我详细说说dojo的package system ,只需要三个js文件)。当你写脚本时,只需要包含很少的js文件(大小)。也可以选择的(包含)下载dojo提供的庞大的功能。Dojo provides MultiplePointsOfEntry, InterpreterIndependence, ForwardLookingAPIs, and focuses on ReducingBarriersToAdoption.
  dojo试图建立一种新的标签语言DojoML。目标是,在DojoML和javascript脚本语言不变的情况下,用不同的render方式展示数据, Renderings may be made available in several rendering contexts (such as SVG, or perhaps even the desktop or Flash)。(比较美好啊)更进一步,the DojoML 剖析器可以接受html和svg为输入,容易的建立DegradeableResponsiveApplications。

第一部分  安装
第一个小节  怎么安装Dojo Toolkit
 Dojo在磁盘上只是一堆文件,它不需要特殊的设置,它可以通过以下三种途径获得:
 1、可以从google的内容分布网络获得
   加载的方法可以参考http://code.google.com/intl/zh-CN/apis/ajaxlibs/documentation/index.html#dojo
 2、.在你自己的服务器上使用Dojo
  a、下载最新的dojo包,地址:http://dojotoolkit.org/downloads;目前最新的包为1.3.1
  b、解压下载的压缩文件
         --dojo-release-1.3.1-src
            ----dijit
            ----dojo
            ----dojox
            ----util
  c、可以通过D:\Apache-Source\dojo\1.3.1\dojo-release-1.3.1-src\dojo-release-1.3.1-src\dijit\themes\themeTester.html 这样的路径来查看相关的JS例子
3、每日构建代码
   你可以通过SVN地址获得
For instance, Dojo Core repository is:
http://svn.dojotoolkit.org/src/dojo/trunk

There are two versions of this view: anonymous and committer.

For users (readonly):
http://svn.dojotoolkit.org/src/view/anon/all/trunk

For committers (read/write):
https://svn.dojotoolkit.org/src/view/committer/all/trunk

第二部分 Ajax
第一个小节 ajax
a、ajax and Dojo
1)XHR选项
例子:

// post some data, ignore the response:
dojo.xhrPost({
form: "someFormId", // read the url: from the action="" of the <form>
timeout: 3000, // give up after 3 seconds
content: { part:"one", another:"part" } // creates ?part=one&another=part with GET, Sent as POST data when using xhrPost
});
// get some data, convert to JSON
dojo.xhrGet({
url:"data.json",
handleAs:"json",
load: function(data){
for(var i in data){
console.log("key", i, "value", data[i]);
}
}
});

2)XHR回调
有三种方法可以附加到XHR选择对象,以确定当数据回调时该怎么做。


posted @ 2009-06-29 14:20 小兄弟(Robbins) 阅读(368) | 评论 (0)编辑 收藏
 
   如果不输入绝对的URL访问地址,例如:URL=http://localhost:8080/petstore;则Glassfish能够自动的搜索项目中是否存在index.html或者index.jsp页面作为入口页面。 
   CatalogFacade对象在服务器启动时被实例化,然后将实例化的CatalogFacade对象放置到ServletContext环境中,这样可以直接从ServletContext环境中取得CatalogFacade对象进行相关数据方法的调用。
   index.jsp中涉足到一个js框架DOJO,这个需要进一步的学习。
   对数据的增、删、改、查主要用到了JPA来处理。
posted @ 2009-06-29 12:34 小兄弟(Robbins) 阅读(340) | 评论 (0)编辑 收藏
 
    由于PetStore涉及到了jsf,那就没有办法了,还是先看看JSF
--------------------------------------------------------------------------
    JSF是有JCP(JAVA Community Process)团队研发出来的一套标准,并在2004年3月发表JavaServer Faces1.0成果。

    看到一篇内容对初学者目前jsf的了解很重要:注意这篇文章是2006年的内容
       JSF1.1 JSF1.2 myfaces,oracle ADF,ajax4jsf facelets, 它们究竟是什么,有什么关系呢?

JSF1.1 1.2 都是 JSF 的标准,定义例如接口、规范( JSF 是面向接口编程的),必须通过实现才能被我们所使用,而实现包括有 JSF RI(Reference Implementation) ,还有 myfaces core1.1.4 的实现等。 JSF RI SUN JSF 的实现,相对来说兼容性比较好,也比较稳定(因为 1.1 已经很久没更新过了,已经转向 1.2 去了),而 myfaces 更新比较快,功能也比较多一点,初学的推荐 JSF RI1.1 就可以了, 1.2 需要新的 servlet2.5/jsp2.1 以及服务器支持,现在还不稳定。

myfaces ,它是一个大的项目,下面有几个子项目,分别是 myfaces core, sandbox ,tabago,tomahawk ,(奇怪的名字,好难说,我简称它为 TOM ),还有一个新的 ADF Faces (跟 oracle adf 有关,应该是兼容整合 adf 的功能吧)。 Tabago,tom 都是组件库, tabago 比较好玩的是支持换肤,还有一些支持 ajax 的组件, TOM 则是一个丰富的增强组件库,大概有三十个之多,例如 TREE TAB 等等。 Sandbox 是测试用的。

Oracle ADF oracle jsf 做的一个大型的组件库,以前是收费的,现在开源了,我没用过,不好说。

Ajax4jsf 是为 jsf 提供 AJAX 支持的一个标签库,使用它提供的标签,就能在原有的 JSF 程序上轻易的加上 AJAX 的功能,而且不用写任何 Javascript

Facelets 这个是很激动人心的一个框架,有了这个框架才把 JSF 的组件化发挥出来,通过模板的方式来组合成我们所需要的组件,而且可以不使用 <h:input> 这样的标签库,而用 <input type=”text” jsfc=”h:input”> 这样的方式来使用组件,这样就可以方便的使用 UI 可视化工具去开发我们的 WEB 程序。这个框架我会在以后的文章中详细的说,以及和 jsp2.0 的模板功能作对比。
--------------------------------------------------------------------------------
   JSF的session超时问题会在页面上抛出如下异常:
javax.faces.application.ViewExpiredException: viewId:/pages/index.faces - View /pages/index.faces could not be restored.
 at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185)
 at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
 at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 at java.lang.Thread.run(Unknown Source)
    解决方案:
          在web.xml中添加如下代码:
  <error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/pages/SessionRefire.jsp</location>
  </error-page>

----------------------------------------------------
注意:所有的JSF标签一定要包含在<f:view></f:view>这个节点中,不然会报一下问题:

javax.servlet.ServletException: Component javax.faces.component.UIViewRoot@f1fad1 not expected type.  Expected: javax.faces.component.UIOutput.  Perhaps you're missing a tag?
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)


 

posted @ 2009-06-26 09:19 小兄弟(Robbins) 阅读(440) | 评论 (0)编辑 收藏
 
 Hibernate本身自带的连接池算法不成熟,并不适合用于产品系统或者性能测试。出于最佳性能和稳定性考虑你应该使用第三方连接池。
比如使用:C3PO。
C3PO是一个随Hibernate一同分发的开源JDBC连接池。
posted @ 2009-06-25 15:17 小兄弟(Robbins) 阅读(141) | 评论 (0)编辑 收藏