paulwong

#

对象池

     摘要: 如果一个B/S的应用,并发量在2000以上时,新建的对象累积会占用大量内存,当超过一定数量的时候,会报内存不够,使用享元模式就可以解决这一问题,也就是建立对象池。现在的方案可以使用Apache Commons Pool。一、基本String对象测试 Code highlighting produced by Actipro CodeHighlighter (freeware) htt...  阅读全文

posted @ 2011-10-23 17:02 paulwong 阅读(319) | 评论 (0)编辑 收藏

T60升级内存的问题

最近T60使用ECLIPSE时老报内存不够,机器原本用的是2G的内存,因此打算升级内存,看了网上的各种文章,决定采用直接换成2根2G,组成4G的内存使用,由于之前说法,32位的操作系统只能认3G的内存,有1G是没用上的,结果也是这样,但说装上RAMDISK后,可以将那1G内存转成内存硬盘,给虚拟内存用,因此也不会浪费,结果试了N多次,虚拟硬盘用的内存不是额外的那1G,最后查资料,结论如下:如果要他显示4G要满足如下条件:

1. 要在PC中使用超过4GB的内存,需要同时满足以下若干条件
(1)主板配置有支持至少8GB内存寻址的芯片组(例如Intel P965/P975)
(2)CPU支持X64指令集(例如Intel Core2处理器)
(3)BIOS支持memory remapping
(4)使用64bit的操作系统(或支持物理内存扩展技术的32bit操作系统)

2. Intel 945芯片组或更早期的芯片组,受到32bit的限制,最大只能寻址到4GB,也就是说只能访问4GB以内的地址。但是这4GB地址并不是完全留给内存使用的,与此同时,各种接口、IO设备都还需要分配大量的寻址空间(例如显卡通常就要占用数百MB),所以最后留给系统物理内存这一硬件的寻址空间,就只剩下3GB多一些。而操作系统也只能识别到这么多的物理内存。因此,如果PC系统的硬件达不到以上第一点中的(1)(2)(3)条时,即使在系统中安装超过4GB的内存,能够被识别的物理内存也只有4GB,而留给操作系统使用的只有3GB多一些。

3. 操作系统对识别的内存数也有影响。32bit的操作系统只具备4GB的寻址能力,即使硬件满足上述使用4GB内存的条件,限于操作系统的寻址空间限制,必须要保留数百MB的寻址空间给各种接口和IO设备,因此操作系统仍然最多只可以用到3GB多一些的物理内存。而64bit的操作系统下,因为把各种接口和IO设备所占用的地址空间移到更靠后的地址段,因此4GB物理内存可以完全寻址,也就是完全识别使用。再延伸一下,同理可以推断,假设某64bit操作系统的最大寻址能力是8GB,而系统安装了8GB的物理内存,那么操作系统可以识别并使用的内存也就是7GB多一些。

芯片组的问题,浪费了1G内存。

posted @ 2011-10-15 23:49 paulwong 阅读(2793) | 评论 (0)编辑 收藏

HUDSON

http://digitalsonic.iteye.com/blog/610401

posted @ 2011-10-15 01:48 paulwong 阅读(137) | 评论 (0)编辑 收藏

深入浅出JAAS

JAAS:JAVA的认证和权限系统,是JDK级的,并且属于J2EE的规范之一,容器必须要实现的。
作用就要规范外部(对于J2EE程序,外部指浏览器客户端,对于J2SE程序,外部指调用程序)如果要作用JDK里面的东西时的情况。
认证:
  1. 把验证代码写在LOGINMODULE的实现类的login()方法中
  2. 通过配置文件和加JAVA_OTPS的方式告诉JDK类全名
  3. 告诉JDK需要使用认证的地方
    如果是J2SE的程序,在需要认证的地方加上LOGINCONTEXT的login(),JDK会回调上面的login()方法,不通过则抛出excetion,通过则将客户端相关信息保存到SUBJECT中;
    如果是J2EE程序,则在WEB.XML中配置相应元素,容器会回调上面的login()方法,如果不通过则导到登录页面,通过则将客户端相关信息保存到SUBJECT中
