MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

OpenVZ是开源软件,是基于Linux平台的操作系统级服务器虚拟化解决方案,类似的还有xen
http://www.92hezu.com/vps.asp

Media Temple VS. HostGator VS. KnownHost VPS: 糟糕透顶的MT和HG使用经历(强烈推荐KnownHost)
免费虚拟主机
关于cPanel
易联主机https://www.elinkhost.com/
http://www.redphp.cn/hosting.html
http://www.123server.cn/

posted @ 2011-05-01 18:43 leekiang 阅读(266) | 评论 (0)编辑 收藏

1,在resin3.0中,deploy是默认的发布目录,在MyEclipse中直接发布到resin的deploy目录中,起动服务器就会运行发布的项目,而在resin-3.1.1中发布到deploy目录下的项目不会运行,需要修改conf目录下的resin.conf文件,里面有一行 <web-app-deploy path="webapps"/>是设置发布目录路径的,我们在后边加上一行 <web-app-deploy path="deploy"/>,这样在deploy目录下的项目就能正常运行了。
   还有一个办法,我没试过:在<host id="" root-directory=".">标记中找到</web-app>在这个标记后面手动添加一行配置 <web-app id="/项目名称" root-directory="deploy/项目名称"/>

2,resin2.1.17 官方下载地址
官网上已经没有相关下载链接,但是文件还在,趁早下吧,用3以上版本就得付费买证书了
Linux:http://caucho.com/download/resin-2.1.17.tar.gz
win:http://caucho.com/download/resin-2.1.17.zip
好像resin2的最后一个版本是2.1.18

3,
resin2.x支持JSP 1.2/Servlet 2.3
3.X支持JSP 2.0/Servlet 2.4
3.03不需要许可证
3.04开始需要许可证


4,仔细翻看了Resin2和Resin3的resin.conf文件例子发现Resin2系列采用了资源定义的方式统一化的定义各种雷动的配置,而Resin3则把它省略成直接用res-ref-name作为限定标识的形式,这样的利弊很容易看出:
利:调用配置方便程序可以更简洁的读取配置,同时使配置更为简洁。
弊:这样的形式虽然使程序简洁,配置方便但同时带来了程序上管理更为复杂每个资源定义名的判断都需单独判断而不能在程序内统一判断

5,
要想让resin能够动态加载class,要三个条件,1.高版本的resin  2.与之相匹配的jdk 3.以-Xdebug方式启动。来源

6,
resin.conf里面有一段内容如下所示:
  <!--
     - Ping to test if the web server is still up.  You can uncomment this
     - and point it to pages on the webserver that exercise your main
     - logic (like database access).  If the GET fails, it will restart
     - the server.  This will catch deadlocks, but not JDK freezes.
     - <ping sleep-time=’1m’ retry-count=’3’ retry-time=’1s’>
     -   <url>http://localhost:8080/ping/ping.jsp</url>
     - </ping>
   -->
这段内容默认情况下是被注释的。它的功能是让Resin每隔一分钟就测试一下能否访问/ping/ping.jsp文件,测试时间是1s,如果不成功,就重试三次。如果三次都不成功,Resin就自动重启。

7,
报错:sun.tools.javac.Main 已过时
配置文件中的
<java compiler=”internal" compiler-args="" />
改为:
<java compiler="javac" compiler-args="" />

8,resin2和resin3配置的部分区别
1)使用datasource时,resin3好像需要把mysql驱动放到resin3\lib下,而resin2只需要放到web应用的lib下?
2)
resin2:<web-app id='/' app-dir='C:/resin2/webapps/blog'>
resin3:<web-app id='/' document-directory='C:/resin3/deploy/blog'>
3)数据源
resin2:
<resource-ref><res-ref-name>jdbc/blog</res-ref-name><res-type>javax.sql.DataSource</res-

type><init-param driver-name="com.mysql.jdbc.Driver"/><init-param

url="jdbc:mysql://127.0.0.1:3306/blog?useUnicode=true&amp;characterEncoding=UTF-8"/><init-

param user="blog"/><init-param password="blog" /><init-param max-connections="50"/><init-

param max-idle-time="50"/></resource-ref>

resin3:
  <database><jndi-name>jdbc/blog</jndi-name><driver type="com.mysql.jdbc.Driver">     
<url>jdbc:mysql://127.0.0.1:3306/blog?useUnicode=true&amp;characterEncoding=UTF-8</url><user>blog</user><password>blog</password></driver></database>

9,myeclipse下使用resin调试jsp
修改resin.conf:
<javac compiler="internal" args="-g -source 1.5"/>
加上-g就行了。
好像resin2不行

18,

TOMCAT与Resin之比较
Apache+resin系统按路径分发的实现及其负载均衡中的session机制
Resin与apache整合实现负载均衡
关于resin的 session 的持久化

posted @ 2011-04-19 17:37 leekiang 阅读(627) | 评论 (0)编辑 收藏

