sinxsoft

常用链接

统计

Eclipse

Linux

最新评论

2011年11月15日 #

研究jBPM和NetBPM

暂缓

posted @ 2011-11-15 17:22 sinxsoft 阅读(4) 评论(0) 编辑

2011年7月26日 #

研究:Microsoft Solution Framework

暂缓。

posted @ 2011-07-26 16:25 sinxsoft 阅读(12) 评论(0) 编辑

SCRUM迭代增量式软件开发过程研究

暂缓------

posted @ 2011-07-26 14:18 sinxsoft 阅读(4) 评论(0) 编辑

多说多做多想。

posted @ 2011-07-26 11:11 sinxsoft 阅读(3) 评论(0) 编辑

架构师培训笔记:

模块、组件划分,组件封装,多线程考虑,防火墙考虑(如只能单向通过,在架构的时候就需要考虑清楚)

需求,领域,分析,设计,实施等模型

保持架构的健壮和稳定性,让架构适应变化

 

严重问题:如何解耦呢?

 

扩展性(也包括硬件扩展),灵活性,

软件性能

可维护性

可伸缩性

高内聚,低耦合

 

针对主要需求的(20%)花掉80%的时间

 

设计目标(11个)

 

必须识别那些容易变更的需求

 

JS框架:

JQuery

EXT(重量级)

 

RIA架构:

FLEX

Silverlight

 

分布式应用

Load balance

 

宏观架构,平台,软件,系统,软件等的架构

微观架构,框架架构,流程架构等

 

解耦:持久数据层,消息机制框架

 

架构方式:

自顶向下(熟练架构师)

自底向上(开发人员代码会跟着重构)

收费的 ANTS分析插件

 

 

架构注意一个Context类,负责应用程序的构建和管理

 

注意编译状态和运行时状态区别,架构时候特别注意

 

实体数据对象,数据原生对象, 领域对象经过拆分,组合,转换处理的

 

命名空间将系统的和不同dll的命名空间用空行分开

 

命名空间的分隔:公司/项目/模块/工程/命名空间

 

研究一下数据缓存机制,内存数据的持久化和内存数据的并发操作,

1, 内存数据被修改,但持久失败

2, 内存数据同时被两个或多个现成修改

3, 脏数据问题:甲线程修改了一条记录,乙线程取了被修改的数据返回给客户,甲线程持久操作,但失败,那乙读脏数据了。

 

抽象不应该依赖细节,细节要依赖抽象

针对接口/抽象编程

 

如果一些类不叫稳定,或者以后基本不变,也不会衍生多个不同实现的子类,则不要设计成抽象结构,这样显得画蛇添足了。

 

10万条订单存储在内存(缓存服务器)是个什么概念?

缓存服务器中命中率算法,淘汰掉什么样的数据?

那其他各种单据难道都要存于缓存?硬件开销,是否是良好的架构,该架构实用于什么样的一个平台应用环境?

 

WinForm UI控件在添加删除数据库时候,可在之前和之后分别执行BeginUpdate()EndUpdate()

 

大型系统的session架构设计

 

云计算框架架构设计

ServerFarm 集合

 

RTI    RT Control(实时控制中心)动态部署服务到ServerFarm

事务补偿

 

业务原生特点,领域模型

 

GRASP模式

 

O/RMapping 设计思路

按照业务原生整合表,业务实体代表业务实际数据对象

业务实体间维护关系,关系1对多,避免多对多关系

对于事务处理,交由数据库来处理

发起事务:组装成数据库事务抛给数据库处理,在数据库处理返回后再处理DOL层中的实体对象

对于静态数据(查询数据),采用缓存机制进行持久化对象缓存

对于动态数据(尤其是频率比较高),采用延时加载机制

双向ORMapping,写一套数据更新的SQL,当前段业务组件更新实体数据,实时更新到数据库中

 

posted @ 2011-07-26 10:44 sinxsoft 阅读(18) 评论(0) 编辑