验证权限:
  1. 写好权限策略内容:以PRINCALS为单位,列出这个PRINCALS能做的事:PERMISSION子类列表,PERMISSION子类实现了要保护的对象,关键识别参数,操作保护方法,保存为策略文件
  2. 把涉及到保护对象操作的代码放到PrivilegedAction实现类的run()方法内
  3. 通过配置文件和加JAVA_OTPS的方式告诉JDK资源文件全名,策略文件全名和需要启用SECURITY MANAGER 
  4. 在需要验证权限的地方,调用Subject.doAsPrivileged(Subject, PrivilegedAction, null),JDK或容器根据策略文件该SUBJECT是有操作要保护对象的权限,没有则则抛出excetion,有则执行
相关实例可参照http://download.oracle.com/javase/1.4.2/docs/guide/security/jaas/tutorials/GeneralAcnAndAzn.html

 

posted @ 2011-10-06 11:38 paulwong 阅读(317) | 评论 (0)编辑 收藏

淘宝面试记


最过三个星期的面试,人生的第一次转折终于尘埃落定,虽然过程很平坦,但还是颇有感慨。

有喜就有悲,其中拒了四个公司的offer,其中有一家实在是不情愿,而且自己还有些失落,不过为了自己的目标,选择去杭州淘宝。人生就是这样,很多东西是缘分注定了的。
先说下我自己的情况,本人毕业三流二本大学,非计算机专业,因 个人兴趣而走向java这条路,其中也经历过培训机构,但个人感觉培训机构教的太浅,而且更多教会大家忽悠,导致了很多人心浮气躁,学习还是靠自己,如果 不去多写和多想,肯定在技术这条路上会出现瓶颈,当然不是全针对技术这条路,这个社会本来就是浮躁的,当然一批浮躁的人也成功了。在这二年学习路上,我给 自己定无数个小目标,然后一一去实现,去研究,再加上兴趣和激情,感觉这二年对互联网及java及oo有一积累了不少知识,感觉此时时机已经成熟,所以开 始了为期三周的漫长而又煎熬的面试旅程。

面试从一个创业公司开始的,刚开始就是想积累下面试经验,毕竟 本人属于内敛型,心里虽有千言,而有时也无从娓娓向面试官道来。所以就先锤炼一番,然后再向心中的理想公司淘宝进军。第一个创业的公司面试我的人是个博 士,理论型的,他研究的分布式存储方向,正好也是我感兴趣的东西。所以聊得很高兴,然后接着让我去见公司老板。当然创业公司对我这种人来说,没有太大的吸 引力,虽然他们很有前景,但我已定下目标,所以后面就拒了这个offer。后面接而连三面了几个公司,包括复试,基本上技术面试都没有太大难度,无非就是 问的比较浅的GC,类加载,集合,线程,tomcat优化,性能,互联网在不同时候的架构,设计模式,ssh之类的,都没有太深入去问,就这样过了二周, 又先后拿到3个offer,然后就直接拒掉了一个台湾公司的,没办法,对台湾公司有阴影。其它2个offer都给了不错的待遇。这时我也通过这么多面试积 累了不少面试经验,知道如何去表达个人观点,如何去描述项目和相关技术,如何阐述思想的东西。我于是以一颗憧憬的心向淘宝投了个人简历,接下来在不经意之 间开始淘宝紧感促的面试之旅。
话说先赞下淘宝的办事效率,从我投简历的那晚上开始,第二天就接到电话面试,然后又隔了一天,接到第二轮视频面试的电话,隔天进行视频面试,视 频面试完,下个周一又接到杭州总部面试的通知,总部面试完,隔天又收到面试通过的EMail,全后经历三次5轮面试,时间刚好一周,不像有些公司,前后要 经历一到二个月的等待。
接下来说下淘宝面试的经历,淘宝面试官在技术面试时,总体上是按你简历上写的东西一直面下来,时间大概一个小时多一点点,所以在写简历时一定要 认真仔细想清楚,多了给人不诚实的感觉,少了估计面试的机会都没有。其中有几个点必问,JVMGC深层机制、类加载,包括Tomcat和Jboss的、线 程相关的如离线锁,互斥同步,java主线程和工作线程机制,concurrent包下的锁和sync关键字一些区别,然后就是concurrent包原 代码的考查、接着就是数据结构重点是hashmap的结构问题然后大到分布式缓存hash算法的一些应用、然后就是设计模式及在你们项目中的运用,你对设 计模式的理解,如一些模式之间的差别。然后就是互联网相关的东西了,如从前到后的架构,大数据量下并发同步方法,异步思想的理解,NIO的运 用,CAP/BASE思想在淘宝如订单这块的应用,还有如果你有NOSQL或Hadoop相关知识,他们可能会问Nosql中HBase中HMaster 如何保证单点,Hadoop的一些基本运用,如果你没在简历上写可能不会问的。问题可能是不同的面试官问的东西不一样,不过对java基础及思想问题都必 不可少,还有对项目的理解一定要到位,要不很容易被问得不知所措。在经历了3轮面试后,接下来就是hr的部门老大面试,这一关无非就是不按简历上来自我介 绍,优点缺点总结,职业规范,当前职位薪水,兴趣爱好等,不过最主要是的部门老大这,一般他会给你些紧张的氛围,然后故意问些你不可能不注意的领域,如你 们公司做的东西和竟争对手相比你们的优点和缺点,你对你对手公司平台的了解善等,过了这轮面试基本上就确定了你面试是否成功,然后接下来就是人品面试了, 进了一个很随和的人,谈项目,谈事业,谈人生,谈各种,反正是谈笑风声,这时基本上就确定你是否完全通过面试。大概就这样,在和最后一位面试官的谈笑风声 中,结束了所有面试,然后面试官心平气和的送我出去,并说最快明天有通知,然后大家握手告别,就这样,淘宝的面试之旅全部结束。