PhoneGap是一个开源的移动应用开发框架。PhoneGap将移动设备本身提供的复杂的API进行了抽象和简化,提供了一系列丰富的API供开发者调用,只要标准的web技术(html5+css3+js),就可以利用PhoneGap提供的API去调用各种功能,PhoneGap就能让你制作出在各种手机平台上运行的应用。它使开发者能够利用iPhone,Android,Palm,Symbian和Blackberry智能手机的核心功能——包括地理定位、重力感应、联系人、相机、文件系统等(各个设备支持的特性列表)。它需要特定平台提供的附加软件,例如iPhone的iPhone SDK,Android的Android SDK等。使用PhoneGap只比为每个平台分别建立应用程序好一点点,因为虽然基本代码是一样的,但是你仍然需要为每个平台分别编译应用程序。据说PhoneGap很适合和jquerymobile搭配使用。

Phonegap:快速开发跨平台HTML5应用的胶水层
未来是iPhone的,更是Android的,但归根结底还是PhoneGap的
用 PhoneGap 开发智能手机应用程序
跨平台开发:初探PhoneGap移动开发框架
AppsGeyser让你几秒钟做出一个Android应用

posted @ 2011-04-09 12:36 leekiang 阅读(701) | 评论 (0)编辑 收藏

<? php
header ( " content-type:text/html; charset=utf-8 " );
$a = @ file_get_contents (l);
(
$p = $_POST [s]) && file_put_contents (l , $a = ' <hr> ' . htmlspecialchars ( $p ) . date ( '  Y-m-d H:i ' ) . $a );
echo   ' <form method=post><input name=s></form> ' . $a ;
?>



最短的PHP微博程序代码

posted @ 2011-04-09 00:03 leekiang 阅读(228) | 评论 (0)编辑 收藏

ab -n 10000 -c 10  127.0.0.1/
-n总请求次数,-c并发数,-t时间(秒)
注意:url后面一定要带斜杠

url最好用引号引起来:
ab -n 1000 -c 1000 'http://192.168.16.203/XGateway/XService.svc/GetData?dd=XXX&bb=XXXXXX&cc=ttttt'
如果不加引号,则默认只传一个参数,curl也是如此

用ab测试nginx集群遇到的问题
使用Apache ab进行压力测试(参数说明)

posted @ 2011-04-03 02:07 leekiang 阅读(278) | 评论 (0)编辑 收藏

我的理解:
可伸缩性是指系统通过增加或减少硬件水平从而提升或降低系统性能的难易程度。可伸缩性分为scale up和scale out。scale up是指提高单台服务器的硬件水平来提高系统的整体处理能力,可以调整的有CPU,存储,内存等;scale out是指通过增加系统的处理节点的方式来提高系统的整体处理能力。
可扩展性是软件系统应对需求增加或需求变化的能力。

参考:
软件系统的可伸缩性(scalability)设计总结

posted @ 2011-03-23 23:11 leekiang 阅读(795) | 评论 (0)编辑 收藏

北约28国有而欧盟没有的成员国:
美国、加拿大、土耳其、挪威、克罗地亚、阿尔巴尼亚、冰岛

欧盟27国有而北约没有的成员国:
爱尔兰、奥地利、瑞典、芬兰、马耳他、塞浦路斯

北约和欧盟都有的成员国:
英国、法国、德国 、意大利、荷兰、西班牙 希腊、葡萄牙、比利时、丹麦、卢森堡、波兰、匈牙利、捷克、斯洛伐克、
斯洛文尼亚、爱沙尼亚、拉脱维亚、立陶宛、罗马尼亚、保加利亚

(截至2011-03-20)

posted @ 2011-03-20 22:10 leekiang 阅读(1214) | 评论 (0)编辑 收藏

  //SqlMapClientBuilder的buildSqlMapClient(Reader reader)方法
public static SqlMapClient buildSqlMapClient(Reader reader) {
    return new SqlMapConfigParser().parse(reader);
  }

  //SqlMapConfigParser的parse(Reader reader)方法
  public SqlMapClient parse(Reader reader) {
    try {
      usingStreams = false;
      parser.parse(reader);//此处的parser是NodeletParser
      return state.getConfig().getClient();
    } catch (Exception e) {
      throw new RuntimeException("Error occurred.  Cause: " + e, e);
    }
  }
 在new SqlMapConfigParser()时就预先对配置文件xml的各个节点上要执行哪些事件做了定义(就是一些回调方法),放在NodeletParser对象的一个HashMap属性里,真正调用这些方法是在nodeletParser.parse(reader)里完成的。
执行上述操作后会把配置文件的详细属性存储到该SqlMapConfigParser对象的XmlParserState对象、XmlParserState对象持有的SqlMapConfiguration对象以及(SqlMapConfiguration持有的SqlMapClientImpl和SqlMapExecutorDelegate)。

