Author Archives: Jay

有关Java泛型的类型擦除(type erasing)

自从Java 5引入泛型之后,Java与C++对于泛型不同的实现的优劣便一直是饭后的谈资。在我之前的很多training中,当讲到Java泛型时总是会和C++的实现比较,一般得出的结论是 Java使用类型擦除(type erasing),泛型信息只在编译时供javac作类型检查用,在编译后便被javac擦除,因此无法被反射 C++使用代码模板实现泛型,即在预处理时会生成类似「list_int」,「list_char」等的泛型类,虽然解决Java的运行时伪泛型的问题,但是会导致编译后的代码呈线性增长 于是在一般情况下,Java的类型擦除实现较优 这三条已经比绝大多数的Java培训讲师讲得深刻了。但是如果下面有人问「在什么情况下C++的实现方式较优」时,除了无法被反射,我很难现抓一个有说服力的例子。今天,Spring的RestTemplate终于给了我这个例子 我遇到的问题如下(阅读需要有一些Spring MVC、REST基础) 有一个返回类型为List的MVC方法: @RequestMapping(value = "…", method = RequestMethod.GET) @ResponseBody public List<DomainClass> doSomethingREST() {     List<DomainClass> domainObjs = … ;     return domainObjs; } @RequestMapping(value = “…”, method = RequestMethod.GET) @ResponseBody public List<DomainClass> doSomethingREST() { List<DomainClass> domainObjs = … ; return domainObjs; } 在运行时,Spring MVC会将List转换成JSON字符串并返回至客户端。但是如果我在另一个service中使用RestTemplate直接调用该REST接口,问题便来了: List<DomainClass> read more »

解决Velocity+Spring的中文乱码问题

将spring配置中的velocity view改为: <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="/WEB-INF/vm/" /> <property name="velocityProperties"> <props> <prop key="input.encoding">utf-8</prop> <prop key="output.encoding">utf-8</prop>     </props>   </property> </bean> <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="cache" value="true" /> <property name="suffix" value=".html" /> <property name="contentType" value="text/html;charset=UTF-8" /> </bean> <bean id=”velocityConfig” class=”org.springframework.web.servlet.view.velocity.VelocityConfigurer”> <property name=”resourceLoaderPath” value=”/WEB-INF/vm/” /> <property name=”velocityProperties”> <props> <prop key=”input.encoding”>utf-8</prop> <prop key=”output.encoding”>utf-8</prop> </props> </property> </bean> read more »

CSDN这回一石激起千层浪了

昨天从cnBeta(来源已经被删,另外搜索CSDN,最近大部分文章都无法打开)得到消息,CSDN数据库库被爆,600w+用户信息泄露,而且全是明文……汗颜啊,这是中国最大的程序员交流平台啊…… 后来事件开始持续发酵,比如酷壳对泄露的密码做了分析,结果很逗。其实,有些时候并不是用户不想提高密码强度,而是网站做得太二,比如我之前和之前喷过的sina和当当 原本考虑到CSDN大学毕业之后就再未上过,密码模式也是之前使用的模式,也就懒得去改密码。可再后来,36氪爆料人人网、多玩网、世纪佳缘等或者已经同样被爆库,于是我只能开始修改各大网站的密码了,因为用的都是差不多的模式……而这又给我之前的猜想提供了一点素材:现在的用户会注册越来越多的网站账号,为了方便一般都会使用相同或差不多的模式,一旦其中一个网站的密码泄露,那影响到的将是以亿为单位的账号数量 另外这两天,连续收到其它网站的贴心邮件,让我修改密码。这一次,CSDN成为了提醒各大网站和用户提高密码安全意识的排头兵,可谓功不可没。但是奇怪的是,微博上对CSDN的讨伐声基本没有,难道是程序员们都太nice了? 补记:就在刚才,百度也给我发来了贴心邮件: 再补:大众点评也发来了邮件 2012新年再补:58同城、人人也相继做出了反应:

