spark的自留地(ofbiz/eclipse rcp/shark/opentaps)

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  54 Posts :: 0 Stories :: 112 Comments :: 0 Trackbacks

2010年8月14日 #

到阿里工作快一年了,这一年回顾来最主要的成果还是在这里成功了推行了自己的领域建模方法与对应的技术框架。总是想同更多的同学分享一下。

为了帮助更多人了解如何应用领域建模知识在实际项目中,我在InfoQ中发表了一篇题为“大型网站复杂业务持续重构之道——全程领域建模实践”的文章。为了增加趣味性,我用了个故事来展开内容,请大家不要对号入座(特别是老板们)。请有兴趣了解这一话题的同学可以阅读一下

原文在
http://www.infoq.com/cn/articles/sb-complex-business-continuity-refact
posted @ 2012-03-28 15:07 shanghai_spark 阅读(362) | 评论 (0)编辑 收藏

默认Opentaps是基于derby的安装,这个在实际生产环境是不太可能会使用的。往往我们会实际需要使用Oracle作为生产数据库。很多人问我怎么去修改Opentaps与Oracle的支持。修改方法如下:

1、编辑 framework/entity/config/entityengine.xml,修改default delegate为 localoracle

<delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" distributed-cache-clear-enabled="false">
<group-map group-name="org.ofbiz" datasource-name="localoracle"/>
<group-map group-name="org.ofbiz.olap" datasource-name="localoracle"/>
<group-map group-name="org.ofbiz.tenant" datasource-name="localoracle"/>
<group-map group-name="org.opentaps.analytics" datasource-name="localoracle"/>
<group-map group-name="org.opentaps.testing" datasource-name="localoracle"/>
</delegator>


2、修改同个文件中的的localoracle 的datasource节点
    <datasource name="localoracle"
            helper
-class="org.ofbiz.entity.datasource.GenericHelperDAO"
            schema
-name="OFBIZ"
            field
-type-name="oracle"
            check
-on-start="true"
            add
-missing-on-start="true"
            alias
-view-columns="false"
            join
-style="ansi">
        
<read-data reader-name="seed"/>
        
<read-data reader-name="seed-initial"/>
        
<read-data reader-name="demo"/>
        
<read-data reader-name="ext"/>
        
<inline-jdbc
                jdbc
-driver="oracle.jdbc.driver.OracleDriver"
                jdbc
-uri="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
                jdbc
-username="ofbiz"
                jdbc
-password="ofbiz"
                pool
-minsize="2"
                pool
-maxsize="250"
                time
-between-eviction-runs-millis="600000"/>
    
</datasource>

3、将{ORACLE_HOME}\product\10.2.0\db_1\jdbc\lib目录下的ojdbc14.jar拷贝到framework/entity/lib/jdbc目录下

4、重新运行ant run-install生成数据库对象

5、现在Oracle数据库已经就绪OK啦


posted @ 2012-03-07 10:56 shanghai_spark 阅读(783) | 评论 (0)编辑 收藏

我一直期望可以提供一个高性能、高定制性的电子商务套件,它不应局限于传统的ERP应用或简单的线上商城应用。而是应将线上发生的产品展示、线上营销、在线客户服务与线下的仓储发货、经营分析、关键客户识别有机结合起来。

开始Opentaps开发已经两年多了,对它的理解也越来越深。做为一个完整的ERP套件来说我觉得它足够应付我们的日常业务:客户、订单、仓储、采购、财务等。并且它从应用层和开发层都已经提供了足够的支持与扩展空间。

我始终觉得Ofbiz提供的ecommerce模块过于简单,或者说它与我们国人想象中的电子商城有比较大的差距。如果我们在这之上来开发的话可以需要付出很多的effort才可能达到我们想要的效果。当然opentaps也提供了另一个选择gracious,但从个人角度来说我并不喜欢这个模块,它为用户提供的定制选项太少了,只能作为有经验的开发者定制自己应用的一个基础。