果真第二天收到面试通过的email,然后接下来就是等hr电话谈待遇。待遇多少就不太重要了,毕竟淘宝是我的目标,也是个做java很不错的地方,借用别人的一句话,多点不会发财,少点不会饿死,关键是兴趣就是工作,工作就是兴趣,人生也就这样,做到自己的定位很重要。
http://blog.csdn.net/dimly113/article/details/6541686

posted @ 2011-09-16 14:57 paulwong 阅读(406) | 评论 (0)编辑 收藏

分布式事务JTA,JCA,JTS

在分布式的J2EE应用中,可能会碰到以下情景:
在一个方法中,会调用到好几个数据源,如不同的DB,JMS,内容仓库等,如何使这些不同的数据操作都能处于同一事务中呢?于是便有了JTA/JCA这种标准。

  1. 数据库,JMS或内容仓库抽象为RESOURCE
  2. 在Resource之上加一层Resource Adapter(在JTA中称为Resource Manager),统一数据操作等的方法名称。在应用服务器中配置数据源驱动程序中,通常有一项可选的:XARESOURCE,即是指这一Adapter,每一RESOURCE均有一Adapter对应,如内容仓库中则有JCA RESOURCE。
  3. 在Resource Adapter之上增加一层Connector Manager(在JTA中称为Traction),负责将数据操作加入到事务队伍中。
  4. Transaction Manager(由应用服务器实现)/UserTraction(由用户控制),开始事务边界,总体对事务队列中的事务进行提交,或回滚。



J2EE则是通过此机制来达到事务的统一。

参考:http://zhongl.iteye.com/blog/317041

posted @ 2011-09-09 00:25 paulwong 阅读(925) | 评论 (0)编辑 收藏

分布式事务简述

  随着系统越来越大,不断的模块化和SOA化,你的系统可能被分散于不同的机器上,这时候,你原先的单机本地事务可能已经无法满足你的需求,你可能要跨系统跨资源的去使用事务。这就是分布式事务。
  事务有四个特性:
  1.    原子性
  2.    一致性
  3.    隔离性
  4.    持久性
  具体就不多介绍了,相信大家都能明白ACID特性的基本含义。

事务模型

而一个具体的事务需要涉及到的模型(无论哪种模型)一般由下面几部分组成:
  1. AP 应用程序
  2. RM 资源管理器
  3. TM 事务管理器
这里的资源管理器一般指数据库资源,而事务管理器,大多是由数据库厂商提供。
那么其实在分布式事务中,也应该符合以上事务的特性和模型,只是资源管理器(RM)变得多了起来.

分布式事务介绍