About save/persist, update/merge in JPA/Hibernate

Save VS Persist from https://hibernate.onjira.com/browse/HHH-1273 The persist() operation on Session is not cascaded at flush time. This is somewhat unexpected from a users point of view and very difficult to explain and understand (you need excellent knowledge of flushing and cascading). Reason #1 for removal. The persist() operation in general does not return a database read more »

使用Spring LDAP ODM操作LDAP

Spring Source真的是个很神奇的开源社区,从《J2EE without EJB》开始为大家所知晓,到把IoC、AOP大范围地带到大家的开发模型中,再到和Hibernate、Struts组成每个Java函授学校必教的“SSH”组合,从此绿遍大江南北…… 在国内,大马路上随便抓一个Java程序员,10个里有9个半知道Spring;有9个知道怎么把SSH“组装”到一起(是的,“组装”,和流水线上的蓝领熟练工没有本质区别);有9个半知道IoC、AOP;有2个知道IoC和AOP的本质;有3个知道Spring其实分为core、context、orm、tx等不同子框架;有1个知道Spring 3之后可以用annotation取代之前版本大部分的xml配置;有2个知道Spring mvc和security;有半个知道其实Spring的子框架远不止这些……这就是我们当前Java码农们的实际情况。而造成这一局面的,我谓之三害——高校计算机系功利的培养模式、以北大青鸟为首的各种速成班的祸害和程序员们自己懒惰、人云亦云、拒绝思考的慢性自杀 牢骚发完,本文将通过介绍Spring的两个子框架:Spring LDAP和Spring LDAP ODM,来实现对LDAP的操作 项目主页:http://www.springsource.org/ldap,该框架通过提供和ORM中相似的机制对LDAP相关操作进行封装,主要包括: 类比SessionFactory的LdapContextSource 类比HibernateTemplate等的LdapTemplate 伪事务支持,能否与tx框架的TransactionManager混用未知 类比JPA的使用@Entry、@Attribute、@Id标注的ODM——Object Directory Mapping 本文(原先)目标:使用ODM将User类与LDAP中的实体进行映射,LDAP中的实体的objectClass包括inetOrgPerson,organizationalPerson,person,shadowAccount和top 相关配置文件、代码在http://static.springsource.org/spring-ldap/docs/1.3.x/reference/html/上已经很详细了,这里只是做一点旁注,全部来自于这几天和Spring LDAP的斗智斗勇 对于shadowAccount的shadowLastChange域,值是一个整形,至于具体含义网上没有找到解释,试了几次之后发现是从1970-1-1 00:00:00至今的天数,如果model里定义的是Date类型的话,需要自行实现org.springframework.ldap.odm.typeconversion.impl.Converter接口进行转换 对于@Entry标记,其中的objectClasses定义必须与objectClass完全一致。在新建和查询object时,ODM会根据此标记进行匹配,无需再指定objectClass 每个entry必须指定@Id字段,类型为javax.naming.Name,其实就是DN。但是若在LdapContextSource中指定了base,则DN将会按照base截取相对路径。比如,DN为cn=user,ou=users,dc=jayxu,dc=com,base为dc=jayxu,dc=com,则取出的user对象DN为cn=user,ou=users 如果使用Spring MVC对LDAP对象进行JSON序列化,必须注意javax.naming.Name中的某些字段无法被序列化,所以在转换成JSON之前需要将DN置null。一种方法是使用@JsonIgnoreProperties标记model类,比如:@JsonIgnoreProperties(“dn”) 对于不需要与LDAP进行映射的字段使用@Transient进行标记 考虑使用org.springframework.ldap.pool.factory.PoolingContextSource引入连接池 如果事务中需要与JDBC进行互操作,需要使用org.springframework.ldap.transaction.compensating.manager.ContextSourceAndDataSourceTransactionManager作为tx manager