在为Opentaps开发Magento开发Integration Feature时,我接触到了Magento这个最广泛被使用的电子商务套件。不过当时只是浅尝即止并未做太多的功能研究,最近这些日子里我在不断深入了解了这个产品后越来越叹服其功能的强大。我想我想要的所有功能应该都被包括在这个产品已完成的feature中了。但同样我更期望是一个完整的线上线下相贯通的网络商城运营方案,离这样的要求Magento在财务结算、仓储管理、采购管理这些ERP功能方面又明显的偏弱。

我想Opentaps与Magento的整合可能不应仅限与原来所提供的产品、订单信息的贯通,或许我们应该尝试提供更密切的信息联系。至少第一步应该要把客户资料信息进行双向的同步,然后是库存信息。

考虑更远一点的话,在Magento或Opentaps中引入在线客服与呼叫中心的Feature也是一个非常让人振奋的事情。发展到这一步,我们就可以简单的集成这两个优秀开源产品来为我们的线上线下提供全方面的服务了。

在以后的文章里,我会继续在这个方面做更多的设计与实现工作。如果有童鞋对此话题感兴趣,可以把你的想法告诉我看是否可以一起来做点事。


BTW: 现在opentaps已完成的magento整合内容可以在这里找到 http://www.opentaps.org/docs/index.php/Opentaps_Magento_Integration
posted @ 2011-03-01 09:42 shanghai_spark 阅读(5795) | 评论 (5)编辑 收藏

现在google,yahoo这些免费的群组都在大陆不好用,打算自己装个群组系统给自己的team用。用万能的google出Simple Groupware,看了特性描述好象还不错。那就先装上它试试吧。

1、安装apache、mysql、php

yum install mysql mysql-devel mysql-server php php-cli httpd


2、安装php所需的支持的包

yum install php-zlib php-gd php-mysql php-mbstring


3、启动mysqld与httpd服务

4、创建/var/www/html/sgs目录,并在该目录下下载Simple Groupware installer文件后解压,这样在/var/www/html/sgs目录下存在sgs_installer.php文件

5、打开浏览器访问http://your_server/sgs/sgs_installer.php选择你要的版本上面的Install,然后按照屏幕提示作下去就好啦


posted @ 2011-02-17 22:43 shanghai_spark 阅读(1981) | 评论 (2)编辑 收藏

打算在自己申请的Free Amazon EC2上放个Magento,看了下Magento的帮助也整理内容如下:

1、安装apache、mysql、php

yum install mysql mysql-devel mysql-server php php-cli httpd

2、安装php所需的支持的包

yum install php-dom php-mcrypt php-gd

3、创建magento数据库

4、下载magento full release package并解压到/var/www/html下,并设置目录权限为777

5、通过浏览器访问安装magento http://localhost/magento
posted @ 2011-02-11 12:14 shanghai_spark 阅读(1913) | 评论 (0)编辑 收藏

现在在用一个20寸的厦新电视机在做我的显示器,它是宽屏的,最高可以支持1344x768的分辨率。可是装了Fedora 14以后,只能发现最高支持的分辨率是1024x768。字体看起来都是扁扁的,很不爽!

得想个法把这个分辨率调整过来:

1) 打开一个Terminal窗口,切换到root身份后运行

Xorg -configure :1

这个命令会在/root下生成一个叫xorg.conf.new的文件,我们运行以下命令把它移到/etc/X11下
mv /root/xorg.conf.new /etc/X11/xorg.conf

2) reboot系统

3)在终端中输入 gtf 1344 768 60 -x 命令, 这样就会在终端中显示一些内容. 类似下面的:
# 1344x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 83.95 MHz
  Modeline 
"1344x768_60.00"  83.95  1344 1408 1552 1760  768 769 772 795  -HSync +Vsync

把它复制到 /etc/X11/xorg.conf中的[Moniter]段中,复制后的文件中[Moniter]段如下:
Section "Monitor"
        Identifier   
"Monitor0"
        VendorName   
"Monitor Vendor"
        ModelName    
"Monitor Model"
        # 1344x768 @ 
60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 83.95 MHz
        Modeline 
"1344x768_60.00"  83.95  1344 1408 1552 1760  768 769 772 795  -HSync +Vsync
EndSection

4) reboot系统后就会在System->Preferences->Moniters中发现1344x768的选项啦!

5) 收工!

posted @ 2011-02-10 16:29 shanghai_spark 阅读(5102) | 评论 (4)编辑 收藏