分布式事务最大的问题在于如何确定资源的状态,以及保证一致性,原子性
一般来说分布事务由
  1. 原子提交协议 
  2. 协调器
  3. 参与者
  4. 事务恢复器
  5. 死锁检测器
五部分组成。

原子提交协议指的是如何保证原子提交,一般分为单阶段原子提交协议两阶段原子提交协议三阶段原子提交协议

对于单阶段原子提交协议来说,根本没有办法保证分布式事务的原子性,所以不适用于分布式事务中。

两阶段原子提交协议则是 各种分布式事务实现中使用最广泛的一种原子提交协议:它主要是交事务提交的过程分为二阶段,投票和最终提交。事务由协调者发起一个事务,参与者加入到事务 中后,第一阶段时候,所有的参与者准备资源,并将资源hold住,协调者询问所有的参与者是否可以提交?所有的参与者向协调者响应结果YES/NO,当所 有的协调者都响应YES的时候,协调者才会发起第二阶段,向所有的参与者通知提交事务,当所有的参与者都提交确认会会再通知协调者。至此事务处理完毕。

三阶段提交协议由于协调者与参与者多次进行沟通所以代价很大,一般不会使用。但是它能缩小事务处理“不确定”状态的延迟时间。

所谓“不确定”状态就是指当参与者向协调者反馈可以提交的时候,长时间没有收到协调者的通知,这时候参与者没有办法确定事务最终需要如何处理,所以状态为不确定状态。

协调者,参与者一般通过如下动作来进行通信:
  1. join:由协调者提供,用来注册新的参与者
  2. canCommit:协调者询问参与者是否能够提交
  3. doCommit :协调者通知参与者提交事务
  4. doAbort:协调者通知参与者放弃事务
  5. haveCommit:参与者向协调者确认已经提交事务
  6. getDecision:当处于“不确定”状态时,参与者用来询问协调者事务的目前状态。
对于haveCommit特别说明一下,是当第一阶段的时候,协调者发现长时间参与者没有向协调者反馈事务状态,则协调者会主动调用该接口事务的情况,如果仍然无响应,则会通知所有的参与者放弃该事务。

任何事情都会有意外产生,特别是对于跨系统间的通信更容易产生问题,比如网络异常,机器down机,这个时候就需要事务恢复器来作相应的处理。

对于处于第一阶段的事务,
如果参与者发生意外,则协调者会通知所有的参与者进行事务放弃,但是如果协调者出生故障时,就必须要能 够就行事务恢复,所以协调者必须在开始事务的时候,产生唯一的事务ID,并且对事务进行持久化,在协调者恢复的时候,参够让人参与者继续进行事务。

而对于第二阶段出现的故障,
由于第一阶段进行了资源的个决,则事务认为是必然能成功的,这个事候,如果这个时候参与者发生故障,则协调者需要一套重试机制,让参与者在恢复过来后,能够将事务进行完成或者人工介入。

关于死锁检测器这里就不多描述了,以后有机会再描述。

posted @ 2011-08-22 13:22 paulwong 阅读(247) | 评论 (0)编辑 收藏

茶餐廳新招!高科技吸客生意大增

茶餐廳新招!高科技吸客生意大增

茶餐廳 (茶記) 是香港的飲食文化特色,提起茶記,第一時間令各位想到,香滑奶茶及支竹火腩飯。隨著茶記越開越多,競爭也變大。每家茶記都要各出奇招吸引顧客,例如提供更多款式的餸菜。今次 unwire 專訪一間位於青山道 520 號的集蘭冰室的老闆 – Terry Wu,看他如何活用最新科枝吸引食客,讓生意額上升。

免費 WiFi 更添麻煩
近年香港人越來越多人使用智能手機上網,Terry 就參考了 Cafe 的理念,把 Wifi 引進自己的茶餐廳中。Terry 指出 WiFi 設置後,開始讓路人注意,有人更特地進來上網談生意、甚至有「打工仔」蛇王來上網炒股。不過 Terry 很快便發現此舉開始帶來困擾,有客人一杯奶茶坐上半天,更過份是 在 PPS 看電影幾小時不結帳!其後更發現  WiFi  被一些非店內食客連接,網速變得很慢。

茶記老闆 Terry Wu 沒想到不限時的 WiFi 會帶來更多的麻煩

 