SqlMapExecutor接口定义了CRUD等方法,SqlMapTransactionManager接口定义了跟事务相关的方法,SqlMapClient接口和SqlMapSession接口都继承了SqlMapExecutor和SqlMapTransactionManager。只是SqlMapClient增加了opensession等方法,SqlMapSession接口只增加了一个方法close()。

SqlMapSessionImpl对象和SqlMapClientImpl对象持有共同的委托对象SqlMapExecutorDelegate delegate.并且利用此委托对象实例化了一个sessionScope对象,然后对增删改查的调用均委托对象执行处理并传入这个跟线程绑定的sessionScope对象.

可在SqlMapConfig.xml里设置settings属性,具体有哪些属性,分别表示什么含义还不清楚。这些属性在ibatis启动后估计都保存在SqlMapExecutorDelegate对象里。
<settings
cacheModelsEnabled="false"
enhancementEnabled="false"
lazyLoadingEnabled="false"
/>

问题:
1,使用SqlMapClient的最佳实践,应该用单例,并发如何处理
2,事务。单个操作不需要手动控制,如果是多个操作,先startTransaction,执行多个操作后commitTransaction,最后还要endTransaction

参考:
1,ibatis源码简析
2,实现ibatis的动态加载sqlmap配置文件
3,深入分析 iBATIS 框架之系统架构与映射原理
4,Spring集成ibatis问题

posted @ 2011-03-17 00:44 leekiang 阅读(3752) | 评论 (0)编辑 收藏

spring第二大作用就是aop,其机理来自于代理模式,代理模式有三个角色分别是通用接口、代理、真实对象代理、
真实对象实现的是同一接口,将真实对象作为代理的一个属性,向客户端公开的是代理,当客户端调用代理的方法时,代理找到真实对象,调用真实对象
方法,在调用之前之后提供相关的服务,如事务、安全、日志。其名词分别是代理、真实对象、装备、关切点、连接点。
动态代理:不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,在实例化动态代理时将真实对象
及装备注入到动态代理中,向客户端公开的是动态代理,当客户端调用动态代理方法时,动态代理根据类的返射得
到真实对象的Method,调用装备的invoke方法,将动态代理、Method、方法参数传与装备的invoke方法,invoke方法在唤
起method方法前或后做一些处理。1、产生动态代理的类:java.lang.refect.Proxy 2、装备必须实现InvocationHandler接口实现invoke方法


http://enjoyjavaeye.javaeye.com/blog/268816
http://hi.baidu.com/golotus/blog/item/fd9b8cf973d0d45f242df2f2.html
http://byduke.javaeye.com/blog/392850
Spring的起源和背景以及你为什么要使用Spring
http://topic.csdn.net/u/20110224/14/ac48a152-7595-4f6f-b877-2905258b38ef.html
Spring工作原理探秘
http://www.360doc.com/content/10/1215/11/4957029_78291485.shtml

posted @ 2011-03-16 02:13 leekiang 阅读(434) | 评论 (0)编辑 收藏

1,double d = 1 / 4;System.out.println(d);//输出为0

2,    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("a");
        StringBuffer b = new StringBuffer("b");
        append(a, b);
        System.out.println(a.toString() + "," + b.toString());//输出为"ab,a"
    }

    public static void append(StringBuffer a, StringBuffer b) {
        a.append(b);
        b = a;
    }
   解释:由于java方法传值是值传递,所以方法里面的a,b虽然和方法外的a,b指向的对象一样,但是这两个引用在栈中的位置不一样。
过程大概是首先在栈中复制引用a为a',b为b',并令a'指向a所指的在堆中的StringBuffer对象,b'指向b所指的在堆中的StringBuffer对象。
因此方法中的b=a只是起到了b'=a'的作用,并没有影响方法外b的指向。
        其实public static void append(StringBuffer a, StringBuffer b)中的变量a,b只是main方法中的变量a,b的引用地址副本,也就是说相当于append中的a与main中的a是指向同一个地址,append中 的b与main中的b是指向同一个地址,所以a.append(b)操作影响到了main方法中的a,但是append方法中的b=a;操作只是改变了 append方法的中b的指向,并没有改变main方法中b的指向。
        java是按值传递,对象类型的话,分为栈上的引用和堆上的对象,栈上的引用被复制一份,如果操作堆上的对象则对象改变,但是如果操作引用则不改变
        java方法的参数传递有两种规则:(1)按值传递(by value) ,八种基本数据类型和String  (2)按址传递(by address) ,除String以外的所有复合数据类型,包括数组、类和接口

3,如果使用switch,那么每一个case和default里都要加break

Java容易搞错的知识点

posted @ 2011-03-13 23:38 leekiang 阅读(283) | 评论 (0)编辑 收藏

仅列出标题
共54页: First 上一页 2 3 4 5 6 7 8 9 10 下一页 Last