在Opentaps 1.4版本我将AOP由原来的AspectJ替换为现在Aspectwerkz。结果我自己就首先在64bit的windows系统下遇到ant编译出错,现在把解决方法列在这里

将opentaps/opentaps-common/build-aspects.xml中的weave任务内容替换为以下内容(其实就是把原来的ant的替换jar内容任务分成两部来执行):

<!-- ================================================================== --> 
        
<!-- Weave advice into target jars                                      --> 
        
<!-- ================================================================== --> 
        
<target name="weave" depends="detect-dependencies" if="processRequired"> 
          
<echo message="[build] =========== Start Building Aspect (Weave) ============="/> 
          
<java classname="org.codehaus.aspectwerkz.compiler.AspectWerkzC" fork="true"> 
            
<jvmarg value="-Daspectwerkz.definition.file=${aopConfig}"/> 
            
<jvmarg value="-Daspectwerkz.transform.filter=no"/> 
            
<!-- <jvmarg value="-Daspectwerkz.transform.verbose=true"/> --> 
            
<!-- <jvmarg value="-Daspectwerkz.transform.details=true"/> --> 
            
<arg value="-verify"/> 
            
<classpath refid="local.class.path" /> 
            
<classpath> 
              
<pathelement path="${build.dir}/classes/common"/> 
            
</classpath> 
            
<!-- below is the jars to post-process --> 
            
<arg value="${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar"/> 
          
</java> 
          
<java classname="org.codehaus.aspectwerkz.compiler.AspectWerkzC" fork="true"> 
            
<jvmarg value="-Daspectwerkz.definition.file=${aopConfig}"/> 
            
<jvmarg value="-Daspectwerkz.transform.filter=no"/> 
            
<!-- <jvmarg value="-Daspectwerkz.transform.verbose=true"/> --> 
            
<!-- <jvmarg value="-Daspectwerkz.transform.details=true"/> --> 
            
<arg value="-verify"/> 
            
<classpath refid="local.class.path" /> 
            
<classpath> 
              
<pathelement path="${build.dir}/classes/common"/> 
            
</classpath> 
            
<!-- below is the jars to post-process, if these jar not effect each other you can put them in same pos, else please seperate them into another task --> 
            
<arg value="${ofbiz.dir}/framework/common/build/lib/ofbiz-common.jar"/> 
          
</java> 
          
<java classname="org.codehaus.aspectwerkz.compiler.AspectWerkzC" fork="true"> 
            
<jvmarg value="-Daspectwerkz.definition.file=${aopConfig}"/> 
            
<jvmarg value="-Daspectwerkz.transform.filter=no"/> 
            
<!-- <jvmarg value="-Daspectwerkz.transform.verbose=true"/> --> 
            
<!-- <jvmarg value="-Daspectwerkz.transform.details=true"/> --> 
            
<arg value="-verify"/> 
            
<classpath refid="local.class.path" /> 
            
<classpath> 
              
<pathelement path="${build.dir}/classes/common"/> 
            
</classpath> 
            
<!-- below is the jars to post-process --> 
            
<arg value="${ofbiz.dir}/applications/order/build/lib/ofbiz-order.jar"/> 
          
</java> 
          
<jar jarfile="${lib.dir}/${name}.jar" update="true" basedir="${build.dir}/classes/common" includes="org/opentaps/aspect/secas/**" /> 
            
<!-- put aop.xml into target jar META-INF dir --> 
             
<mkdir dir="${build.dir}/classes/META-INF" /> 
             
<copy file="${aopConfig}" tofile="${build.dir}/classes/META-INF/aop.xml" overwrite="true"/> 
           
<!-- create new jar with aop.xml, then copy it to orign location, using these for avoid unable rename error on windows 64bit system--> 
               
<zip destfile="${lib.dir}/ofbiz-entity.jar"> 
               
<zipfileset src="${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar"/> 
               
<fileset dir="${build.dir}/classes/"> 
                 
<include name="META-INF/aop.xml"/> 
               
</fileset> 
               
</zip> 
           
<delete file="${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar" failonerror="false"/> 
               