使用密碼問題更多
就以上的問題,Terry 決定將 WiFi 加設密碼,不過此舉雖然解決了速度問題,但要把長長的密碼告訴顧客,有客人更不知如何輸入密碼,為應付這些問題,令他們的伙計工作量加大,得不償失,顧客也投訴輸入密碼程序麻煩。

改用密碼後,客人經常要求伙計幫忙輸入密碼,也有客人覺得輸入密碼太麻煩。

 

引入企業方案
遇到這個問題,Terry 想起他一位做企業的網絡方案的朋友,經相談後,朋友推薦了他採用他公的一套無線分享方案,器材、設定及管理都一拼都幫老闆免費攪定,以作宣傳之用。該無線方案可設定顧客只能上網 20 分鐘,而且登入時有茶餐廳 Logo ,就如「麥記」一樣。每名顧客都有流量管制,不會因為某顧客過份佔用頻寬而影響到其他客人。對於一些老顧客,Terry 會提供 VIP 帳號讓他們無限任上。透過這些新器材,所有問題都一一解決,而且每月老闆都會收到網絡使用報告,看到客人在網頁、IE、Email …等的使用量,這些資料有助他們分析顧客的性格及興趣。

連接 WiFi 後,客人會看到茶餐廳的 Logo 及使用守則,一切確定後便提供 20 分鐘免費上網,不需密碼

朋友公司提供的 Wi-Fi 分享方案,Router Gateway + 兩台 AP,提供頻寬管理及每月用量詳細報告

 

Twitter更新每日餐單
近來很多品牌都使用了 Facebook 的粉絲頁幫助自己宣助,不過 Terry 就沒有使用 Facebook,反為選擇了 Twitter,原因是 Twitter 的即時推送比 Facebook 更實用,Facebook 的 Wall 不會全部把朋友的更新顯示出來,反為 Twitter 會跟 TimeLine 型式即時顯示。Terry 每天會把午餐的菜單拍照傳到  Twitter 上,Follow 了他的食客看到合胃口的東西,就會自然去光顧,不用再每天來電查詢,更有顧客特地在 Twitter 裡叫老闆留低某款午餐。Terry 笑言:「自從有了 Twitter 後,食客就好像我們的朋友一樣近,有時更會送他們一些免費飲品或其他著數,加大他們的歸屬感。」

茶餐廳內張貼了 Twitter 告示,鼓勵客人跟隨

老闆 Terry 每天都會使用他的 Motorola Milestone 1 拍下餐單,透過 Twitter 通知食客

 

成功拉近顧客距離
雖然現時 Twitter 只有約 50 名跟隨者,但其實 Terry 表示此數目已經很滿足,以辦公室為例,只要有一個同事跟了 Twitter ,他就會帶另外 3- 4 位同事下來吃飯,所以潛在顧客其實有數百,加設 Twitter 及 Wi-Fi 後,繁忙時間大都滿座需要等位,令伙計忙得透不過氣來。

食客每天看看 Twitter 就知道有甚麼好東西吃

顧客更會在 Twitter 上叫老闆「留餸」,非常有趣。

 

潮爆緊貼主流
Terry 的手機是 Motorola Milestone 1,他笑說有點舊跟不上潮流,不過日常 Twitter 及email等還是可以應付。他更說 iPhone 有很多 APP 及娛樂性強,但他愛 Android 的自訂性及 Motorola 的 Crystal Talk 話音質素很好。閒談間我們談到 Nokia,彼此都對 Nokia 有相同的意見,老闆更爆料,現時 Nokia 的高層 Bruce 是他的舊同學呢!筆者在訪問時,看到Terry 也有玩 Google+ ,他說他喜愛 Google+ 社交圈子的設定,比 Facebook 更方便。別以為以上的都是年青人的玩意,身為茶餐廳的老闆 Terry 也能緊貼網絡潮流。

Terry 笑言他的手機有點過時

 

做生意必需要有個人賣點
筆者好奇問 Terry,為何當初會有這些念頭,Terry 回答說其實做生意只要有個性,做出跟別人的不一樣,已是成功了一半,如果老是抄襲別人的話,只會被人牽著鼻子走,一世做「阿二」!因此創意才是最重要。好像茶餐廳,在香港每一間都是大同少異,有甚麼要令顧客選擇你呢? 我就選擇了用 Twitter 跟顧客做互動。