测试Blogspot同步

RT

上海,老卵!

祝贺:发布《Java虚拟机规范 (Java SE 7 中文版)》

原文转自:http://icyfenix.iteye.com/blog/1256329 《Java虚拟机规范 (Java SE 7 中文版)》是一份根据《Java Virtual Machine Specification (Java SE 7)》翻译的、非官方的、以Open Document形式发布的文档。 本译文由ItEye社区三位水友IcyFenix、wupuyuan、langyu合作完成,我们的翻译工作完全基于技术研究目的,任何人也都可以在以技术研究为目的前提下任意阅读、传播、使用这份文档。但没有得到原文作者和译者授权,不得用于商业出版。 ◎ 全文PDF下载地址:Download (@iteye.com) ◎ 如果没有ItEye账号的朋友,可在此下载:Download (@icyfenix.com) ◎ 译文勘误、更新地址:http://www.icyfenix.com/jvms_javase7_cn 翻译一本书,远远比读完一本书来的辛苦。不过回头看来,那些辛苦比起翻译过程中对自己的提升和认识到的朋友,收获是远远大于付出。如果这本书能再为其他人带来一点方便和用处,那我们就更加欣慰了。如果本书真的对您有用,希望您能: ◎ 向我们反馈本书中翻译的问题,以便我们能持续改进译文的质量。 ◎ 向朋友传播本书(如帮我转发一下此微博),以便我们的工作能发挥更大的价值。 译者序 从1999年4月出版的《Java虚拟机规范(第二版)》至今,已经超过12年,虽然此规范在JDK 5发布的时候作了较大的更新,但却始终没有发布完整的规范。在今年6月28日,最新的《Java虚拟机规范(Java SE 7版)》终于完成并在7月份正式发布。对于想了解Java虚拟机的程序员来说,《Java虚拟机规范》是必须阅读的,对于想深入了解Java语言细节的程序员,阅读《Java虚拟机规范》也有极大好处,但是《Java虚拟机规范》、《Java语言规范》发布十余年,一直没有中文译本,这让中国不少对Java虚拟机感兴趣,但英语能力较弱的程序员都被拒之门外。 在2011年初,《Java虚拟机规范(Java SE 7版)》还是草稿状态时,我就开始关注这本书,并陆续对其中第1、2、6、7章进行了翻译,到2011年9月时完成了200余页的译稿。这时候又在国内著名Java社区ItEye中结识了另外两名译者吴璞渊和冶秀刚,我们在随后的两个多月的时间里共同完成了其余章节的翻译和校对。 《Java虚拟机规范》并非某一款虚拟机实现的说明书,它是一份保证各个公司的Java虚拟机实现具备统一外部接口的契约文档,书中的概念和细节描述曾经与Sun的早期虚拟机的实现高度吻合,但是随着技术的发展,高性能虚拟机真正的细节实现方式已经渐渐与虚拟机规范所描述的内容产生了越来越大的差距。原作者也在书中不同地方反复强调过:虚拟机规范中所提及的“Java虚拟机”皆为虚拟机的概念模型而非具体实现。实现只要保证与概念模型最终等效即可,而具体实现的方式无需受概念模型束缚。因此通过虚拟机规范去分析程序的执行语义问题(虚拟机会做什么)时,但分析程序的执行行为问题(虚拟机是怎样做的、性能如何)则意义不大,如需对具体虚拟机实现进行调优、性能分析等,我推荐在本书基础上继续阅读《Java Performance》和《Oracle JRockit The Definitive Guide》等书。 在翻译过程中,我们尽最大努力保证作品的准确性和可读性,力求在保证语义准确的前提下,尽可能使用通俗易懂的方式向给各位读者介绍Java虚拟机的约束与运作原理。为此目标,我们在专有技术名词、偏僻词中用括号保留了原文、专门在多处读者理解起来可能有困难的地方,添加了“译者注”加以解释。 囿于我们的水平和写作时间,书中难免存在不妥之处,大家如有任何意见或建议都欢迎通过以下邮件地址与我联系:[email protected]。本书的勘误与最新版本可以在以下网址中获取:http://www.icyfenix.com/jvms_javase7_cn/ 最后,请允许我再介绍一下本书三位译者的技术背景与分工: 周志明(www.icyfenix.com & weibo.com/icyfenix):远光软件平台开发部部门经理,平台架构师,不愿意脱离编码的一线码农。著有《深入理解Java虚拟机:JVM高级特性与最佳实践》。关注各种Java应用,略懂OSGi、Java虚拟机和工作流。在本书翻译工作中负责全文统稿;前言和第1、2、6、7章的翻译;第3、4、5章的校审工作。 吴璞渊(wupuyuan.iteye.com):就职于西门子,偏向程序和工作流设计,喜好Java各种新技术并倒腾。在本书翻译工作中负责第3章以及第4章的1至7节。。 冶秀刚(langyu.iteye.com):思科平台工程师,从事分布式系统的研究与开发,爱好Java平台技术且正在努力成长中。在本书翻译工作中负责第5章及第4章的9至11节。

