
开源框架
文章平均质量分 66
smilingleo
这个作者很懒,什么都没留下…
展开
-
JConsole通过JMXMP协议连接JMX Server
jconsole连接JMX在很多例子中采用RMI协议连接。但是在实际生产环境下,RMI会受到来自防火墙的诸多限制,经常连接不上。采用JMXMP协议是一个替换办法。而JDK本身没有带JMXMP的连接器实现,因此还得下载对应的连接器。从Sun Down比较麻烦,我放到了优快云的下载频道:http://download.youkuaiyun.com/source/1394334将解压后的几个jar原创 2009-06-09 17:19:00 · 7596 阅读 · 2 评论 -
Liferay研究之二十:如何防止连续重复提交
一般的解决连续重复提交的办法有以下几种。方法一、提交后 禁用提交按钮(大部分人都是这样做的)方法二、使用Session, session里面加令牌,第一次设置一个值,以后请求先与这个令牌进行比较;方法三、数据处理成功马上Redirect到另外一个页面Liferay中前台使用了客户端脚本(可能是JQuery,没仔细研究)、Session,后台采用同步、多线程等来解决这个问题。服务端解决的原创 2008-04-15 14:20:00 · 2433 阅读 · 1 评论 -
发现一个国内Liferay开发的站点
http://jctj.sxinfo.net山西省科技基础条件平台。(还是俺们老家的,嘿嘿)这个站点给我的第一影响是网站风格、界面布局设计的不错。因为不能注册,不能从后端分析其结构及设计。只能从网页源代码中发现一些端倪。1、可能自己开发了一个“新闻”的portlet;2、界面上大量的用了文章来构成这个首页。 3、通过样式表将navigation的那个下拉菜单隐藏起来。原创 2008-01-17 08:27:00 · 6363 阅读 · 1 评论 -
Liferay研究之十九:ServiceBuilder的一个Bug
如果在liferay的某个portlet目录下的service.xml中进行修改,比如想让不同的Company的JournalArticle能共享,则需要编写一个relationship class,以及相关的Entity类。因为liferay是MDA的,所以,只需要修改对应的service.xml,然后通过ant build-service-portlet-xxxx即可生成对应的代码,这里不原创 2008-04-08 13:41:00 · 2423 阅读 · 0 评论 -
Liferay研究之十六:FCKeditor如何插入服务器上的资源?
1、点击FCKeditor上的插入图片时,从地址栏中知道,是访问的brower.html2、brower.html使用了框架。左侧使用frmFolder.html,主工作区使用frmresourceslist.html。在brower中调用了fckxml.js,这是一个AJAX的封装,用来向服务器发送Command.3、服务器端通过portal-impl/com.liferay.po原创 2008-01-16 11:31:00 · 1409 阅读 · 0 评论 -
FCKeditor的几则学习总结
FCKeditor是一个优秀的开源Web Rich Editor. 套用一句广告词,FCKeditor,挺好的,我们天天都用它。以前研究过其源代码,也做了一些Crack的事情,下面把以前总结的东西翻出来晾晾吧。1、如何获取Fckeditor的文档内容FCK.EditorDocument.getElementsByTagName("html")[0]2、FCKEnterKey._FixB原创 2008-01-09 10:11:00 · 1287 阅读 · 0 评论 -
Liferay遇到的两个问题
环境一:机器上安装了两个liferay系统,4..3.3和4.3.5, 只运行4.3.3 。刚开始启动时,一切正常运行,一段时间之后CPU变为重负载,其中java引擎占用了99%。网上查点资料,说可能与select 语句中的limit有关,或者与资源释放有关,或者说与日志文件大小有关,都不是正解。---------------------------------------------原创 2008-01-07 12:47:00 · 1621 阅读 · 0 评论 -
Liferay研究之十五:Liferay如何对外提供Service,以及如何调用
Liferay是基于SOA理念设计的,很容易通过Web Services对外提供服务接口,下面简单介绍一下。Liferay如何对外提供服务?1、在service.xml中编辑,增加一个2、ant build-service-xxxx (portal-impl/build.xml)3、修改XXServiceImpl, 写入你要对外提供的方法逻辑;4、ant build-service-原创 2008-01-03 11:45:00 · 5075 阅读 · 1 评论 -
Liferay研究之十四:子窗口向父窗口的值传递(字典项的实现)
描述:在文档库中,“Add Shortcut”会弹出一个先选择Group,后选择文档的对话框;实现机制:在document_library/edit_file_shortcut.jsp中 " onClick="var toGroupWindow = window.open(">, toGroup, direc原创 2007-12-29 09:11:00 · 2716 阅读 · 0 评论 -
Liferay研究之廿二:怪异的updateUser(user)方法
今天有网友问到关于Liferay的updateXxxx(entity)方法比较怪异的问题,比如UserPersistanceImpl.update(user, false).光看源码,好像根本就没有执行save or saveOrUpdate或者merge等Hibernate的方法,那又是如何保存的呢?分析了一下,做了一个简单的research,发现还真是很有意思的。http://ww原创 2008-04-29 23:52:00 · 1922 阅读 · 2 评论 -
Liferay研究之廿五:缓存技术的使用
缓存是一个良好设计架构的必须元素,因为使用具有通用目的的架构机制,势必会造成一些计算的冗余,造成性能的降低,通过缓存机制,就可以弥补这方面的问题。Liferay中大量的使用了缓存机制,其核心都是MultiVMPool机制,但在具体使用上有两种方式。方式一:使用FinderCache类,具体用法:1、放入缓存FinderCache.putResult(classNameCache原创 2008-07-11 08:57:00 · 2912 阅读 · 0 评论 -
ExtJS学习笔记(一):ExtJS程序的结构及如何定义js的private, public属性、方法
一般编写一个ExtJS程序需要包含下面四个类型的文件:1、html文件,引入样式表,js文件,并标明html元素;2、html同名js文件,用来创建组件,并动态替换DOM中的元素;3、组件js文件4、组件对应的css文件 对于html同名的js, Ext推荐的写法是这样的:Ext.namespace(ux);ux.app = function(){原创 2009-01-04 15:50:00 · 4096 阅读 · 0 评论 -
Liferay研究卅三:多历法Calendar
经过多天的折腾,终于将Liferay Calendar Portlet打造成一个完美支持多种历法(目前界面上支持GregorianCalendar和ChineseCalendar)的一个组件了。折腾的初衷是因为目前所有的日历组件中,很多都有定期提示功能,但是都只是在GregorianCalendar,也就是我们用的公历上,比如每年几月几日。而我们国内还有很多事情是用农历的,比原创 2009-07-29 15:00:00 · 4928 阅读 · 1 评论 -
Liferay研究之卅二: ext 开发环境下遇到java.lang.VerifyError问题
以前一直都是直接修改源码的, 没怎么用过ext方式, 不过这种最底层的方式非常不利于liferay版本升级,因此决定用ext环境(因为要修改liferay core,所以不能用plugins SDK).今天忽然出现一个问题,运行时报了个java.lang.VerifyError, 看JDK Doc原文是:Thrownwhen the "verifier" detects that a原创 2009-07-29 14:57:00 · 4403 阅读 · 0 评论 -
SOA的由来,服务整合的进化史
现在SOA很时髦,好像哪个系统不喊上两句与SOA相关的口号或者与之挂上点边就觉得很落伍。SOA是什么,字面意义是面向服务的架构,好像很容易理解,又很空洞,说了半天还是半懂不懂。本文试图就"什么是SOA","SOA的应用场景"用一个进化的模式给出一个非常简单的答案,欢迎大家拍砖!因为对轻量级的Spring容器比较熟,这里的技术大部分采用Spring的解决方案,其他的方案思想是类似的。原创 2009-03-16 14:06:00 · 6674 阅读 · 0 评论 -
Spring Integration:jms范例分析
分析对象:Spring-Integration-Sample-jmscommon.xml, inbound-Gateway.xml, outbound-Gateway.xml, DemoBean.java, GatewayDemo.java一、让例子跑起来 make it run!运行GatewayDemo。将通过Broker方式启动ActiveMQ, 如果将common.xm原创 2009-03-06 13:25:00 · 10376 阅读 · 3 评论 -
Eclipse RCP使用Spring时遇到的问题及解决过程
需求环境:公司的JinbuBox客户端采用Eclipse RCP开发,整个工程只有一个Bundle, 包含所有的jar、资源等等,工程使用了Spring;问题:在客户端需要更新时,可以采用Eclipse RCP的bundle更新机制。但是因为整个工程只有一个Bundle,所以如果更新就需要将整个应用全部更新一遍,而事实上其核心变动很小(自己的业务Class、及部分图片等资源)。因此,需要将原创 2009-03-02 17:16:00 · 5459 阅读 · 1 评论 -
Liferay研究之廿九:Liferay5.2基础架构变动
前几天Liferay正式发布了5.2, 抽空Down下来研究了一天,感觉还是有不少变化的,很多底层的东西都发生了变化。因为现在重点关注于MDD的研究,所以这次研究重点在基础架构(liferay infrastructure)方面,其他方面略有涉及,简单总结如下:http://www.smilingleo.cn原创,转载请标明出处。一、环境变动将更多的配置内容放到了portal.prop原创 2009-02-20 15:47:00 · 5219 阅读 · 1 评论 -
使用事务时应该避免的陷井
事务可实现“要么完全成功,要不全部不成功”,保证数据的完整性和一致性,使我们在开发中能方便地实现一些业务逻辑。比如,在股票交易时,除了记录交易的过程,还要更新交易完成之后的账户状态。这两个操作显然必须“要么完全成功,要么全部不成功”,否则,你的麻烦就大了。当然,如果你不关心数据的完整性和一致性的问题,那么忘了事务吧,因为引入锁、数据库并发等机制之后,对性能还是有影响的。下面代码中,plac原创 2009-02-10 13:59:00 · 2592 阅读 · 1 评论 -
ExtJS学习笔记(二):handler与listener的区别
ExtJS里handler和listener都是用来对用户的某些输入进行处理的,有必要区分一下各自都是怎么用的。 Handlerhandler与Action相关联,一个Action可以有多个Component引用;Action是一个可被共享的对象,有五个主要的属性:text, handler, iconCls, disabled, hiddencomponent的构建方式比较有原创 2009-01-08 10:59:00 · 34990 阅读 · 9 评论 -
Liferay研究之十三:使用WebDAV
Liferay中的Document Library和Journal两个Portlet开始支持WebDAV(关于什么是WebDAV,请见下面的介绍)。简单讲,WebDAV是一套协议,实现Web文件夹的功能。在文档库Portlet中,创建一个文件夹之后,点击“编辑”,出现的界面中就会包含一个WebDAV的链接。将这个地址复制,然后在“网上邻居”上右键,映射本地驱动器,将该地址粘贴到目标地址中,原创 2007-12-14 15:08:00 · 3775 阅读 · 0 评论 -
Liferay研究之十二:对Liferay框架的几点分析总结
一、JSP中如何使用TabLiferay的jsp页面中,如果用了tab的选项,则tab1为第一层,tab2为第二层,tab3为第三层,从上到下,为父子关系。如何开发一个带选择框的列表应用?1、建立数据库模型(废话)2、建立dao及相关portlet.service服务框架,接口和Util3、实现服务接口;4、开发对应的JSP页面;5、开发相应的Action;6、在liferay中进行配置P原创 2007-12-13 17:48:00 · 3093 阅读 · 0 评论 -
Liferay研究之十一:Portlet与Struts Action Path的关系引发的问题
Liferay开发中出现The struts path xxx does not belong to portlet xx. Check the definition in liferay-portlet.xml问题如何解决?一种情况是因为在一个Portlet中引用另外一个portlet的URL导致的。比如在Configuration Portlet中想执行View Article Conte原创 2007-12-10 10:09:00 · 2151 阅读 · 2 评论 -
Liferay研究之三:通过LDAP设置连接Novell eDirectory
1、先通过LDAP浏览器进行连接测试。这里使用JXPlorer.连接设置如下:Provider URL:ldap://192.168.0.12:389Protocol:LDAP v3Base DN:o=yourOrgLevel:User + PasswordUser DN:cn=admin,ou=系统,o=yourOrgPassword=yourpassword2、连接成功之后,就可以通过原创 2007-11-23 14:10:00 · 3191 阅读 · 0 评论 -
Liferay研究之十七:由Velocity模板的国际化问题引出的“大秘密”
事由:想在每个layout(page)增加一个统一的Footer。这时,就需要修改portal-normal.vm。对于复杂的,可以参考Liferay默认的一个Theme liferay-noir-theme的实现方式,通过:$serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLo原创 2008-01-24 10:52:00 · 3583 阅读 · 0 评论 -
Liferay研究之一:Ext环境的搭建
前一阵子因为一直沉浸在刚出生的小东西身上,没有太多功夫来写东西。近来由于项目需要,手下这帮兄弟太累,我只好也亲自上手,帮他们搞搞门户系统,Liferay.随后会有几篇关于Liferay的文章,也是学习Liferay的一个过程记录。本篇主要介绍如何搭建Ext开发环境。网上也有很多介绍,不过这里和别的还是有些不同的。我用的版本是最新的4.3.3。1、在portal源码目录下建立:relea原创 2007-10-31 18:38:00 · 5050 阅读 · 0 评论 -
Liferay研究之二:引入Spring
首先Suppose你已经搭建好了ext环境。1、在Ext/ext-web/docroot/WEB-INF/web.xml中引入spring display-name>Spring Portaldisplay-name> description>Spring Portlet sample applicationdescription> - Location of the X原创 2007-10-31 18:45:00 · 3911 阅读 · 0 评论 -
用JavaScript调用JSF的Action, ActionListener
一、声明一个JavaScript函数: function clickLink(linkId) { var fireOnThis = document.getElementById(linkId); if (document.createEvent) { var evObj = document.createEvent(MouseEvents);原创 2007-09-18 21:16:00 · 4641 阅读 · 1 评论 -
挫折:G4JSF还很不完善
在我前面的文章中(也谈GWT vs JSF),我认为JSF与GWT可以很好的互相补充 ,而粘合剂就是G4JSF。没错,G4JSF是可以通过对GWT的组件进行编译自动产生JSF的组件,但是目前版本的G4JSF有一个致命的问题,就是:一个组件只能有一个service响应,或者说一个组件只能有一个Event Listener, 这显然是不能实现商业化开发的需要的。比如,一个邮件管理系统,需要点击原创 2007-09-14 12:12:00 · 1482 阅读 · 0 评论 -
使用G4JSF整合JSF与GWT(完整版)
网上已经有很多这方面的文档,但很奇怪大家都只翻译了一半,而更重要的后半部分却没有看到过翻译。我也参考了theserverside上面关于这方面的经典文章:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF并加了自己的一些注解,希望对大家有所帮助。整合流程:1、正常的编写GWT组件2、在hosted m原创 2007-09-11 09:51:00 · 1826 阅读 · 0 评论 -
JSF常见错误(二)
Unable to read TLD "META-INF/html_basic.tld" from JAR file 在你的Build Path中有一个jsp-api.jar,而这个库在Tomcat中已经有了,所以只需要将这个删除即可。 According to TLD or attribute directive in tag file, attribute v原创 2007-09-03 09:02:00 · 3524 阅读 · 2 评论 -
Liferay研究之四:列表显示jsp分析
显示文章列表的jsp页面是journal_articles/view.jsp,其中用了一个liferay自定义的标签:" />该标签由:liferay-ui.tld定义,是由:com.liferay.taglib.ui.SearchIteratorTag 来解析的。从SearchIteratorTag代码中可以知道,里面会调用一个标签属性:paginate,且缺省页面是html/taglib/原创 2007-11-23 14:15:00 · 3965 阅读 · 0 评论 -
Liferay研究之五:Liferay的MDA开发模式
Liferay其实不单单是一个开源的门户产品,同时也是一个很好的开发框架。Liferay采用了MDA(模型驱动开发架构)的开发模式,具体来讲,就是开发一个模块前,需要先通过配置定义Model, Service,通过ServiceBuilder工具根据定义自动创建dao, service interface, service impelmention, util facade, 此外,也通原创 2007-11-27 11:13:00 · 2121 阅读 · 0 评论 -
Liferay研究之六:Liferay技巧几则
在Liferay中添加链接的方式1、通过liferay-ui:icon标签; ... PortletURL moreURL = renderResponse.createRenderURL(); moreURL.setParameter("struts_action", "/journal_articles/view"); moreURL.setParameter原创 2007-11-28 08:24:00 · 3257 阅读 · 0 评论 -
Liferay 4.4尝鲜
Liferay 4.4发布了一段时间了,赶紧下了一个尝尝鲜。感觉还不错,下面把一些与4.3的变化整理一下。1、Blog加强了有了Aggregator,和Recent Blogger, 可以筛选是在一个company中的Blogger还是在一个Group中的。2、界面操作更加灵活。在Add Application时,可以用拖拽的方式将某个应用在Add的时候就放到对应的位置。而在以原创 2008-03-05 08:36:00 · 1227 阅读 · 0 评论 -
用Liferay做自己的网站
这些天,通过不断的折腾,终于把自己的网站搭建起来了。http://www.smilingleo.cn采用4.3.3搭建,目前还有一些小的Bug,不过整体上来说,还过得去。真正用的时候,才发现,其实Liferay在很多细节上,还有值得挖掘的空间。比如如何定义Structure,如何制作对应的Template. 虽然不太属于技术的范畴,但是却直接影响到你做出东西的美观性,实用性。这往往原创 2008-03-04 07:36:00 · 2309 阅读 · 0 评论 -
Liferay研究之十:定制Portlet风格
Liferay通过Theme实现界面换肤的功能,但对于某个Portlet,我们在实际项目中可能还是想做一些适当的调整,以实现特殊的效果。这里主要是需要熟悉CSS样式表相关知识,比如我在界面上做了一个滚动条,想把这个滚动条放到“菜单条”右侧空白区域。对于滚动条,肯定是可以通过添加一个文章来实现的,但是如何将内容添加到合适的位置呢?可以通过自定义Portlet的CSS来实现,比如:#p_p原创 2007-12-05 15:24:00 · 1833 阅读 · 0 评论 -
Liferay研究之九:开发技巧(2)
Liferay页面中如何引入Tab页?liferay中tab1为一级tab,tabs2为二级标签,引入时需要使用一个liferay的taglib:liferay-ui:tabs,比如:" param="tabs2" />其中,names中为资源文件中的资源名,逗号分割,但逗号前后都不能有多余空格。tabs2是一个String.String tabs2 = ParamUtil.getString原创 2007-12-03 08:36:00 · 2356 阅读 · 0 评论 -
Liferay研究之八:Liferay的层次划分---持久化及服务
在Liferay学习时,刚开始可能你会不习惯Liferay的目录结构,对里面那么多的目录弄晕,更晕的是会有很多同名的Service, LocalService, Util类,让你搞不清楚应该用哪个。其实这些都很简单,如果你有J2EE设计模式的经验,应该不难发现,这些其实都是在分层,而分层的目的,就是以增加“复杂性”为代价,提供更加灵活的扩展性(呵呵,个人意见)。下面就是对Liferay包结原创 2007-12-01 11:22:00 · 1968 阅读 · 0 评论 -
Mule学习笔记:LoanBroker范例分析
在执行loanbroker.bat时,系统会首先调用LoanBrokerApp.java→AbstractLoanBrokerApp.run,通过getRequestFromUser方法,在Console与用户交互,让用户输入请求,并将这些请求数据封装为CustomerQuotesRequest,之后通过request来发送请求。在request方法中,通过MuleClient(专门用来向Mu原创 2008-02-23 20:31:00 · 2425 阅读 · 1 评论