从今天开始,向注册会计师进军。

    先肯《会计》和《财务成本管理》,可能会遇到意想不到的困难,呵呵,不怕,会计学有一些基础。

posted @ 2011-07-26 10:36 sinxsoft 阅读(7) 评论(0) 编辑

2010年12月16日 #

SecureCRT基本命令用法:(转)

常用命令:
一、ls 只列出文件名 (相当于dir,dir也可以使用) 

-A:列出所有文件,包含隐藏文件。 
-l:列表形式,包含文件的绝大部分属性。 
-R:递归显示。 
--help:此命令的帮助。

二、cd 改变目录 
cd /:进入根目录 
cd :回到自己的目录(用户不同则目录也不同,root为/root,xxt为/home/xxt 
cd ..:回到上级目录 
pwd:显示当前所在的目录

三.less 文件名:查看文件内容。

四.q 退出打开的文件。

五.上传文件: rz 选择要传送的文件,确定。

六.下载文件: sz 指定文件名,enter敲,即下载到了secureCRT/download目录下。

七:删除文件: rm 删除文件 ,rmdir 删除空目录。
 
八.显示 最近输入的20条命令:history 20 
 
九.获得帮助命令 --help查看命令下详细参数:  如:rz --help   , sz --help  。

十.cd 进入某个文件夹的命令:
mkdir+文件夹名 创建某个文件夹的命令
sz+文件名 从服务器端向本机发送文件的命令
rz 从本机向服务器端传送文件的命令
ll 列出当前目录下的所有文件,包括每个文件的详细信息
dir 对当前文件夹
vi 打开当前文件

十一.在编辑某个文件的时候:
a 切换到编辑模式
ctrl+c 退出编辑模式
dd 删除整行
:q 退出当前文件
:w 写入并保存当前文件
-f 强行xx的参数。。。

 

其它命令:
1.ps -ef  //查看server的进程,以列表形式显示的server进程。
 ps 显示当前在系统运行的进程 /usr/bin/ps [选项] -e 显示每个现在运行的进程 -f 生成一个完全的列表

实际操作:
--------------------------------------

1 SSH客户端连接到10.5.1.55系统(参见《启动远程客户端说明SecureCRT.doc》)

$ cd /home/bea2/user_projects/csdomain/bin

查看weblogic92服务进程

$ ps -eaf | grep weblogic

    bea2 327926 331940   0 13:08:45 pts/4 0:00 grep weblogic

webadmin 421908 368956   0   Sep 24      - 4:13 /usr/java5_64/bin/java -Xms256m -Xmx512m -da -Dplatform.home=/home/weblogic/bea/weblogic92 -Dwls.home=/home/weblogic/bea/weblogic92/server -Dwli.home=/home/weblogic/bea/weblogic92/integration -Dweblogic.management.discover=true -Dwlw.iterativeDev=false -Dwlw.testConsole=false -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/home/weblogic/bea/patch_weblogic923/profiles/default/sysext_manifest_classpath -Dweblogic.Name=AdminServer -Djava.security.policy=/home/weblogic/bea/weblogic92/server/lib/weblogic.policy weblogic.Server

bea2 491796 385044 17 00:12:50 pts/6 182:55 /usr/java5_64/bin/java -Xms6g -Xmx8g -javaagent:/home/bea2/user_projects/csdomain/Introscope/wily/Agent.jar -Dcom.wily.introscope.agentProfile=/home/bea2/user_projects/csdomain/Introscope/wily/IntroscopeAgent.profile -Dcom.wily.introscope.agent.agentName=AdminServer -da -Dplatform.home=/home/weblogic/bea/weblogic92 -Dwls.home=/home/weblogic/bea/weblogic92/server -Dwli.home=/home/weblogic/bea/weblogic92/integration -Dweblogic.management.discover=true -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dfile.encoding=GBK -Dibm.stream.nio=true -Dweblogic.ext.dirs=/home/weblogic/bea/patch_weblogic923/profiles/default/sysext_manifest_classpath -Dweblogic.Name=AdminServer -Djava.security.policy=/home/weblogic/bea/weblogic92/server/lib/weblogic.policy weblogic.Server

说明:根据以上提示查看登陆用户bea2启动的进程,注意标红的bea2为进程拥有着, 491796为进程号

执行如下命令杀掉进程

$ kill -9 491796(根据2操做查找到得系统进程号)

说明:执行后再执行$ ps -eaf | grep weblogic命令将不会看到该进程号的weblogic进程

启动服务

$ ./quickRun.sh

-------------------------------------------------------------------
2.ant -buildfile CMS_MainTrunk.xml  //build 包

3.vi test.txt  //浏览文件内容
i {insert写输入}
esc  退出insert
:wq! write 保存并退出vi模式   
:q!  不保存退出vi模式

4.我一般习惯用ps –ef命令,这样看到以列表形式显示的server进程;用命令pstree来查看server的进程,这样看到以树的形式显示的server进程。
Pstree命令的优点在于可以立即找出某进程的父进程。您可能会需要使用 -p 选项显示每个进程的 PID,以及 -u 选项来显示启动该进程的用户名。
一般来说,这一树结构比较长,您就需要这么执行 pstree –up | less 这将让您纵览整个进程树结构。

5.secureCRT中乱码解决:Options->SessionOptions->Appearance->font把default改成UTF-8,就可以显示中文字体了。
 
6.hostname:查hostname

7.ifconfig 查询主机IP

8.在S-CRT下用ctrl+c 和ctrl+v:
Options---Global Options---Edit default Settings进去后点Terminal---Emulation然后点Mapped Keys,点中低部的,use windows copy and paste key,点确认。

9.进入vi的命令: 
vi filename :打开或新建文件,并将光标置于第一行首 
vi +n filename :打开文件,并将光标置于第n行首 
vi + filename :打开文件,并将光标置于最后一行首 
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处

10.移动光标类命令:
}:光标移至段落开头 
{:光标移至段落结尾 
nG:光标移至第n行首 
n+:光标下移n行 
n-:光标上移n行 
n$:光标移至第n行尾 
H :光标移至屏幕顶行 
M :光标移至屏幕中间行 
L :光标移至屏幕最后行 
0:(注意是数字零)光标移至当前行首 
$:光标移至当前行尾

11.屏幕翻滚类命令: 
Ctrl+u:向文件首翻半屏 
Ctrl+d:向文件尾翻半屏 
Ctrl+f:向文件尾翻一屏  //好像是 r
Ctrl+b;向文件首翻一屏 
 
12.搜索命令: 
/pattern:从光标开始处向文件尾搜索pattern 
?pattern:从光标开始处向文件首搜索pattern 
n:在同一方向重复上一次搜索命令 
N:在反方向上重复上一次搜索命令

postgres使用:
1.进入sql运行环境。
[test@test bin]$ ./psql -n dbname -U usrname
stay81=# select count(*) from table1;
 count 
-------
  5986
(1 row)

2. 退出,使用结束后退出,不然连接一直被挂起。
stay81=# \q 

3.postgres 数据导出。
[postgres@test bin]$ ./pg_dump -U postgres -t testTable -d testDB > testTable.dump
或[postgres@test bin]$ ./pg_dump -U postgres -d testDB -t testTable -F c -v > testTable.dump

4. postgres 数据导入。
[postgres@test bin]$ ./psql -U postgres -d testDB < testTable.dump
或[postgres@test bin]$ ./pg_restore -U postgres -d testDB < testTable.dump

5.一台主机上将数据库目录转储到另一台主机上。
pg_dump -h host1 -p 5432 dbname | psql -h host2 -p post1 dbname
或./pg_dump -U postgres -d testDB1 -t testTable | ./psql -U postgres -d testDB2
-U 为用户名 ,-d 为DB名,-t 为表名称,如果整个数据库导出,不需此项。

6.php执行。
[test@test bin]$ /usr/bin/php -q ./batchstart.php


实战操作:

/home/absys6$ ls
dvlp              dvlp_bak20090413  personal          tmp
/home/absys6$ cd dvlp
/home/absys6/dvlp$ ls
/home/absys6/dvlp$ cd SV_POLICY
/home/absys6/dvlp/SV_POLICY$ ls
include  src
/home/absys6/dvlp/SV_POLICY$ cd src
/home/absys6/dvlp/SV_POLICY/src$ ls
/home/absys6/dvlp/SV_POLICY/src$ ls *pc    //对文件进行筛选
/home/absys6/dvlp/SV_POLICY/src$ grep VIP *pc //列出包含VIP的所有.pc的文件的代码的一部分。
/home/absys6/dvlp/SV_POLICY/src$ vi PlyPrmCnt.pc  //查看整个文件。

还可见其它命令:http://www.zjgzx.com/blog/user1/1/archives/2008/4607.html

 

http://www.cnblogs.com/ztf2008/archive/2009/09/11/1564979.html 

posted @ 2010-12-16 14:24 sinxsoft 阅读(129) 评论(0) 编辑

2010年11月11日 #

通过反射该变WCF的Endpoint的行为,而无需修改客户端配置文件

1,首先,修正了一个由于List<TEntity>数据量过大导致的异常:

http://www.cnblogs.com/sinxsoft/archive/2010/11/10/1874249.html

2,修正了此问题之后,发现修改了客户端的app.config文件,这对于发布及其不爽,因为每个客户的app.config不同,这会导致发布后每个客户机上的文件一致;

于是,想用代码动态的设置终结点的行为。

3,在调试过程中,先配置好了客户端,发现了ChannelFactory<T> 的终结点行为列表已经包括了对象: System.ServiceModel.Dispatcher.DataContractSerializerServiceBehavior,通过reflector一查,发现该对象的定义为internal:

internal class DataContractSerializerServiceBehavior : IServiceBehavior, IEndpointBehavior

4,于是机会有了:可以通过反射创建对象塞入到终结点的行为列表中了:

      private static ChannelFactory<IServiceChannel> GetChannelFactory()
        {
            
if (_factory == null)
            {
                _factory 
= new ChannelFactory<IServiceChannel>("BasicHttpBinding_IService");
                AttachServiceBehavior(_factory);
            }
            
return _factory;
        }

        
private static void AttachServiceBehavior(ChannelFactory<IServiceChannel> channelFactory)
        {
            
//找到程序集的其中任何一个class,确定程序集
            var type = typeof (ClientRuntime);
            
//实例化internal类,通过反射
            var instance =
                type.Assembly.CreateInstance(
"System.ServiceModel.Dispatcher.DataContractSerializerServiceBehavior",
                                             
true,
                                             BindingFlags.CreateInstance 
| BindingFlags.Instance |
                                             BindingFlags.NonPublic, 
nullnew object[] {false, Int32.MaxValue}, null,
                                             
null);
            
//转换成终结点的行为接口
            var behavior = instance as IEndpointBehavior;
            
if (behavior != null)
            {
                
//插入到通道工厂的终结点行为集合中
                channelFactory.Endpoint.Behaviors.Add(behavior);
            }
        }

 

 测试,通过

posted @ 2010-11-11 11:00 sinxsoft 阅读(172) 评论(0) 编辑

2010年11月10日 #

System.ServiceModel.CommunicationException:The underlying connection was closed: The connection was closed unexpectedly

在开发WCF的过程中,发现了当请求数据量超过了一定大小的时候,就报异常:

System.ServiceModel.CommunicationException:The underlying connection was closed: The connection was closed unexpectedly

先看服务器:

 

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  
<configSections>
    
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  
</configSections>
  
<cachingConfiguration defaultCacheManager="Session">
    
<cacheManagers>
      
<add name="Session" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="10000" numberToRemoveWhenScavenging="10" backingStoreName="NullBackingStore" />
    
</cacheManagers>
    
<backingStores>
      
<add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="NullBackingStore" />
    
</backingStores>
  
</cachingConfiguration>
  
<system.web>
    
<compilation debug="true" targetFramework="4.0">
      
<assemblies>
        
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      
</assemblies>
    
</compilation>
  
</system.web>
  
<system.serviceModel>
    
<!--该值指示此服务是否在 ASP.NET HTTP 应用程序管道的上下文中运行-->
    
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    
<services>
      
<service name="WmsService.Service" behaviorConfiguration="XRServiceBehavior">
        
<endpoint bindingConfiguration="BasicHttpBinding" binding="basicHttpBinding" contract="WmsService.IService" />
      
</service>
    
</services>
    
<behaviors>
      
<serviceBehaviors>
        
<behavior name="XRServiceBehavior">
          
<serviceMetadata httpGetEnabled="true" />
          
<serviceDebug httpHelpPageEnabled="false" includeExceptionDetailInFaults="true" />
        
</behavior>
      </serviceBehaviors>
    
</behaviors>
    
<bindings>
      
<basicHttpBinding>
        
<binding name="BasicHttpBinding" allowCookies="true" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647">
          
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          
<security mode="None">
            
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            
<message clientCredentialType="UserName" algorithmSuite="Default" />
          
</security>
        
</binding>
      
</basicHttpBinding>
    
</bindings>
  
</system.serviceModel>
  
<system.webServer>
    
<modules runAllManagedModulesForAllRequests="true" />
  
</system.webServer>
 
</configuration>

 

 

再看客户端:

 

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  
<system.serviceModel>
    
<bindings>
      
<basicHttpBinding>
        
<binding name="BasicHttpBinding_IService" allowCookies="true" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647">
          
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          
<security mode="None">
            
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            
<message clientCredentialType="UserName" algorithmSuite="Default" />
          
</security>
        
</binding>
      
</basicHttpBinding>
    
</bindings>
    
<client>
      
<endpoint address="http://localhost:3609/Service.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService" contract="WmsService.IService" name="BasicHttpBinding_IService" />
    
</client>
    
</system.serviceModel>  
</configuration>

 

 

 

通过寻找,终于找到原因:原来是behavior在作怪:在行为节点下面有一个类dataContractSerializer,此类有一个属性MaxItemsInObjectGraph,用来控制序列化对象中允许的最大项数。默认值为 65536 字节 (64KB),一旦数据超出了该值,则抛出通信异常。解决方法:

在服务器的的行为配置下加上<dataContractSerializer maxItemsInObjectGraph="2147483647"/>

在客户端加上节点:

 

 <behaviors>
      
<endpointBehaviors>
        
<behavior name="superBehavior">
          
<dataContractSerializer
            
maxItemsInObjectGraph="2147483647" />
        
</behavior>
      
</endpointBehaviors>
 
</behaviors>

 

然后在endpoint节点上设置属性:behaviorConfiguration="superBehavior"。

测试通过。

posted @ 2010-11-10 22:19 sinxsoft 阅读(249) 评论(0) 编辑

2010年9月20日 #

转。收藏。Dump ADPlus

摘要: http://aloneplayer.spaces.live.com/blog/cns!C3CB6D654135F83D!422.entry?wa=wsignin1.0&sa=10734357Working with Dump File 如果程序员比作侦探,那Dump文件就像是凶案现场的全息照片. 导致用户的程序崩溃的原因很复杂,可能是用户的配置,可能是和其他软件冲突,开发人员无法重现此类...阅读全文

posted @ 2010-09-20 16:23 sinxsoft 阅读(70) 评论(0) 编辑