评论:「评论:工程师们,不要想一辈子靠技术混饭吃」

周末亮哥在群里转了一篇cnBeta上的文章:评论:工程师们,不要想一辈子靠技术混饭吃 这篇文章的标题虽然看着很衷言逆耳,但内容看得我直膈应,完全就是一篇郁郁不得志的小媳妇儿的牢骚贴,我的评论如下: 痴心技术与处理人际关系不矛盾。之所以成为一个码农,与你所处的行业和环境没什么关系,和你的工作经验也没有关系,而和你自己的性格和生活态度有关系。甘愿做码农的,10年工作经验也是码农,不想做码农的在学校你就已经不是了 没有人对自己的长远规划只是一个码农。我是想说,对自己的将来没有长远打算的,就算脱离「苦海」去做市场开发,也永远是一个跑腿的 正是些人的异端邪说让现在学计算机的学生浮躁、自大,专业基础却一塌糊涂。如果不想做技术,压根就不用去学计算机 其它职业的人当然没有必要来了解Java和.net的区别,因为这是你吃饭的工具,而如果连对自己吃饭的工具都没有热情甚至自以为耻了,那转行是更好的出路 现在的社会里如果是个大学生,做任何工作都不至于饿死,但是如果你的追求只是如此,那任何行业对你来说都是一样的。转行一段时间后你依然会「发现」「更好」的工作 把全文中所有和计算机技术相关的术语和市场开发相关的对换,文章依然可读

在Ubuntu下配置L2TP

由于CentOS下的yum远不如apt好用,于是花了两个晚上的时间把Linode上的系统从CentOS换成了Ubuntu。昨天重新搭了wordpress、git,今天把L2TP搞定了,参考了很多文章,主要有这篇和这篇,综合并整理了一下,贴在这里 Tips:在Linode上两个系统间迁移时,因为每次只能启动一个系统,原先以为得把文件从CentOS下到本地再传到Ubuntu,估计会很慢。后来想到能把原先的CentOS的磁盘直接在Ubuntu里mount,便能直接拷贝了 安装所需包 我用的Ubuntu是11.10,貌似下来xl2tpd是依赖于openswan和ppp的,于是直接安装xl2tpd apt-get install xl2tpd apt-get install xl2tpd 配置 IPSec 编辑/etc/ipsec.conf,改成 version 2.0 config setup     nat_traversal=yes     virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12     oe=off     protostack=netkey   conn L2TP-PSK-NAT     rightsubnet=vhost:%priv     also=L2TP-PSK-noNAT   conn L2TP-PSK-noNAT     authby=secret     pfs=no     auto=add     keyingtries=3     read more »

无觅相关文章插件,快速提升流量