做生意具個人特色才能容易成功

 

老顧客讚老闆夠潮
光顧多年的老食客陳先生,已經成了老闆的好友,陳先生也享有「VIP」帳戶,享受無限任上的 Wi-Fi,陳先生指 Terry 非常緊貼科技及有創意,有時陳先生也有會跟客戶來此邊吃邊談生意,Wi-Fi 上網幫助他不少,雖然他擁有 iPhone4 及一台 Samsung Android Phone 可作 Hotspot 之用,但他說手機連線始終不及 Wi-Fi 穩定和快速。

光顧多年的陳先生,大讚老闆夠潮而且很有生意頭腦

 

後記 : 要緊貼顧客所需
Terry 的成功,除了有個人特色外,就是他了解顧客有何需求,也清楚自己的核心價值,沒有去胡亂更改食物餐單,保持了食客的口味習慣,反為在其他方面提供增值服務。筆者個人認為,做任何生意都要清楚自己的核心價值及巿場定位,緊貼顧客所需麼,再建造個人特色賣點就很已足夠了,切勿看到別人有甚麼,自己就加甚麼,就以為這樣會像別人般成功,有時加進的未必是你客人所需,反而令顧客反感,得不償失。

posted @ 2011-08-18 21:48 paulwong 阅读(250) | 评论 (0)编辑 收藏

《真实世界 Java EE 模式》阅读笔记 01:重新思考业务层

对于任何一种技术来说,好用和用好是两个不同的概念。《真实世界 Java EE 模式:重新思考最佳实践》(Real World Java EE Patterns: Rethinking Best Practices)就是教我们如何用好 Java EE 的一本书,也是目前市面上能找到的唯一一本,非常值得一读。前两章是一些概述性的文字,所以直接从第 3 章“服务门面(应用程序服务)”(Service Façade (Application Service))开始。

概述

本章的开头对 Java EE 中的服务门面进行了简介,下面是我的归纳。服务门面的作用是将独立且可重用服务的组合起来,其概念和门面模式差不多,只不过要加上一些 Java EE 所特有的东西。 它是一个带本地接口的会话 Bean(通常是无态的)。除非需要从 JVM 之外进行访问,否则不应当提供远程接口。它充当展示层和业务层之间的界限,其方法都由客户端调用,不应当出现门面之间相互调用的情况。任何客户端和门面间的交互都属于业务会话,每次调用都启动一个新的事务,因此门面类需要带有TransactionAttributeType.REQUIRES_NEW 注解。

策略
接下来作者讨论了各种服务门面的实现策略,它们是本章的重点:

CRUD 门面
一个 CRUD 门面只是一个暴露的、事务性的 DAO。在 J2EE 时代,通常将服务门面的所有方法调用委托给后台的 DAO。EJB 3.0 本来就是 POJO,所以这种委托已经显得多余了。在 EJB 3.1 里,甚至连 EJB 接口都是可选的,例如:  
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
public class BookService 
 
    @PersistenceContext
    
private EntityManager em; 
 
    
public void createBook(Book book) 
        em.persist(book); 
    }
 
 
    
// 
 
}
  


