- CheckStyle 报告与项目预定的编码标准的偏离度。
- CPD 报告代码重复。
- JavaNCSS 可以帮助团队专注于更高级的代码复杂性领域。
2009年4月29日星期三
性能监控 以及 开发自动化 -- Java
2009年4月27日星期一
Tomcat遇到了“java.lang.OutOfMemoryError: PermGen space”
- http://www.totodotnet.net/2007/08/15/outofmemory:
PermGen-space异常的处理和分析/ 记录了分代内容管理的原理, - http://blog.csdn.net/xiaojianpitt/archive/2008/11/11/3276790.aspx
PermGen的一些说明,引用了Sun官方的一些解释 - http://www.cnblogs.com/huqingyu/archive/2008/09/18/1293454.html
列出了一些相关资料
性能调试、测试工具
- Windows C++的
- Linux C++的
- Java的
- C#的
- 数据库的(Oracle & MySQL)
- Web性能的
Web性能还包括安全方面的测试工具 - 操作系统的(以Linux为主)
- 网络方面的
2009年4月22日星期三
BugFree 2.0.2 指派人员支持多个邮件发送
2009年4月18日星期六
Gear Factory
create
method, an application specifies the interface version it uses./ Check whether Gears is installed. if (window.google && google.gears) { // Instantiate Gears objects var db = google.gears.factory.create('beta.database'); db.open(); }
The supported class names are:
className | Gears class created |
---|---|
beta.database | Database |
beta.desktop | Desktop |
beta.geolocation | Geolocation |
beta.httprequest | HttpRequest |
beta.localserver | LocalServer |
beta.timer | Timer |
beta.workerpool | WorkerPool |
Gear Database API 使用
Gear 体系结构
- Modal Application:相对于Online Modes,是很明确地离线使用,通过用户界面可以表现出来。用户很清楚地知道现在的使用模式,手工进行切换
- Modeless Application:在online Mode和Offline Mode使用对用户是透明的,界面没有什么变化。用户不需要切换状态,是程序自动完成的。
Google Gear Manifest 文件
2009年4月15日星期三
Google Gear 基本使用方法
2009年4月14日星期二
开发语言的选择
- C++语言的效率优势已经不那么明显了:
现在机器的性能上去了,原来C++效率的优势没有原来这么大了。而且随着语言的不断进化,语言本身的效率也在不断的提高,虽说C++的效率还是比较高,但是各个语言间的效率已经越来越接近了; - 需要考虑工作进度、公司的人员配备:
虽说C++语言在效率上还残存一些优势,但是C++的开发周期、开发的工作量,都相对较大 --- 从实际情况来说,这个还是比较客气的说法。每次出产品,C++开发的服务器,都是时间最长最长的,开发人员需要的技术、开发过程中的成本也是最高的,和目前的快速维护、快速增加功能的原则背道而驰。关键的部分(如只能唯一的服务器)、最为核心的部分要用C++开发,达到稳定、高效的目的,这个无可厚非,但是系统中所有的地方都用C++,在开发周期、开发成本上就无法接受; - 发挥每种语言的优势:
每种语言的产生,必定有其出现的道理,有其存在的理由、优势。在开发过程中,要发挥每种语言的优势,进行合理的搭配,达到快速有效的开发,这样才是最合理的配置; - 体系结构优于语言的选择:
现在的开发,尤其是后台支撑系统的开发,已经是体系上的竞争,架构体系的优劣已经远远超越语言的竞争了。
体系方面,譬如简单的增加一级缓存,带来系统性能的提升、服务能力的提升、吞吐量的提升可能是数个数量级上的提升;而语言的不同,带来的可能仅仅是同一级别、同一层次上的提升;何况通过多种语言的协作,发挥各种语言的优势,不仅能够充分使用到公司目前的资源,而且使用到语言本身的优势,快速推出新功能,尽快的响应市场的呼声。开发语言相争和架构体系上比较起来,相对而言只是一个很局部的问题(目前在架构体系上,可以优化、可以提升的地方太多了)。
GTD --Getting Things Done
GTD是英文Getting Things Done的缩写,是一种行为管理的方法,也是David Allen写的一本书的书名。
GTD的主要原则在于一个人需要通过记录的方式把头脑中的各种任务移出来。通过这样的方式,头脑可以不用塞满各种需要完成的事情,而集中精力在正在完成的事情。
目录[隐藏] |
[编辑]GTD是关于什么的
和其他时间管理专家不同的是,Allen并不把重点放在设置任务的优先级。他提出制定出在各种环境下的任务列表,例如,制定一个需要打电话的列表,或者在市区才能完成的事情的列表。他也建议任何两分钟之内就能完成的任务应该马上做。
GTD在心理上的好处在于使你需要完成的事情相关的信息易于保存,跟踪和获取。Allen认为导致很多我们在做事的时候碰到的脑力上的障碍的原因是前期的计划不足(举个例子,对任何项目我们需要弄清楚要达到什么目标,还有什么措施需要完成)。
Allen认为我们的脑力上的“提醒系统”相当的低效,很少能够在恰当的时间和地点提醒我们需要做的事情。因此,把“下一步行动”根据场景分类存放在“可信的系统”当中,是一个能使我们在正确的时间得到正确的提醒的手段。在“GTD”中有很多个人的管理小技巧在实行Allen描述的工作流程中很有用的。
一个很概括的对于Allen的书的内容的描述是对于任何事情都准备好:
- “把所有事情都从你的脑袋里弄出来。在事情出现,而不是在事情爆发的时候,就做好相关行动的一系列决定。以合适的类别组织好你的项目的各种提醒以及下一步的行动。保持你的系统更新和完整,充分地检查,使你在任何时候都能信任你的对于你正在做(或者不做)的事情直觉的选择。”
[编辑]原则
GTD的核心原则如下:
[编辑]搜集
把任何你需要跟踪或者记住或者做的事情记在Allen称之为‘水桶’的地方:一个收件箱,电子邮箱,磁带,笔记本,PDA,或者它们的组合。把你脑子里的任何东西都拿出来放到你的搜集设备里,准备好做下一步的处理。每星期所有的水桶都应该被至少清空一次。
[编辑]处理
处理你的收件箱要遵循一个严格的工作流程:
- 从最上面开始。
- 一次处理一项。
- 不把任何东西放回收件箱。
- 如果任何一项需要做:
- 做(如果花的时间少于两分钟)
- 委托别人完成,或者
- 把它延期。
- 否则
- 把它存档以便查询,
- 把它扔掉,或者
- 使它成熟以便下一步的处理
两分钟原则:任何事情如果花的时间少于两分钟,那么马上就去做。两分钟是一个分水岭,这样的时间和正式地推迟一个动作所花的时间差不多。
[编辑]组织
Allen描述了一个建议的列表集合,你可以用来跟踪需要关注的项目:
- 下一步行动(Next actions) - 对于每个需要你关注的事项,定好什么是你可以实际采取的下一步行动。例如,如果事项为“写项目报告”,下一步行动可能会是“给Fred发邮件开个简短会议”,或者“给Jim打电话问报告的要求”,或者类似的事情。虽然要完成这个事项,可能会有很多的步骤和行动,但是其中一定会有你需要首先去做的事情,这样的事情就应该被记录在“下一步行动”列表上。较好的做法是把这些事项根据能够被完成的“环境”整理分类,例如“在办公室”,“用电话”,“在商场”.
- 项目(Projects) - 每个需要多于一个实际的行动才能达到的生活或者工作中的“开放式回路”就是一个“项目”.使用跟踪以及周期性的回顾来确保每个项目都有一个下一步的行动进行下去。
- 等待(Waiting for) - 当你已经指派了一个事项给其他人或者在项目进行下去之前需要等待外部的事件,就应当在你的系统当中跟踪以及定期检查是否已经可以采取行动或者需要发出一个提醒。
- 将来/可能(Someday/Maybe) - 这些事情你需要在某个点去做,但是不是马上。例如:“学习中文”,或者“进行一个潜水假期”.
对于跟踪你的预约和委托,一个日历也是重要的;另外,Allen特别推荐日历应该被用在他所谓的“硬工程”上:必须在某个特定的期限之前完成的事情,或者在约定的时间和地点完成的会议和约会.“待办”事项应该用在下一步行动列表当中。
GTD的最后一个关键组织模块是归档系统.“Getting Things Done”书里说如果要用一个归档系统,那它必须得是简单易用和有趣。即使是一张纸,如果你需要用来记录参考信息,如果不属于你已经有的一个目录,也要有自己的文件组织方式。Allen的建议是你可以维护一个按照字母顺序组织的归档系统,这样可以比较容易快速的存储和提取你所想要的信息。
Google的Gmail的用户可以用创建标签的方式来创建“待办事项”和“项目”,这种方式在Bryan Murdaugh的 “Getting Things Done with Gmail” [1]白皮书中有清楚的描述。它保留了很多GTD的相同概念,但是是在在线的电子邮件系统中实施。
[编辑]检查
如果你不至少每天或者只要你有时间就回顾检查,那么你的行动和提醒的列表将会变的毫无用处。以你当时拥有的精力,资源和时间,决定什么是对你来说最重要的事情,然后做。如果你倾向于拖延,你可能会老是做最容易的事情,避免那些难的。为了解决这个问题,你可以一个接一个地做列表上的事情,按照它们的顺序,就象你处理你的收件箱一样。
至少以星期为周期,GTD要求你回顾所有你比较主要的“行动”,“项目”和“等待”的事项,确保所有的新任务或者即将到来的事件都进入你的系统,而且所有的事情都更新到符合最新的情况。Allen建议制作一个难题档案来帮助你更新你关于主要行动的记忆。
[编辑]做
如果你把你的时间都花在组织工作、而不是做它们,那么这样的系统是不好的!David Allen的观点是,如果你可以把必须做的事情,让它变得简单、容易、有趣的话,那你就比较不会拖延、或者被太多的“开放性回路”所压倒。
[编辑]工具和技巧
一个Allen推荐的工具是难题文件夹,用来组织你的GTD的文字工作(也被称为‘43文件夹’).12个文件夹用来表示每一个月,另外的31个文件夹用来表示每一天。这些文件夹用来帮助提醒你当天的活动。每天你打开表达当天的文件夹。你把所有的事项都拿出文件夹,然后把空文件夹放进下一个月里。这种处理允许你为自己保存提醒的硬拷贝。例如,如果你在这个月的12号有一个音乐会,你可以把票放在第12个文件夹当中。当12号到的时候,它就在那里等着你。
[编辑]DIY Planner Hipster PDA
这是一种用来执行GTD的纸本DIY范本,对于习惯用实体纸本计划的人来说,可作为另一种优质选择。[2]
2009年4月13日星期一
Python解析中文xml问题
>>> xmldoc=minidom.parse('e:\\cc.xml') Traceback (most recent call last): File " File "D:\Python26\lib\xml\dom\minidom.py", line 1918, in parse return expatbuilder.parse(file) File "D:\Python26\lib\xml\dom\expatbuilder.py", line 924, in parse result = builder.parseFile(fp) File "D:\Python26\lib\xml\dom\expatbuilder.py", line 207, in parseFile parser.Parse(buffer, 0) xml.parsers.expat.ExpatError: unknown encoding: line 1, column 30 |
2009-04-13 记录女儿诗2首
2009年4月10日星期五
配置EmForge遇到的问题 -- 用户注册
[EmForge]: [2009-04-11 09:25:01,203] ERROR org.ajax4jsf.webapp.BaseXMLFilter - Exception in the filter chain javax.servlet.ServletException: viewId:/register.faces - View /register.faces could not be restored. at javax.faces.webapp.FacesServlet.service(FacesServlet.java:270) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1124) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:164) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.emforge.web.upload.UploadMultipartFilter.doFilter(UploadMultipartFilter.java:25) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.emforge.security.web.EditProfileFilter.doFilterHttp(EditProfileFilter.java:55) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175) at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.emforge.web.LocaleFilter.doFilterInternal(LocaleFilter.java:60) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:879) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:741) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:213) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451) Caused by: javax.faces.application.ViewExpiredException: viewId:/register.faces - View /register.faces could not be restored. at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:103) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) ... 74 more |
[EmForge]: [2009-04-11 10:28:21,156] ERROR org.emforge.security.web.bean.RegisterController - Cannot register user org.emforge.EmForgeException: 不能够发送注册通知Email给XXXXXX@gmail.com at org.emforge.security.SecurityServiceImpl.registerNewUser(SecurityServiceImpl.java:304) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy9.registerNewUser(Unknown Source) at org.emforge.security.web.bean.RegisterController.submit(RegisterController.java:152) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.el.parser.AstValue.invoke(AstValue.java:152) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:387) at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321) at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296) at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253) at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1124) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:164) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.emforge.web.upload.UploadMultipartFilter.doFilter(UploadMultipartFilter.java:25) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.emforge.security.web.EditProfileFilter.doFilterHttp(EditProfileFilter.java:55) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175) at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.emforge.web.LocaleFilter.doFilterInternal(LocaleFilter.java:60) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:879) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:741) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:213) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451) Caused by: org.emforge.email.EmailerException: Failed messages: javax.mail.SendFailedException: Invalid Addresses; nested exception is: com.sun.mail.smtp.SMTPAddressFailedException: 550 relaying mail to gmail.com is not allowed at org.emforge.email.EmailSenderImpl.sendMessage(EmailSenderImpl.java:267) at org.emforge.security.SecurityServiceImpl.registerNewUser(SecurityServiceImpl.java:301) ... 104 more Caused by: org.springframework.mail.MailSendException; nested exceptions (1) are: Failed message 1: javax.mail.SendFailedException: Invalid Addresses; nested exception is: com.sun.mail.smtp.SMTPAddressFailedException: 550 relaying mail to gmail.com is not allowed at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:422) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:342) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:338) at org.emforge.email.EmailSenderImpl.send(EmailSenderImpl.java:146) at org.emforge.email.EmailSenderImpl.sendMessage(EmailSenderImpl.java:253) ... 105 more |
2009年4月9日星期四
2009-04-10 女儿的眼睛好了一点
2009年4月7日星期二
《互联网时代的软件革命--SaaS架构设计》读后感
2009年4月5日星期日
EmForge 配置
- /WEB-INF/classes/config.properties : 一般配置文件
- /WEB-INF/classes/META-INF/emforge-ds.xml: SpringFramework配置文件,设置数据源
- datasource.driver
--- JDBC driver class-name。要使用这个,需要把相关的JDBC driver jar文件放在EmForge lib中(webapps/Emforge/WEB-INF/lib中) - datasource.url
--- 包含JDBC-Url,指向数据库(包含用户名、口令) - datasource.dialect
--- 包含Hibernaet dialect(多数情况下可以避免的,Hibernate会自动检测的)
可以使用内建的自动检测dialet(com.liferay.portal.spring.hibernate.DynamicDialect)
- email.host - host name of SMTP server (localhost by default)
- email.port - port used for connection. Keep -1 to use default
- email.username - username (in cases then authentication required)
- email.password - password
- email.useSsl - set to true, in case then connection done via SSL
Configure email connection via JNDI
It is also possible to use mail Session, configured on application server level via JNDI. If you already have connection configures, just put it's name into email.sessionName and leave host, username and password empty, like:
email.sessionName=mail/Session - email.defaultFromAddress - email used for from-address by default (then for example registration notification
- email sent email.testMailAccount - if this property is not empty, ALL emails will be sent to this email (instead of real recipient). May be helpful for testing
WiKi配置: application.useUtf8Decoding=false
但是只是在遇到本地化问题后再修改,其他时候修改这个配置可能会遇到其他问题。
- ui.onePageNewTask=false - switching this option to true will allow users to create new task not in step-by-step wizard (like emforge.org used) - but from one page, included ALL settings, required for task creation