<move file="${lib.dir}/ofbiz-entity.jar" tofile="${ofbiz.dir}/framework/entity/build/lib/ofbiz-entity.jar"/> 

               
<zip destfile="${lib.dir}/ofbiz-common.jar"> 
               
<zipfileset src="${ofbiz.dir}/framework/common/build/lib/ofbiz-common.jar"/> 
               
<fileset dir="${build.dir}/classes/"> 
                 
<include name="META-INF/aop.xml"/> 
               
</fileset> 
               
</zip> 
           
<delete file="${ofbiz.dir}/framework/common/build/lib/ofbiz-common.jar" failonerror="false"/> 
               
<move file="${lib.dir}/ofbiz-common.jar" tofile="${ofbiz.dir}/framework/common/build/lib/ofbiz-common.jar"/> 

           
<zip destfile="${lib.dir}/ofbiz-order.jar"> 
               
<zipfileset src="${ofbiz.dir}/applications/order/build/lib/ofbiz-order.jar"/> 
               
<fileset dir="${build.dir}/classes/"> 
                 
<include name="META-INF/aop.xml"/> 
               
</fileset> 
               
</zip> 
           
<delete file="${ofbiz.dir}/applications/order/build/lib/ofbiz-order.jar" failonerror="false"/> 
               
<move file="${lib.dir}/ofbiz-order.jar" tofile="${ofbiz.dir}/applications/order/build/lib/ofbiz-order.jar"/> 

             
<echo message="[build] =========== Done Building Aspect (Weave) =============="/> 
           
</target>


以上方法已经在opentaps wiki [http://www.opentaps.org/docs/index.php/General_Installation_of_Opentaps#Build_Aspect_class_Errors] 中加上过了。
posted @ 2011-02-09 22:18 shanghai_spark 阅读(1625) | 评论 (0)编辑 收藏

OFBIZ为我们提供了POS模块,它已经可以满足我们日常收银的大部分要求了。但是美中不足的是它没有提供库存查询功能。我也没看出来OFBIZ有近期实现此功能的计划,所以打算自己做一个。

首先研究一下POS模块的代码结构:

1、POS模块同其它模块的实现方式有所区别,它用了XUL技术来定制展示的界面。所有屏幕文件使用XUL格式定义于screens目录之下

2、按钮事件与java代码映射关系,记录在config\buttonevents.xml下

3、资源文件存放在XuiLabels_[locale].properties与config\PosUiLabels.xml中

了解结构后,加上库存查询功能就很简单了,我是这样做的:

1、在screens/default/menu/mgrmain.xml中增加一个mgrInquiryInventory库存查询按钮,它会出现在POS的“经理”界面中的

2、在buttonevents.xml中加上以下行,映射事件代码
<event button-name="mgrInquiryInventory" class-name="org.ofbiz.pos.event.ManagerEvents" method-name="inquiryInventory" disable-lock="false"/>


3、在ManagerEvents.java中加入inquiryInventory方法代码(我是使用了一个ShowInventory的XPage来展现当前选中项的库存分布)

4、完工。

算了算,包括阅读代码和编写这些东东总共也就花了七八个小时的effort,不知道为什么ofbiz就不肯加上这个功能呢?或者pos模块不再发展了?





posted @ 2011-02-08 11:29 shanghai_spark 阅读(2284) | 评论 (4)编辑 收藏

原来opentaps中的entity model文件中大量使用了floating-point来定义数值内容,现在我们要使用fixed-point来替换它们,以保证它的java type使用BigDecimal而不是Double.

这样就有了这次的替换任务,把所有model文件中的floating-point替换成为fixed-point。

方法对我来说有三:
1, 在eclipse或其它ide中查找出所有的包括floating-point文件来手工修改
2, 在UltraEdit或其它文本编程器中进行批量文件内容替换
3, 尝试一下linux的下的sed命令?

评估一下,3肯定是一个最有效率的选择。那么说干就干,let's go!

命令如下:

sed -"s/floating-point/fixed-point/g" `find . -name "*.xml"|xargs grep floating-point -rl`

一句话就搞掂了,真棒!
posted @ 2010-08-14 17:16 shanghai_spark 阅读(1421) | 评论 (0)编辑 收藏