双视图门面
服务门面通常都由部署在同一个 ear 中的 Web 组件直接访问,但有时候也需要提供远程接口供外部客户端使用(例如使用 Swing 开发的 EJB 客户端应用程序)。这种情况就可以使用双视图:  
public interface BookServiceRemote {// 
 
public interface BookServiceLocal extends BookServiceLocal {// 
 
@Stateless
@Local(BookServiceLocal.
class
@Remote(BookServiceRemote.
class
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
public class BookService implements BookServiceLocal {//  


SOA 门面
SOA 门面的一大特点就是异步,最容易想到的方式就是 JMS,但 JMS 消费者在对事务和消息类型的处理上有些微妙的问题,JMS 生产者和消费者之间不容易交互,而且部署和维护消息队列的成本也比较高。EJB 3.1 引入的异步调用则提供了一种轻量级的异步门面解决方案,简单自然地解决了这些问题:  
@Stateless
@Asynchronous
public class BookService 
 
    
public Future<Order> orderBook(Book book) 
        
// 
        return new AsyncResult<Order>(order); 
    }
 
 
}
  


多通道门面
通过在门面上增加注解,可以使同一个门面以更多的形式暴露出来。下面代码中的门面不仅是一个 EJB,而且能够提供 SOAP 和 RESTful 的 Web 服务:  
@Stateless
@WebService
@Path(
"book"
public class BookService {//


IIOP 门面
这种门面主要用于和 CORBA / IIOP 兼容,例如可用于和老系统或者 .NET 客户端通信。在一般的 Java 开发中应该很少用到。

总结
虽然本章有很多理论性的东西,但实际上都是围绕 EJB 3.0/3.1 的新特性在讲。正如作者所说,J2EE 时代的诸多模式都是出于对规范的短处进行修补,而并非设计上的最佳实践。这让我想起以前从阿三手上接过来的一个项目,虽然使用 EJB 3.0,但充斥着大量 EJB 2.x 的“设计模式”,造成大量冗余的代码,甚至很多方法委托就是透传。我当时虽然觉得不妥,但也没有充足的理由反驳阿三架构师,实在是可惜了。

posted @ 2011-05-22 11:39 paulwong 阅读(353) | 评论 (0)编辑 收藏

关于特殊字符的一些总结

最近做一个项目,里面很多特殊字符,引发了一些问题,解决后很开心,特别来分享。
特殊字符:
Jörg Ranau
Sigutė Jakštonytė
Côte d'Ivoire

数据库手工导入数据
  1. 先检查数据库的字符集和客户端字符集是否一致。 采用的是UTF8 查看语句:
    select * from nls_database_parameters

  2.  若是采用DOS 下的SQLPLUS 导入数据,需要
    set NLS_LANG=AMERICAN_AMERICA.UTF8
    windows:    
    set NLS_LANG=AMERICAN_AMERICA.UTF8
    unix:    NLS_LANG
    =AMERICAN_AMERICA.UTF8

  3. 检查导入的数据的文件格式,格式采用: UTF8 without BOM, 
    可以用NOTEPAD++, CONVER TO UTF8 without BOM
    也可以用txt , 转换成UTF8.
    第3点非常重要,之前忽略了,发现插入导入数据库后,数据显示不对。 验证你导入的数据是否正确可以用ORACLE DUMP 命令。
    select dump(country_desc),country_desc  from tb_test  where testcode='1';
    Typ=1 Len=14: 67,195,180,116,101,32,100,39,73,118,111,105,114,101        Côte d'Ivoie
数据库脚本中遇到特殊字符:

  1. 单引号‘ , oracle 脚本需要写成 两个单引号
  2. 特殊字符&, oracle 表示需要的参数, 若是数据中有这个有2个方法:
    第1 种:
    set define off;
    第2种:
    set escape on;

    然后将所有的&, 替换成/&。
  3. 空行
    用<br> 代替。
JAVA 代码导入数据:

要导入的数据都放在TXT 类型的文件里,通过batch job 导入数据库。
检查导入的数据的文件格式,格式采用: UTF8 without BOM,  可以用NOTEPAD++, CONVER TO UTF8 without BOM

java 代码:

1: 读文件
InputStreamReader read = new InputStreamReader (new FileInputStream(file),"UTF-8");
BufferedReader inBuf
=new BufferedReader(read); 

2: 检查所用开发工具的文件ENCODING 字符。

这个就是会为什么导致没发现:
读文件错误,在开发工具中打出的LOG 欺骗了我们的眼睛。我的开发工具BEA 里JAVA 文件默认ENCODING cp1252, 改成UTF8 就好了。

这个特别容易忽略,当在控制台看LOG的时候,发现读过来的文件里的内容打出来都正确,就忽略了JAVA的源文件。认为是从unicode转换 utf8 有问题,特别将字符又做了处理,发现插入数据库还是不正确。

修改了ENCODING 字符字符后发现读入文件就不对了。这样轻松就解决了。

所以只要修改了读文件的时候采用 UTF8格式就可以啦。

posted @ 2011-05-22 11:28 paulwong 阅读(282) | 评论 (0)编辑 收藏

仅列出标题
共110页: First 上一页 91 92 93 94 95 96 97 98 99 下一页 Last