??xml version="1.0" encoding="utf-8" standalone="yes"?> JSONRPCServlet.java中实Cinit()和service()Q?/p> init() 中只是取了些配置参数作了相关讄Q?/p> service() 中实Ch处理Q?/p> 1.从session中创?获取JSONRPCBridge对象Q?/p> 2.把提交的数据装入一个JSONObject对象中; 3.用JSONRPCBridge对象的callҎ(gu)处理JSONObject对象q返回JSONRPCResult对象?/p> q个处理较ajax-buffalo 中的处理单调了不?/p> 再来看看JSONRPCBridge.java是如何构建的?/p> 1.内置6个内部类QCallbackData、ClassData、LocalArgResovleData、MethodCandidate、MethodKey、ObjectInstanceQ?/p> 2.q有一些辅助处理的Ҏ(gu)Q比较多Q提取ؓ(f)一个或者多个辅助类比较好)(j)Q?/p> 3.核心的就是call()Ҏ(gu)了。运用的是java反射机制Q进行方法调用。这个方法写的也比较长,没仔l看Q只看到有它两个可取的地方,一个就q回对象的序列化Q另一个是对不同异常,l出相应q回的处理比较细_(d)q样有利于找到异常在什么地方,估计是原因引L(fng)?/p> 在客L(fng)的处理,是把各方法、对象串q在一P装后,便于应用?/p> 它把h的数据对象化再以串的形式提交Q后端再做一个反向操作,方便了数据处理。这U方式比ajax-buffalo 中把数据l织成一个XMLl构的数据包提交、处理效率高?/p> 工作中,遇到比较复杂的SQL语句Q也旉的。今天有旉qI一下,扑ֈ如下几个资源链(比较懒,也懒得COPYQ避嫌抄袭)(j)
http://www.51one.net/study/Oracle/list1.htm
学习(fn)两个关键字的用法QintersectQ取交集Q,minusQ取差集Q?/p>
(select a.name from a) intersect (select b.name from b) (select a.name from a) minus (select b.name from b) ?jng)重学高{数学,全还l老师了,现在自己去要回来Q上GoogleQ)(j) qQA和B相加的全部;交集QA和B怺叠的部分Q差集:(x)q-交集Q补集:(x)如果集合B是集合I的子集,我们把I看作全集Q那么I与B的差集IQBQ叫做B在I中的补集?/p>
SQL语句优化技术分?/p>
http://www.pconline.com.cn/pcjob/other/data/oracle/0501/536463.html
避免?/p>
select * from a union select * from b 先取两表Q再合ƈ select * from a union all select * from b 单的两个结果合q后p?/p>
Z么会(x)出面q种局面?Z么需要开源?在这里我不阐q自q观点Q-持有同感的h都有自己的想法?br>
开源如果想要活得不那么艰难Q我惻I(x)需要一个良好的商业模式支持?br>开源不是免费!
开源要生存发展Q也需要营M应,不能仅靠一部分怀开源激情的人或者组l无偿奉献能支撑h的?br>linux、jboss的生存模式算是比较成功的Q但q不能够同商业化软g相比较,q需要更充的营L?br>q二者的模式也是一定范围内有效Q不能做到推而广之?br>
开源Y件生存模式的探烦(ch)之\q很q,q很q,需要有志之士共同努力?br>
QL故而知斎ͼ
看以前脓(chung)的关于centric crm的blogQ心有惭愧,希望产生误导的媄(jing)响不?x)很大?
今天作一些更正,是补偿?br />1、获取centric crm源码Q得先注册,注册地址Qhttp://www.centriccrm.com/Register.do
先输入你的邮地址Q登录用q个Q;
个h名称可随便填写;
注册成功后,密码?x)发送到你邮׃Q?
2、官方用SubVersion理centic crm的源码,可以当一个subverion的客L(fng)Q指定到要下载版本的链接Q?
输入注册的邮和密码Q就可以获取源码?br />
现在?.0?.1两个版本Qsubverion链接分别如下Q?
4.1源码Qhttps://svn.centricsuite.com/webapp/branches/branch-41
4.0源码Qhttps://svn.centricsuite.com/webapp/tags/rel-200611151353-402
我用eclipseQ装了个SVN插gQ配好后Q直接check out成eclipse的项目?
SVN eclipse plugin是subclipse,插g获取|站Qhttp://subclipse.tigris.org/update_1.2.x
3、源码获取下来目录如下图
QL码check out到eclipse后,把整个项目编码方式改为UTF-8Q因源文件注释中有些旉x中文体字Q不设成UTF-8Q就昄Zؕ码,看v来没什么大,但若修改源文件再保存׃(x)弹出~码格式不正错误信息]
binQ暂没看q个目录中的内容
docQ基本文件目?br /> Binary EULA.rtf:版权x的文?
CRM Installation and Setup.pdf:安装配置文gQ描q的比较?
db-schema.html:库表设计说明文gQ了解centric CRM表结构这个文件最?jng)_考资?br />libQ项目需要的jar文g目录
prefQ特定情况下需要的配置文g目录
srcQ源码基本目?br /> src目录内有下面四个主要目录Q?br /> java:java源文件目?br /> web:web展示源文件目?br /> sql:库表脚本文g目录
testcases:单元试文g目录
src目录内有下面四个主要文gQ?br /> build.xmlQ项目编译、发布的ant配置文g
home.properties.exampleQbuild.xml的辅助文件样例,定义一些基本\径信息,如:(x)服务发布目录
master.propertiesQbuild.xml的辅助文Ӟ定义pȝ的一些属性配|?br /> README.txtQ比较详l的安装配置文gQ我是看这个文件进行安装配|的Q有旉可以把安译成中文)(j)
4、开始安装配|?br /> 1Q安装需求Java JDKQ就不用说了Q?.4以上都可以,1.4以下行不行,我也没试Q有兴趣的朋友可试试Q测试结果能告之当是感激了。我装的是JDK 5.0?br /> 2Q应用服务用tomcat 5.0,5.5都可以(不过tomcat5.5得在JDK5.0上才能运行v来)(j)QJboss、Weblogic、WebSphere、Resin也可以运行。我用Tomcat 5.5.3?br /> 3Q数据库支持DB、MSSQL、MySQL、Oracle{,具体信息可看README.txt。我用的是MySQL 5.0.21。驱动jar是MySQL官网下蝲?mysql-connector-java-5.0.4-bin.jar?br /> 4Q还需要有ant工具Q申明是?.6的,我用eclipse自带?.6.5?br /> 5Qcentric CRM中用到WebServices,可去下蝲一个,
下蝲地址Qhttp://apache.downlod.in/ws/axis/1_4/axis-src-1_4.zip?br /> 解开zip包,把webapp下面的axis目录拯?tomcat/webapps/目录下?br />
准备好上几步要求的,可以开始配|build.xmlq行的两个属性文件?br /> 复制home.properties.example文g?home.propertiesQ相兛_性做如下修改Q?br />
## Declare the webapp server's directory to compile using web app server libraries
## based on the webapp type configured in build.properties
## 讄Tomcat安装路径
CATALINA_HOME=D:/java/tomcat5.5.3
#GERONIMO_HOME=/path/to/geronimo or websphere ce
#JBOSS_HOME=/path/to/jboss
#WEBLOGIC_HOME=/path/to/weblogic
#WEBSPHERE_HOME=/path/to/websphere
## CENTRIC_HOME can be used to compile directly to the webapp's deployment
## directory (for development), or to any directory for later generating a .war
## 讄centric CRM 发布到tomcat中的路径
CENTRIC_HOME=D:/java/tomcat5.5.3/webapps/centric
#CENTRIC_HOME=/path/to/weblogic/domain/autodeploy/directory
## At times, scripts will need to install or upgrade fileLibrary documents when
## deploying from source
## 讄目中配|文件存攄?/font>
CENTRIC_FILELIBRARY=D:/Project.java/Centric CRM 4.1/fileLibrary
## To skip web based GUI the fileLibrary must be in the WEB-INF folder, useful
## for development
## 讄配置文g发布目录
CENTRIC_FILELIBRARY=D:/java/tomcat5.5.3/webapps/centric/WEB-INF/fileLibrary
## If using Axis Web Services, then declare the webapp home so that the
## Centric CRM descriptors can be installed with "ant ws"
## 讄a(chn)xis在tomcat中的发布目录
AXIS_HOME=D:/java/tomcat5.5.3/webapps/axis
master.properties 相关属性做如下修改Q?br />
##
## NOTE: Do not edit "master.properties" -- edit a copy of it
## These settings are used by ant for the build and installation process
##
## PART 1: Are you reading the instructions? (required)
## The following is a control, uncomment the following line after modifying
## these properties... we just want to make sure you're paying attention and
## the build process doesn't do something it shouldn't!
## 认修改q此配置文g标识
PROPERTIES=configured
## PART 2: Deployment settings (required for compiling)
## Default language setting: even though any locale can be specified, the
## following have Centric CRM translations and supporting database data
## args="de_DE,en_US,es_VE,fr_FR,it_IT,ja_JP,nl_NL,pt_BR,ro_RO,ru_RU,sl_SI"/>
SYSTEM.LANGUAGE=en_US
## Web server debug level:
## Extended debug information can be displayed in the web server's log file
## Comment out for no debugging, especially production server
DEBUGLEVEL=2
#DEBUG=true
#DEBUGLEVEL=lines,vars,source
## Specify the web server to build/deploy against (required):
## Use catalina for Tomcat
## Use geronimo for WAS-CE or Apache Geronimo
## All others untested but planned for
## 指定Web Server 应用服务cd
WEBSERVER.TYPE=catalina
#WEBSERVER.TYPE=geronimo
#WEBSERVER.TYPE=jboss
#WEBSERVER.TYPE=weblogic
#WEBSERVER.TYPE=websphere
## A self-signed SSL Certificate will be generated with the following parameters,
## which can then be added to Tomcat's SSL configuration and/or
## signed by an authority
## Common name should be a domain name
## Ex. *.yourcompany.com or www.yourcompany.com
KEYSTORE.COMMONNAME=127.0.0.1
KEYSTORE.ORGANIZATION=Company
KEYSTORE.ORGANIZATIONALUNIT=Unit
KEYSTORE.CITY=City
KEYSTORE.STATE=State
KEYSTORE.COUNTRY=US
KEYSTORE.VALIDITY=1000
## Force users to use SSL in Centric CRM
## The web server must be configured for SSL if this option is set to true as
## Centric CRM will redirect non-secure URLs to the secure URL
FORCESSL=false
## PART 3: Database installation settings (required for database installation)
## Uncomment and set the connection information for your specific database
## NOTE: The gatekeeper URL includes your database name, the site URL does not;
## The ant script will insert the database name after the specified url
## DB2
## CREATE DATABASE centric USING CODESET UTF-8 TERRITORY US pagesize 32 k
#GATEKEEPER.DBTYPE=db2
#GATEKEEPER.DRIVER=com.ibm.db2.jcc.DB2Driver
#GATEKEEPER.URL=jdbc:db2://127.0.0.1:50000/centric
#GATEKEEPER.USER=db2admin
#GATEKEEPER.PASSWORD=
#SITE.DBTYPE=db2
#SITE.DRIVER=com.ibm.db2.jcc.DB2Driver
#SITE.URL=jdbc:db2://127.0.0.1:50000/
#SITE.USER=db2admin
#SITE.PASSWORD=
## POSTGRESQL
## createdb -E UNICODE centric_crm
#GATEKEEPER.DBTYPE=postgresql
#GATEKEEPER.DRIVER=org.postgresql.Driver
#GATEKEEPER.URL=jdbc:postgresql://127.0.0.1:5432/centric_crm
#GATEKEEPER.USER=postgres
#GATEKEEPER.PASSWORD=
#SITE.DBTYPE=postgresql
#SITE.DRIVER=org.postgresql.Driver
#SITE.URL=jdbc:postgresql://127.0.0.1:5432/
#SITE.USER=postgres
#SITE.PASSWORD=
## MySQL
## CREATE DATABASE centric_crm CHARACTER SET utf8 COLLATE utf8_general_ci
## 指定数据库类型及(qing)q接配置
GATEKEEPER.DBTYPE=mysql
GATEKEEPER.DRIVER=com.mysql.jdbc.Driver
GATEKEEPER.URL=jdbc:mysql://127.0.0.1:3306/my_centric_crm
GATEKEEPER.USER=my_centric_crm
GATEKEEPER.PASSWORD=crm
SITE.DBTYPE=mysql
SITE.DRIVER=com.mysql.jdbc.Driver
SITE.URL=jdbc:mysql://127.0.0.1:3306/
SITE.USER=my_centric_crm
SITE.PASSWORD=crm
## MS SQL SERVER
#GATEKEEPER.DBTYPE=mssql
#GATEKEEPER.DRIVER=net.sourceforge.jtds.jdbc.Driver
#GATEKEEPER.URL=jdbc:jtds:sqlserver://127.0.0.1:1433/centric_crm
#GATEKEEPER.USER=centric_crm
#GATEKEEPER.PASSWORD=
#SITE.DBTYPE=mssql
#SITE.DRIVER=net.sourceforge.jtds.jdbc.Driver
#SITE.URL=jdbc:jtds:sqlserver://127.0.0.1:1433/
#SITE.USER=centric_crm
#SITE.PASSWORD=
## CodeGear's InterBase (formally owned by Borland) www.codegear.com
## Do NOT put the database in the centric file library, or at least the root,
## as the build.xml copies its prefs into there using the same name as your database file!
## "e:/centriccrm_db" is only an example
#GATEKEEPER.DBTYPE=interbase
#GATEKEEPER.DRIVER=interbase.interclient.Driver
#GATEKEEPER.URL=jdbc:interbase://127.0.0.1:3050/e:/centriccrm_db/centric_crm.ib
#GATEKEEPER.USER=sysdba
#GATEKEEPER.PASSWORD=masterkey
#SITE.DBTYPE=interbase
#SITE.DRIVER=interbase.interclient.Driver
#SITE.URL=jdbc:interbase://127.0.0.1:3050/e:/centriccrm_db/
#SITE.USER=sysdba
#SITE.PASSWORD=masterkey
## FIREBIRD SQL
#GATEKEEPER.DBTYPE=firebird
#GATEKEEPER.DRIVER=org.firebirdsql.jdbc.FBDriver
#GATEKEEPER.URL=jdbc:firebirdsql:127.0.0.1/3050:${CENTRIC_FILELIBRARY}/centric_crm.fdb
#GATEKEEPER.USER=sysdba
#GATEKEEPER.PASSWORD=masterkey
#SITE.DBTYPE=firebird
#SITE.DRIVER=org.firebirdsql.jdbc.FBDriver
#SITE.URL=jdbc:firebirdsql:127.0.0.1/3050:${CENTRIC_FILELIBRARY}/
#SITE.USER=sysdba
#SITE.PASSWORD=masterkey
## DAFFODIL DB EMBEDDED
#GATEKEEPER.DBTYPE=daffodildb
#GATEKEEPER.DRIVER=in.co.daffodil.db.jdbc.DaffodilDBDriver
## YOU MUST EDIT THE path in the following line to where you want the database
## created.
## The user and password must be set to daffodil
#GATEKEEPER.URL=jdbc:daffodilDB_embedded:centric_crm;create=true;path=/home/fileLibrary/centric_crm/daffodildb
#GATEKEEPER.USER=daffodil
#GATEKEEPER.PASSWORD=daffodil
#SITE.DBTYPE=daffodildb
#SITE.DRIVER=in.co.daffodil.db.jdbc.DaffodilDBDriver
#SITE.URL=jdbc:daffodilDB_embedded:
## YOU MUST EDIT THE path in the following line to where you want the database
## created.
## Ex. Use the same path as Centric CRM's deployed file library, then the name of
## the database, then end in daffodildb
## The user and password must be set to daffodil
#SITE.APPEND=;create=true;path=/home/fileLibrary/centric_crm/daffodildb
#SITE.USER=daffodil
#SITE.PASSWORD=daffodil
## ORACLE
## During installdb, use XE (or whatever you add under gatekeeper) for the
## database name since the install has not been adjusted for Oracle yet
#GATEKEEPER.DBTYPE=oracle
#GATEKEEPER.DRIVER=oracle.jdbc.driver.OracleDriver
#GATEKEEPER.URL=jdbc:oracle:thin:@//127.0.0.1:1521/XE
#GATEKEEPER.USER=
#GATEKEEPER.PASSWORD=
#SITE.DBTYPE=oracle
#SITE.DRIVER=oracle.jdbc.driver.OracleDriver
#SITE.URL=jdbc:oracle:thin:@//127.0.0.1:1521/
#SITE.USER=
#SITE.PASSWORD=
## Derby
#GATEKEEPER.DBTYPE=derby
#GATEKEEPER.DRIVER=org.apache.derby.jdbc.EmbeddedDriver
## YOU MUST EDIT THE path in the following line to where you want the database
## created.
#GATEKEEPER.URL=jdbc:derby:/home/fileLibrary/centric_crm/derbydb;create=true;upgrade=true
#GATEKEEPER.USER=centric_crm
#GATEKEEPER.PASSWORD=
#SITE.DBTYPE=derby
#SITE.DRIVER=org.apache.derby.jdbc.EmbeddedDriver
## YOU MUST EDIT THE path in the following line to where you want the database
## created.
#SITE.URL=jdbc:derby:/home/fileLibrary/centric_crm/
#SITE.APPEND=;create=true;upgrade=true
#SITE.USER=centric_crm
#SITE.PASSWORD=
## PART 4: Advanced configuration (optional)
## Web-based configuration is recommended and is the default setting
##
## If you uncomment the following CONTROL line then you must configure the
## remaining parameters yourself. You will also have to create a new Centric
## CRM user and password before using Centric CRM.
##
## If you DO NOT uncomment the CONTROL line, then the first time you use
## Centric CRM, you will be presented with a configuration wizard which will
## assist you in defining these parameters and creating a new Centric CRM
## user and password.
##
#CONTROL=BYPASS_WEB-BASED_APPLICATION_SETUP
## The following are methods for working with multiple development databases
## The APPCODE must be the same for the following Gatekeeper prefs and Site prefs
GATEKEEPER.APPCODE=centric
SITE.APPCODE=centric
## Define the web address used in communications when using a single development
## database
#WEBSERVER.URL=127.0.0.1:8080/centric
## Define the web address used in communications when using multiple development
## databases
#WEBSERVER.ASPMODE=true
#WEBSERVER.PORT=8080
#WEBSERVER.CONTEXT=/centric
## The server's default timezone for new users (using standard Java names)
SYSTEM.TIMEZONE=America/New_York
## Default currency for all users
SYSTEM.CURRENCY=USD
## Default country for all users
SYSTEM.COUNTRY=UNITED STATES
## External Servers used by the system
MAILSERVER=127.0.0.1
FAXSERVER=127.0.0.1
FAXENABLED=false
PROXYSERVER=false
PROXYSERVER.HOST=
PROXYSERVER.PORT=
## Apache Axis Web Services
## 指定WebService 服务路径
AXIS.WEBAPP=/axis
AXIS.HOST=127.0.0.1
AXIS.PORT=8080
## Asterisk integration
ASTERISK.OUTBOUND.ENABLED=false
ASTERISK.INBOUND.ENABLED=false
ASTERISK.URL=
ASTERISK.USERNAME=
ASTERISK.PASSWORD=
ASTERISK.CONTEXT=from-internal
## XMPP/Jabber integration
XMPP.ENABLED=false
XMPP.CONNECTION.SSL=false
XMPP.CONNECTION.URL=
XMPP.CONNECTION.PORT=5222
XMPP.MANAGER.USERNAME=
XMPP.MANAGER.PASSWORD=
## LDAP integration
LDAP.ENABLED=false
# Validate username OR email against LDAP: username|email
LDAP.CENTRIC_CRM.FIELD=username
LDAP.FACTORY=com.sun.jndi.ldap.LdapCtxFactory
LDAP.SERVER=ldap://127.0.0.1:389
# Search by attribute, otherwise composite DN: true|false
LDAP.SEARCH.BY_ATTRIBUTE=true
LDAP.SEARCH.USERNAME=cn=admin,ou=IT,o=COMPANY
LDAP.SEARCH.PASSWORD=
LDAP.SEARCH.CONTAINER=o=COMPANY
LDAP.SEARCH.ORGPERSON=inetOrgPerson
LDAP.SEARCH.SUBTREE=true
LDAP.SEARCH.ATTRIBUTE=mail
#LDAP.SEARCH.BY_ATTRIBUTE=false
#LDAP.SEARCH.PREFIX=cn=
#LDAP.SEARCH.POSTFIX=,o=COMPANY
## Define the system's email address
EMAILADDRESS=Centric CRM <noreply@127.0.0.1>
## Timed events, definitely turn on for a production server
CRON.ENABLED=true
## Connection Pool Settings
CONNECTION_POOL.DEBUG=false
CONNECTION_POOL.TEST_CONNECTIONS=false
CONNECTION_POOL.ALLOW_SHRINKING=true
CONNECTION_POOL.MAX_CONNECTIONS=10
CONNECTION_POOL.MAX_IDLE_TIME.SECONDS=60
CONNECTION_POOL.MAX_DEAD_TIME.SECONDS=300
## Layout Settings
## Template replaces the following files which MUST exist:
## CSS:
## template1.css
## template1-8pt.css
## template1-10pt.css
## JSP:
## template1nav.jsp
## template1style.jsp
## template1styleNoSession.jsp
## template1styleContainer.jsp
LAYOUT.TEMPLATE=template1
LAYOUT.JSP.WELCOME=welcome.jsp
LAYOUT.JSP.LOGIN=login.jsp
#LAYOUT.JSP.LOGIN.LOGO=<img src="images/centric/logo-centric.gif" width="295" height="66" alt="" border="0" />
#LAYOUT.JSP.LOGIN.TEXT=Centric CRM
## Max Imports that can run concurrently
IMPORT_QUEUE_MAX=1
## Opportunity behavior
# OPPORTUNITY.DEFAULT_TERM=52
# OPPORTUNITY.DEFAULT_UNITS=W
# OPPORTUNITY.MULTIPLIER=52
# OPPORTUNITY.CLOSE_PROBABILITY=25,50,75
完成上述两文件的修改后,打开eclipse的ant视图Q?br />
q行Q?font color="#ff0000">ant deploy 完成目的编译发布工作?br />
下一步是创徏库表Q可q行 ant installdb 创徏库表?br /> q行 ant installdb前,先在启动MySQL,创徏一个表I间?qing)用P
CREATE DATABASE my_centric_crm CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON my_centric_crm.* TO my_centric_crm@"%" IDENTIFIED BY "crm";
创徏库表Ӟ若出现类?Specified key was too long; max key length is 765bytes"的错误,是因为标?UNIQUE NOT NULL"的字D长度>255Q?55Q?65/3Q了。MySQL数据库的uniquecdD长度限制比较短Q视不同版本Q有的限制ؓ(f)765个字节,有的限制?000个字节,UTF是占?个字节位的,所以在q个限制上还要除?。centric CRM的mysql库脚本中QuniquecdD늚长度是设?00长字W的Q出Cq问题一个可行的妥协办法是修改脚本uniquecdD늚长度?br />
建完表后Q可以启动tomcat服务Q运?ant ws ȀzWebServiceQ应用服务配|安装完成!
通过 http://localhost:8080/centric,W一ơ进入centric crmpȝ?br />
W一ơ进入系l时Q是一个登录界面,用户是dhvadmin,密码是admin,dq入Q是一步步的系l参数设|操作,操页面提C,可完成讄。最后是创徏应用pȝ公司名称和管理员用户密码的界面,再次使用pȝӞ׃理员名U和密码dQ对pȝq行讄?qing)添加管理其他用戗(xQ告一D落。)(j)
<servlet-mapping>
<servlet-name>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-name>
<url-pattern>/JSON-RPC</url-pattern>
</servlet-mapping>
所有的h提交到这个Servlet后分发处理ƈ做出响应?/p>
避免使用
替代Ҏ(gu)
field in(a,b,c)
field=a or field = b or field=c
field is null /is not null
field > ' ' 、field > 0
当下buffalo-1.2.zip 4,770KB Q?/font>
解开Q发现项目配|文件是eclipseQ切喜!eclipseQmy love。)(j)Q?/font>
导入eclipse中,U色的报错:(x)三个cd变量没找刎ͼ是web服务要的三个包servlet-api.jar、jsp-api.jar、jasper-runtime.jarQ在tomcat对应目录可以扑ֈ。其实还有第四个cd变量Q-junit.jarQ只不过eclipse中自带的有,如果不用eclipseQ找到这四个jar包引入?/font>
目是以java文gZ的,有一个war目录是演C用的web应用代码目录Qweb应用目得自己徏Q这个感觉不爽,虽然它有一个build.xml文g可以打web应用包,但想调试跟踪Q还是缺一步(我站在研I的角度Q如果应用的话,加入那几个包Q看看用方法就可以了)(j)?br/>
首先研究了一下ApplicationServlet.java
1.q个Servlet初始化时Q创?获取了一个服务仓库(ServiceRepositoryQ;
2.所有的h、响应都装成一个自定义的请求上下文本(RequestContextQ;
3.Ҏ(gu)h的\径调用不同的RequestWorkerQ(q一点好Q又不好Q?/p>
4.剩下的就是worker开始工作了Q初始化、校验、处理?/p>
重要的也?ldquo;处理”Q现在看看worker的结构?/p>
接口c:(x)interface RequestWorker 定义三个基本Ҏ(gu)?/p>
抽象c:(x)abstract class AbstractRequestWorker 实现初始化和校验q两个基本方法,另实C些其它方法?/p>
具体实现c:(x)ViewWorker、BuffaloWorker、UploadWorker 当然Q你也可以写自己的worker
当的目源码中,ViewWorker、UploadWorker的处理方法中都是抛出UnsupportedOperationExceptionQ想处理的话Q你也可以加。现在重要的讲讲BuffaloWorker的处理?/p>
1.通过装的请求上下文ӞRequestContextQ,获取服务仓库QServiceRepositoryQ;
2.通过h的相对\径(此方法感觉欠妥)(j)Q获取相应的服务Q?/p>
3.有了“业务处理Ҏ(gu)”?ldquo;业务h”后,是调用“_麻布调用(BurlapInvokerQ?rdquo;处理余下的工作了?/p>
前面写的是一些流E,没什么复杂的东西Q这最后的 invokerQ是比较核心Q也很经典的处理。在q里Q我也不多写了,再写下去Q大家也一路的看下去,没什么感觉。相信看完了 invoker的实玎ͼ一定能学到不少东西?/p>
下次看看前端是怎么实现的,今天到此为止Q休息一?x)?/p>
一、下?/P>
下蝲|站Q?A >http://freshmeat.net/projects/json-rpc-java/?branch_id=49217&release_id=214415
下蝲地址Q?A >http://freshmeat.net/redir/json-rpc-java/49217/url_zip/json-rpc-java-1.0rc2.zip (版本1.0rc2)
解压后有三个文g夏V三个文Ӟ(x)
src jsonrpc的核心代?/P>
test 演示用的java代码
webapps 演示用的web代码
build.xml ant文g
jsonrpc.jar ~译好的jsonrpc核心?/P>
jsonrpc.war ~译好的演示web?/P>
二、安装运?/P>
1、如果不想用javaIDE~译发布Q配|好ant 和tomcatQ用antq行解压后的build.xmlQ把jsonrpc的demo发布到tomcat中,启动tomcatQ打开http://127.0.0.1:8080/jsonrpc/ 可以看到演CZ?/P>
不过Qbuild.xml文g要做一炚w应的改动,
<property name="tomcat" location="../jakarta-tomcat-5.0.19"/>中的locationD讄为tomcat的安装目?/P>
?/P>
<property name="tomcat" location="D:\java\Tomcat5.0"/>
2、用javaIDE的话Q我是用eclipse 3.01+myeclipse 3.84
新徏一个空的web目Q?/P>
web root folder=webappsQ?/P>
context root url =jsonrpcQOK?/P>
Q这两个值可以用默认讄Q但用默认设|后面改动比较多Q所以就q合它自q口味Q?/P>
把解开的src和test目录攑ֈ新徏目的根目录中,webapps/jsonrpc目录下的内容拯到项目webapps目录中,eclipse自动~译Q会(x)报一些错误,是因为test/src中有一部分java源码未作为java文g~译Q鼠标右键点击项目图?>属?>Java~译路径->资源->dtest/src目录到资源中Q确定OQ?/P>
jsp文g没有因java文g的重新编译而更新所以还?x)显CZ些红色的错误Q就得手工让它再~译一ơ,鼠标右键点击目中webapps目录->myeclipse->q行校验QOQ,剩下的是一些警告信息,如果你不想看到它们,可以ȝ序中一个个的去掉?/P>
在eclipse中发布jsonrpc、启动tomcat服务Q大功告成?/P>
单的看了一下它的设计实现过Q明天接着写?/P>
以前偶尔的用q几ơ,但一ơ没形成?fn)惯和一套良好的应用机制Q自咎主要原因是对log4j掌握的还是不够,亟待提升?BR>
今天p旉找些资源研究研究?BR>
在网上搜C些文章,首先看的是IBM中国|站上的一技术文章(http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.htmlQ讲得比较基Q也很详l,对log4j的用讲得全面而脓(chung)切,甚利于初ơ学?fn),发表日期?002/6/19Q有Ҏ(gu)Q?BR>
1、去|站Q?A >http://logging.apache.org/log4j/docs/download.htmlQ下载log4j的jar包,直接下蝲log4j-1.2.13版链接:(x)http://mirror.vmmatrix.net/apache/logging/log4j/1.2.13/logging-log4j-1.2.13.zipQ?BR>2、解开log4j.jar文g攑ֈweb应用E序的WEB-INF/lib下面Q?BR>3、编写文件名?FONT face="Courier New">log4j.properties 配置文g到java源文件的根目录中Q?BR>4、在自己的程序中构徏日志记录器;
5、利用记录器标识要输入的信息?BR>
W二步如果是在java的一般应用程序中应用log4jQ则在环境变量CLASSPATH中添加一个指向log4j.jar的倹{?BR>W三步把命名?FONT face="Courier New">log4j.properties?/FONT>log4j配置文g攑֜java源文件目录中是一个简z的办法Q可以在E序中自定义的指定log4j的配|文Ӟ配置文g名称和存放\径都可自定义?/P>
Log4j支持两种配置文g格式Q一U是XML格式的文Ӟ一U是JavaҎ(gu)文Ӟ?|(j)。下面引用的是用JavaҎ(gu)文件做为配|文件的Ҏ(gu)Q不用XML解析器)(j)Q?/P>
如果定义了log4j的输出配|文Ӟ在程序中获取日志记录器后可以直接标识日志输Z息?BR>
[***] 在判断DEBUG/INFOU别的信息是否要加入日志文g前,记录器提供isDebugEnabled()/isInfoEnabled()Ҏ(gu)判断当前U别是否Ȁz,q样处理减少日志处理信息时再判断当前U别是否ȀzL耗的资源Q提高运行性能?BR>
补加Q?BR>
刚发现l(f)og4eQ?A >http://log4e.jayefem.de/index.php/DownloadQ这个eclipse的插Ӟ它实现的功能是鼠标点d下,可以自动生产log标识Q免L敲的体力?BR>至于怎么用,很单了Q跟它的插g一样安装,装完后,在eclipse的编辑区右键菜单中会(x)多一个log4e,所有操作都在这里了?/P>