??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美中文字幕视频,亚洲一区二区三区欧美,在线观看亚洲 http://www.aygfsteel.com/paulwong/category/11299.htmlzh-cn Fri, 07 Aug 2015 06:58:36 GMT Fri, 07 Aug 2015 06:58:36 GMT 60 RESTful API 设计指南 http://www.aygfsteel.com/paulwong/archive/2015/08/07/426659.htmlpaulwong paulwong Fri, 07 Aug 2015 06:13:00 GMT http://www.aygfsteel.com/paulwong/archive/2015/08/07/426659.html http://www.aygfsteel.com/paulwong/comments/426659.html http://www.aygfsteel.com/paulwong/archive/2015/08/07/426659.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/426659.html http://www.aygfsteel.com/paulwong/services/trackbacks/426659.html
|络应用E序Q分为前端和后端两个部分。当前的发展势Q就是前端设备层ZIP手机、^ѝ桌面电(sh)脑、其他专用设?.....Q?/p>
因此Q必L一U统一的机Ӟ方便不同的前端设备与后端q行通信。这DAPI构架的流行,甚至出现"API First" 的设计思想?a target="_blank" style="margin: 0px; padding: 0px; list-style-type: none; border: none; color: #112233;">RESTful API是目前比较成熟的一套互联网应用E序的API设计理论。我以前写过一?a target="_blank" style="margin: 0px; padding: 0px; list-style-type: none; border: none; color: #112233;">《理解RESTful架构?/a>Q探讨如何理解这个概c?/p>
今天Q我介lRESTful API的设计细节,探讨如何设计一套合理、好用的API。我的主要参考了两篇文章Q?a target="_blank" style="margin: 0px; padding: 0px; list-style-type: none; border: none; color: #112233;">1Q?a target="_blank" style="margin: 0px; padding: 0px; list-style-type: none; border: none; color: #112233;">2Q?/p>
一、协?/h2> API与用L通信协议QL使用HTTPs协议 ?/p>
二、域?/h2> 应该量API部v在专用域名之下?/p>
https: / / api. example. com
如果定API很简单,不会有进一步扩展,可以考虑攑֜d名下?/p>
https: / / example. org/api/
三、版本(VersioningQ?/h2> 应该API的版本号攑օURL?/p>
https: / / api. example. com/v1/
另一U做法是Q将版本h在HTTP头信息中Q但不如攑օURL方便和直观?a target="_blank" style="margin: 0px; padding: 0px; list-style-type: none; border: none; color: #112233;">Github采用q种做法?/p>
四、\径(EndpointQ?/h2> 路径又称"l点"QendpointQ,表示API的具体网址?/p>
在RESTful架构中,每个|址代表一U资源(resourceQ,所以网址中不能有动词Q只能有名词Q而且所用的名词往往与数据库的表格名对应。一般来_数据库中的表都是同种记录?集合"QcollectionQ,所以API中的名词也应该用复数?/p>
举例来说Q有一个API提供动物园(zooQ的信息Q还包括各种动物和雇员的信息Q则它的路径应该设计成下面这栗?/p>
https://api.example.com/v1/zoos https://api.example.com/v1/animals https://api.example.com/v1/employees 五、HTTP动词 对于资源的具体操作类型,由HTTP动词表示?/p>
常用的HTTP动词有下面五个(括号里是对应的SQL命oQ?/p>
GETQSELECTQ:从服务器取出资源Q一Ҏ(gu)多项Q?/li> POSTQCREATEQ:在服务器新徏一个资源?/li> PUTQUPDATEQ:在服务器更新资源Q客L提供改变后的完整资源Q?/li> PATCHQUPDATEQ:在服务器更新资源Q客L提供改变的属性)?/li> DELETEQDELETEQ:从服务器删除资源?/li> q有两个不常用的HTTP动词?/p>
HEADQ获取资源的元数据?/li> OPTIONSQ获取信息,关于资源的哪些属性是客户端可以改变的?/li> 下面是一些例子?/p>
GET /zoosQ列出所有动物园 POST /zoosQ新Z个动物园 GET /zoos/IDQ获取某个指定动物园的信?/li> PUT /zoos/IDQ更新某个指定动物园的信息(提供该动物园的全部信息) PATCH /zoos/IDQ更新某个指定动物园的信息(提供该动物园的部分信息) DELETE /zoos/IDQ删除某个动物园 GET /zoos/ID/animalsQ列出某个指定动物园的所有动?/li> DELETE /zoos/ID/animals/IDQ删除某个指定动物园的指定动?/li> 六、过滤信息(FilteringQ?/h2> 如果记录数量很多Q服务器不可能都它们返回给用户。API应该提供参数Q过滤返回结果?/p>
下面是一些常见的参数?/p>
?limit=10Q指定返回记录的数量 ?offset=10Q指定返回记录的开始位|?/li> ?page=2&per_page=100Q指定第几页Q以及每늚记录数?/li> ?sortby=name&order=ascQ指定返回结果按照哪个属性排序,以及排序序?/li> ?animal_type_id=1Q指定筛选条?/li> 参数的设计允许存在冗余,卛_许API路径和URL参数偶尔有重复。比如,GET /zoo/ID/animals ?GET /animals?zoo_id=ID 的含义是相同的?/p>
七、状态码QStatus CodesQ?/h2> 服务器向用户q回的状态码和提CZ息,常见的有以下一些(Ҏ(gu)号中是该状态码对应的HTTP动词Q?/p>
200 OK - [GET]Q服务器成功q回用户h的数据,该操作是q等的(IdempotentQ?/li> 201 CREATED - [POST/PUT/PATCH]Q用h建或修改数据成功?/li> 202 Accepted - [*]Q表CZ个请求已l进入后台排队(异步dQ?/li> 204 NO CONTENT - [DELETE]Q用户删除数据成功?/li> 400 INVALID REQUEST - [POST/PUT/PATCH]Q用户发出的h有错误,服务器没有进行新建或修改数据的操作,该操作是q等的?/li> 401 Unauthorized - [*]Q表C用h有权限(令牌、用户名、密码错误)?/li> 403 Forbidden - [*] 表示用户得到授权Q与401错误相对Q,但是讉K是被止的?/li> 404 NOT FOUND - [*]Q用户发出的h针对的是不存在的记录Q服务器没有q行操作Q该操作是幂{的?/li> 406 Not Acceptable - [GET]Q用戯求的格式不可得(比如用户hJSON格式Q但是只有XML格式Q?/li> 410 Gone -[GET]Q用戯求的资源被永久删除,且不会再得到的?/li> 422 Unprocesable entity - [POST/PUT/PATCH] 当创Z个对象时Q发生一个验证错误?/li> 500 INTERNAL SERVER ERROR - [*]Q服务器发生错误Q用户将无法判断发出的请求是否成功?/li> 状态码的完全列表参?a target="_blank" style="margin: 0px; padding: 0px; list-style-type: none; border: none; color: #112233;">q里?/p>
八、错误处理(Error handlingQ?/h2> 如果状态码?xxQ就应该向用戯回出错信息。一般来_q回的信息中error作ؓ键名Q出错信息作为键值即可?/p>
{ error: "Invalid API key" }
?ji)、返回结?/h2> 针对不同操作Q服务器向用戯回的l果应该W合以下规范?/p>
GET /collectionQ返回资源对象的列表Q数l) GET /collection/resourceQ返回单个资源对?/li> POST /collectionQ返回新生成的资源对?/li> PUT /collection/resourceQ返回完整的资源对象 PATCH /collection/resourceQ返回完整的资源对象 DELETE /collection/resourceQ返回一个空文档 十、Hypermedia API RESTful API最好做到HypermediaQ即q回l果中提供链接,q向其他APIҎ(gu)Q得用户不查文档,也知道下一步应该做什么?/p>
比如Q当用户向api.example.com的根目录发出hQ会得到q样一个文档?/p>
{ "link" : { "rel" : "collection https://www.example.com/zoos " , "href" : "https://api.example.com/zoos " , "title" : "List of zoos" , "type" : "application/vnd.yourformat+json" } }
上面代码表示Q文档中有一个link属性,用户dq个属性就知道下一步该调用什么API了。rel表示q个API与当前网址的关p(collection关系Qƈl出该collection的网址Q,href表示API的\径,title表示API的标题,type表示q回cd?/p>
Hypermedia API的设计被UCؓHATEOAS 。Github的API是q种设计Q访?a target="_blank" style="margin: 0px; padding: 0px; list-style-type: none; border: none; color: #112233;">api.github.com会得C个所有可用API的网址列表?/p>
{ "current_user_url" : "https://api.github.com/user " , "authorizations_url" : "https://api.github.com/authorizations " , // ... }
从上面可以看刎ͼ如果惌取当前用L信息Q应该去讉Kapi.github.com/user Q然后就得到了下面结果?/p>
{ "message" : "Requires authentication" , "documentation_url" : "https://developer.github.com/v3 " }
上面代码表示Q服务器l出了提CZ息,以及文档的网址?/p>
十一、其?/h2> Q?QAPI的n份认证应该?a target="_blank" style="margin: 0px; padding: 0px; list-style-type: none; border: none; color: #112233;">OAuth 2.0框架?/p>
Q?Q服务器q回的数据格式,应该量使用JSONQ避免用XML?/p>
Q完Q?/p>
]]>WEB版的REST试工具 http://www.aygfsteel.com/paulwong/archive/2015/05/27/425327.htmlpaulwong paulwong Wed, 27 May 2015 06:12:00 GMT http://www.aygfsteel.com/paulwong/archive/2015/05/27/425327.html http://www.aygfsteel.com/paulwong/comments/425327.html http://www.aygfsteel.com/paulwong/archive/2015/05/27/425327.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/425327.html http://www.aygfsteel.com/paulwong/services/trackbacks/425327.html http://hackst.com/ http://www.quadrillian.com/ ]]>maven3 jetty jrebel 搭徏可调式的开发环?/title> http://www.aygfsteel.com/paulwong/archive/2015/05/10/424979.htmlpaulwong paulwong Sun, 10 May 2015 12:53:00 GMT http://www.aygfsteel.com/paulwong/archive/2015/05/10/424979.html http://www.aygfsteel.com/paulwong/comments/424979.html http://www.aygfsteel.com/paulwong/archive/2015/05/10/424979.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/424979.html http://www.aygfsteel.com/paulwong/services/trackbacks/424979.html http://my.oschina.net/edeis2012/blog/68831http://chen-rojer-gmail-com.iteye.com/blog/910748 ]]> 分布式配|管理^台Disconf http://www.aygfsteel.com/paulwong/archive/2015/04/13/424366.htmlpaulwong paulwong Mon, 13 Apr 2015 08:12:00 GMT http://www.aygfsteel.com/paulwong/archive/2015/04/13/424366.html http://www.aygfsteel.com/paulwong/comments/424366.html http://www.aygfsteel.com/paulwong/archive/2015/04/13/424366.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/424366.html http://www.aygfsteel.com/paulwong/services/trackbacks/424366.html http://www.oschina.net/p/disconfDisconf 可以为各U业务^台提供统一的配|管理服务?/p>
重要功能特点 注:配置Ҏ(gu)指某个类里的某个Field字段?/p>
Disconf的功能特Ҏ(gu)q图Q?/strong>
查看大图
其它功能特点 模块架构?/h2>
]]> JAVAEE资源 http://www.aygfsteel.com/paulwong/archive/2014/12/26/421859.htmlpaulwong paulwong Fri, 26 Dec 2014 08:29:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/12/26/421859.html http://www.aygfsteel.com/paulwong/comments/421859.html http://www.aygfsteel.com/paulwong/archive/2014/12/26/421859.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/421859.html http://www.aygfsteel.com/paulwong/services/trackbacks/421859.html
http://www.importnew.com/12408.html
Java EE + MongoDb with Apache TomEE and Jongo Starter Project
http://www.javacodegeeks.com/2014/09/java-ee-mongodb-with-apache-tomee-and-jongo-starter-project.html
From Spring to Java EE 6
http://www.javacodegeeks.com/2011/11/from-spring-to-java-ee-6.html
Java EE 7 and WebSocket API for Java (JSR 356) with AngularJS on WildFlyhttp://www.javacodegeeks.com/2014/01/java-ee-7-and-websocket-api-for-java-jsr-356-with-angularjs-on-wildfly.html lll ]]> 分布式调度QUARTZ+SPRING http://www.aygfsteel.com/paulwong/archive/2014/11/14/420104.htmlpaulwong paulwong Fri, 14 Nov 2014 10:46:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/11/14/420104.html http://www.aygfsteel.com/paulwong/comments/420104.html http://www.aygfsteel.com/paulwong/archive/2014/11/14/420104.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/420104.html http://www.aygfsteel.com/paulwong/services/trackbacks/420104.html 触发器:存放旉排程 dQ蔟业务代码 排程器:负责调度Q即在指定的旉执行对应的Q?br /> 如果是分布式QUARTZQ则各个节点会上报Q务,存到数据库中Q执行时会从数据库中取出触发器来执行Q如果触发器的名U和执行旉相同Q则只有一个节点去执行此Q务?br />如果此节Ҏ(gu)行失败,则此d则会被分zֈ另一节点执行?br />quartz.properties
# ============================================================================ # Configure JobStore # Using Spring datasource in quartzJobsConfig.xml # Spring uses LocalDataSourceJobStore extension of JobStoreCMT #============================================================================ org.quartz.jobStore.useProperties=true org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 5000 org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.txIsolationLevelReadCommitted = true # Change this to match your DB vendor org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate # ============================================================================ # Configure Main Scheduler Properties # Needed to manage cluster instances #============================================================================ org.quartz.scheduler.instanceId=AUTO org.quartz.scheduler.instanceName=MY_CLUSTERED_JOB_SCHEDULER org.quartz.scheduler.rmi.export = false org.quartz.scheduler.rmi.proxy = false# ============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 10 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
web-schedule-applicationcontext.xml
<? xml version="1.0" encoding="UTF-8" ?> < beans xmlns ="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context ="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" > <!-- 增加定时器配|?nbsp; --> <!-- U程执行器配|,用于d注册 --> < bean id ="executor" class ="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" > < property name ="corePoolSize" value ="10" /> < property name ="maxPoolSize" value ="100" /> < property name ="queueCapacity" value ="500" /> </ bean > <!-- 讄调度 --> < bean id ="webScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" > < property name ="configLocation" value ="classpath:/properties/config/quartz.properties" /> < property name ="dataSource" ref ="dataSourceCMS" /> < property name ="transactionManager" ref ="txManager" /> <!-- This name is persisted as SCHED_NAME in db. for local testing could change to unique name to avoid collision with dev server --> < property name ="schedulerName" value ="quartzScheduler" /> <!-- Will update database cron triggers to what is in this jobs file on each deploy. Replaces all previous trigger and job data that was in the database. YMMV --> < property name ="overwriteExistingJobs" value ="true" /> < property name ="startupDelay" value ="5" /> < property name ="applicationContextSchedulerContextKey" value ="applicationContext" /> < property name ="jobFactory" > < bean class ="com.tcl.project7.boss.common.scheduling.AutowiringSpringBeanJobFactory" /> </ property > < property name ="triggers" > < list > < ref bean ="springQuertzClusterTaskSchedulerTesterTigger" /> </ list > </ property > < property name ="jobDetails" > < list > < ref bean ="springQuertzClusterTaskSchedulerTesterJobDetail" /> </ list > </ property > < property name ="taskExecutor" ref ="executor" /> </ bean > <!-- 触发?nbsp; --> < bean id ="springQuertzClusterTaskSchedulerTesterTigger" class ="common.scheduling.PersistableCronTriggerFactoryBean" > < property name ="jobDetail" ref ="springQuertzClusterTaskSchedulerTesterJobDetail" /> < property name ="cronExpression" value ="* * * * * ?" /> </ bean > < bean id ="springQuertzClusterTaskSchedulerTesterJobDetail" class ="org.springframework.scheduling.quartz.JobDetailBean" > < property name ="jobClass" value ="common.scheduling.SpringQuertzClusterTaskSchedulerTester" /> <!-- fail-over 重写执行p|的Q?default=false --> < property name ="requestsRecovery" value ="false" /> </ bean > </ beans >
JOB文gQSpringQuertzClusterTaskSchedulerTester.javapackage common.scheduling;import java.util.Date;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.quartz.QuartzJobBean;import com.tcl.project7.boss.common.util.UrlUtil;import com.tcl.project7.boss.common.util.time.TimeUtils;/** * <p>Title:SpringQuertzClusterTaskSchedulerTester</p> * <p>Description: * 应ؓ要持久化{特性操?需要?nbsp;QuartzJobBean * <br>׃要被持久?所以不能存放xxxxManagercM对象, * 只能从每ơ从QuartzJobBean注入的ApplicationContext 中去取出 * * </p> * * */ public class SpringQuertzClusterTaskSchedulerTester extends QuartzJobBean { private static Logger logger = LoggerFactory.getLogger(SpringQuertzClusterTaskSchedulerTester.class ); @Autowired private UrlUtil urlUtil; protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { logger.info("------" + TimeUtils.formatTime(new Date()) + "------" + urlUtil.getNginxHost()); System.out.println("------" + TimeUtils.formatTime(new Date()) + "------" + urlUtil.getNginxHost()); } }
如果JOB中有需要调用SPRING的BEANQ则需要此文gAutowiringSpringBeanJobFactory.javapackage common.scheduling;import org.quartz.spi.TriggerFiredBundle;import org.springframework.beans.factory.config.AutowireCapableBeanFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.scheduling.quartz.SpringBeanJobFactory;/** * Autowire Quartz Jobs with Spring context dependencies * @see http://stackoverflow.com/questions/6990767/inject-bean-reference-into-a-quartz-job-in-spring/15211030 #15211030 */ public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private transient AutowireCapableBeanFactory beanFactory; public void setApplicationContext(final ApplicationContext context) { beanFactory = context.getAutowireCapableBeanFactory(); } @Override protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception { final Object job = super .createJobInstance(bundle); beanFactory.autowireBean(job); return job; } }
׃JOB需要存储到数据库中Q会产生PROPERTY的问题,需剔除JOB-DATAQ需此文件PersistableCronTriggerFactoryBean.javapackage common.scheduling;import org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.JobDetailAwareTrigger;/** * Needed to set Quartz useProperties=true when using Spring classes, * because Spring sets an object reference on JobDataMap that is not a String * * @see http://site.trimplement.com/using-spring-and-quartz-with-jobstore-properties/ * @see http://forum.springsource.org/showthread.php?130984-Quartz-error-IOException */ public class PersistableCronTriggerFactoryBean extends CronTriggerFactoryBean { @Override public void afterPropertiesSet() { super .afterPropertiesSet(); // Remove the JobDetail element getJobDataMap().remove(JobDetailAwareTrigger.JOB_DETAIL_KEY); } }
语句QMYSQLQquartzTables.sql# # Quartz seems to work best with the driver mm.mysql- 2.0 .7 - bin.jar # # In your Quartz properties file , you' ll need to set # org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate # DROP TABLE IF EXISTS QRTZ_JOB_LISTENERS; DROP TABLE IF EXISTS QRTZ_TRIGGER_LISTENERS; DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; DROP TABLE IF EXISTS QRTZ_LOCKS; DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; DROP TABLE IF EXISTS QRTZ_TRIGGERS; DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; DROP TABLE IF EXISTS QRTZ_CALENDARS; CREATE TABLE QRTZ_JOB_DETAILS ( JOB_NAME VARCHAR(200) NOT NULL, JOB_GROUP VARCHAR(200) NOT NULL, DESCRIPTION VARCHAR(250) NULL, JOB_CLASS_NAME VARCHAR(250) NOT NULL, IS_DURABLE VARCHAR(1) NOT NULL, IS_VOLATILE VARCHAR(1) NOT NULL, IS_STATEFUL VARCHAR(1) NOT NULL, REQUESTS_RECOVERY VARCHAR(1) NOT NULL, JOB_DATA BLOB NULL, PRIMARY KEY (JOB_NAME,JOB_GROUP) ); CREATE TABLE QRTZ_JOB_LISTENERS ( JOB_NAME VARCHAR(200) NOT NULL, JOB_GROUP VARCHAR(200) NOT NULL, JOB_LISTENER VARCHAR(200) NOT NULL, PRIMARY KEY (JOB_NAME,JOB_GROUP,JOB_LISTENER), FOREIGN KEY (JOB_NAME,JOB_GROUP) REFERENCES QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP) ); CREATE TABLE QRTZ_TRIGGERS ( TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, JOB_NAME VARCHAR(200) NOT NULL, JOB_GROUP VARCHAR(200) NOT NULL, IS_VOLATILE VARCHAR(1) NOT NULL, DESCRIPTION VARCHAR(250) NULL, NEXT_FIRE_TIME BIGINT(13) NULL, PREV_FIRE_TIME BIGINT(13) NULL, PRIORITY INTEGER NULL, TRIGGER_STATE VARCHAR(16) NOT NULL, TRIGGER_TYPE VARCHAR(8) NOT NULL, START_TIME BIGINT(13) NOT NULL, END_TIME BIGINT(13) NULL, CALENDAR_NAME VARCHAR(200) NULL, MISFIRE_INSTR SMALLINT(2) NULL, JOB_DATA BLOB NULL, PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (JOB_NAME,JOB_GROUP) REFERENCES QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP) ); CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, REPEAT_COUNT BIGINT(7) NOT NULL, REPEAT_INTERVAL BIGINT(12) NOT NULL, TIMES_TRIGGERED BIGINT(10) NOT NULL, PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP) ); CREATE TABLE QRTZ_CRON_TRIGGERS ( TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, CRON_EXPRESSION VARCHAR(200) NOT NULL, TIME_ZONE_ID VARCHAR(80), PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP) ); CREATE TABLE QRTZ_BLOB_TRIGGERS ( TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, BLOB_DATA BLOB NULL, PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP) ); CREATE TABLE QRTZ_TRIGGER_LISTENERS ( TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, TRIGGER_LISTENER VARCHAR(200) NOT NULL, PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_LISTENER), FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP) ); CREATE TABLE QRTZ_CALENDARS ( CALENDAR_NAME VARCHAR(200) NOT NULL, CALENDAR BLOB NOT NULL, PRIMARY KEY (CALENDAR_NAME) ); CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( TRIGGER_GROUP VARCHAR(200) NOT NULL, PRIMARY KEY (TRIGGER_GROUP) ); CREATE TABLE QRTZ_FIRED_TRIGGERS ( ENTRY_ID VARCHAR(95) NOT NULL, TRIGGER_NAME VARCHAR(200) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, IS_VOLATILE VARCHAR(1) NOT NULL, INSTANCE_NAME VARCHAR(200) NOT NULL, FIRED_TIME BIGINT(13) NOT NULL, PRIORITY INTEGER NOT NULL, STATE VARCHAR(16) NOT NULL, JOB_NAME VARCHAR(200) NULL, JOB_GROUP VARCHAR(200) NULL, IS_STATEFUL VARCHAR(1) NULL, REQUESTS_RECOVERY VARCHAR(1) NULL, PRIMARY KEY (ENTRY_ID) ); CREATE TABLE QRTZ_SCHEDULER_STATE ( INSTANCE_NAME VARCHAR(200) NOT NULL, LAST_CHECKIN_TIME BIGINT(13) NOT NULL, CHECKIN_INTERVAL BIGINT(13) NOT NULL, PRIMARY KEY (INSTANCE_NAME) ); CREATE TABLE QRTZ_LOCKS ( LOCK_NAME VARCHAR(40) NOT NULL, PRIMARY KEY (LOCK_NAME) ); INSERT INTO QRTZ_LOCKS values( ' TRIGGER_ACCESS' ); INSERT INTO QRTZ_LOCKS values( ' JOB_ACCESS' ); INSERT INTO QRTZ_LOCKS values( ' CALENDAR_ACCESS' ); INSERT INTO QRTZ_LOCKS values( ' STATE_ACCESS' ); INSERT INTO QRTZ_LOCKS values( ' MISFIRE_ACCESS' ); commit;
参考:http://wenku.baidu.com/view/82e3bcbdfd0a79563c1e7223.html Quartz集成springMVC 的方案二Q持久化d、集和分布式)http://blog.csdn.net/congcong68/article/details/39256307 ]]> Spring对HttpSession的重新封?/title> http://www.aygfsteel.com/paulwong/archive/2014/08/19/417090.htmlpaulwong paulwong Tue, 19 Aug 2014 01:13:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/08/19/417090.html http://www.aygfsteel.com/paulwong/comments/417090.html http://www.aygfsteel.com/paulwong/archive/2014/08/19/417090.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/417090.html http://www.aygfsteel.com/paulwong/services/trackbacks/417090.html https://github.com/spring-projects/spring-session/tree/master/samples ]]> 转(探讨分布式系l与集群的区别) http://www.aygfsteel.com/paulwong/archive/2014/05/23/414022.htmlpaulwong paulwong Fri, 23 May 2014 05:27:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/05/23/414022.html http://www.aygfsteel.com/paulwong/comments/414022.html http://www.aygfsteel.com/paulwong/archive/2014/05/23/414022.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/414022.html http://www.aygfsteel.com/paulwong/services/trackbacks/414022.html 单说Q分布式是以~短单个d的执行时间来提升效率的,而集则是通过提高单位旉内执行的d数来提升效率?/p> 例如Q如果一个Q务由10个子dl成Q每个子d单独执行需1时Q则在一?a target="_blank" rel="nofollow" style="padding: 0px; margin: 0px; color: #ff8373; outline: 0px; font-size: 12px;">服务?/a>上执行改d需10时?/p>
采用分布式方案,提供10?a target="_blank" rel="nofollow" style="padding: 0px; margin: 0px; color: #ff8373; outline: 0px; font-size: 12px;">服务?/a>Q每台服务器只负责处理一个子dQ不考虑子Q务间的依赖关p,执行完这个Q务只需一个小时?/p>
而采用集方案,同样提供10台服务器Q每台服务器都能独立处理q个d。假设有10个Q务同时到达,10个服务器同时工作,10后Q?0个Q务同时完成,q样Q整w来看,q是1时内完成一个Q?
集群概念
1. 两大关键Ҏ(gu)?/strong>
集群是一l协同工作的服务实体Q用以提供比单一服务实体更具扩展性与可用性的服务q_。在客户端看来,一个集就象是一个服务实体,但事实上集群׃l服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:
· 可扩展?- 集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集,从而增强集的性能?/p>
· 高可用?- ?通过服务实体冗余使客L免于L遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了Q另一个服务实体会接管p|的服务实体。集提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性?/p>
2. 两大能力
Zh可扩展性和高可用性特点,集群的必d备以下两大能力:
· 负蝲均衡 -- 负蝲均衡 能把d比较均衡地分布到集群环境下的计算和网l资源?/p>
· 错误恢复-- ׃某种原因Q执行某个Q务的资源出现故障Q另一服务实体中执行同一d的资源接着完成d。这U由于一个实体中的资源不能工作,另一个实体中的资源透明的l完成Q务的q程叫错误恢复?/p>
负蝲均衡和错误恢复都要求各服务实体中有执行同一d的资源存在,而且对于同一d的各个资源来_执行d所需的信息视?信息上下?必须是一L?/p>
3. 两大技?/strong>
实现集群务必要有以下两大技术:
· 集群地址-- ?由多个服务实体l成Q集客L通过讉K集群的集地址获取集群内部各服务实体的功能。具有单一集群地址(也叫单一影像)是集的一个基 本特征。维护集地址的设|被UCؓ负蝲均衡器。负载均衡器内部负责理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的{换。有的负载均 衡器实现真正的负载均衡算法,有的只支持Q务的转换。只实现d转换的负载均衡器适用于支持ACTIVE-STANDBY的集环境,在那里,集群中只?一个服务实体工作,当正在工作的服务实体发生故障Ӟ负蝲均衡器把后来的Q务{向另外一个服务实体?/p>
· 内部通信-- Z能协同工作、实现负载均衡和错误恢复Q集各实体间必L帔R信Q比如负载均衡器Ҏ(gu)务实体心x试信息、服务实体间d执行上下文信息的通信?/p>
h同一个集地址使得客户端能讉K集群提供的计服务,一个集地址下隐藏了各个服务实体的内部地址Q得客戯求的计算服务能在各个服务实体之间分布。内部通信是集能正常q{的基Q它使得集群h均衡负蝲和错误恢复的能力?/p>
集群分类
Linux集群主要分成三大c? 高可用集, 负蝲均衡集群Q科学计集?Q高可用集群( High Availability Cluster)Q负载均衡集?Load Balance Cluster)Q科学计集?High Performance Computing Cluster)
具体包括Q?/p>
Linux High Availability 高可用集:普通两节点双机热备Q多节点HA集群QRAC, shared, share-nothing集群{;Linux Load Balance 负蝲均衡集群QLVS{?...QLinux High Performance Computing 高性能U学计算集群QBeowulf c集?...Q分布式存储Q其他类linux集群Q如Openmosix, rendering farm {?.
详细介绍
1. 高可用集?High Availability Cluster)
常见的就?个节点做成的HA集群Q有很多通俗的不U学的名Uͼ比如"双机热备", "双机互备", "双机".
高可用集解决的是保障用L应用E序持箋对外提供服务的能力?(h意高可用集群既不是用来保护业务数据的Q保护的是用L业务E序对外不间断提供服务,把因软g/g/Zؓ造成的故障对业务的媄响降低到最程??/p>
2. 负蝲均衡集群(Load Balance Cluster)
负蝲均衡pȝQ集中所有的节点都处于活动状态,它们分摊pȝ的工作负载。一般Web服务器集、数据库集群和应用服务器集群都属于这U类型?/p>
负蝲均衡集群一般用于相应网l请求的|页服务器,数据库服务器。这U集可以在接到hӞ查接受请求较?yu),不繁忙的服务器,q把h转到q些服务器上。从查其他服务器状态这一点上看,负蝲均衡和容错集很接近Q不同之处是数量上更多?/p>
3. U学计算集群(High Performance Computing Cluster)
高性能计算(High Perfermance Computing)集群Q简UHPC集群。这c集致力于提供单个计算机所不能提供的强大的计算能力?/p>
高性能计算分类
高吞吐计?High-throughput Computing)
有一c高性能计算Q可以把它分成若q可以ƈ行的子Q务,而且各个子Q务彼此间没有什么关联。象在家搜寻外星? SETI@HOME -- Search for Extraterrestrial Intelligence at Home )是q一cd应用。这一目是利用Internet上的闲置的计资源来搜寻外星人。SETI目的服务器一l数据和数据模式发给Internet?参加SETI的计节点,计算节点在给定的数据上用l定的模式进行搜索,然后搜索的l果发给服务器。服务器负责从各个计算节点q回的数据汇集成完整?数据。因U类型应用的一个共同特征是在v量数据上搜烦某些模式Q所以把q类计算UCؓ高吞吐计。所谓的Internet计算都属于这一cR按?Flynn的分c,高吞吐计属于SIMD(Single Instruction/Multiple Data)的范畴?/p>
分布计算(Distributed Computing)
另一c计刚好和高吞吐计相反,它们虽然可以l分成若qƈ行的子Q务,但是子Q务间联系很紧密,需要大量的数据交换。按照Flynn的分c,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴?/p>
4. 分布?集群)与集的联系与区?/strong>
分布式是指将不同的业务分布在不同的地斏V而集指的是几台服务器集中在一P实现同一业务。分布式中的每一个节点,都可以做集群。而集ƈ不一定就是分布式的?/p>
举例Q就比如新浪|,讉K的h多了Q他可以做一个群集,前面放一个响应服务器Q后面几台服务器完成同一业务Q如果有业务讉K的时候,响应服务器看哪台服务器的负蝲不是很重Q就给哪一台去完成?/p>
而分布式Q从H意上理解,也跟集群差不多, 但是它的l织比较松散Q不像集,有一个组l性,一台服务器垮了Q其它的服务器可以顶上来?/p>
分布式的每一个节点,都完成不同的业务Q一个节点垮了,哪这个业务就不可讉K了?/p>
]]> 整合试 http://www.aygfsteel.com/paulwong/archive/2014/04/20/412701.htmlpaulwong paulwong Sun, 20 Apr 2014 02:33:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/04/20/412701.html http://www.aygfsteel.com/paulwong/comments/412701.html http://www.aygfsteel.com/paulwong/archive/2014/04/20/412701.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/412701.html http://www.aygfsteel.com/paulwong/services/trackbacks/412701.html http://arquillian.org/guides/getting_started_zh_cn/
]]> Java EE 应用开发^?Koala http://www.aygfsteel.com/paulwong/archive/2014/04/17/412553.htmlpaulwong paulwong Thu, 17 Apr 2014 01:18:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/04/17/412553.html http://www.aygfsteel.com/paulwong/comments/412553.html http://www.aygfsteel.com/paulwong/archive/2014/04/17/412553.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/412553.html http://www.aygfsteel.com/paulwong/services/trackbacks/412553.html Koala (考拉) 是一Ƒֺ用在 Java EE 企业U应用开发领域,用于帮助架构师简化系l设计,降低框架耦合度,提高pȝ灉|性,提供开发工E师工作效率Q降低成本的q_工具?/p>
Z么?KoalaQ?/p>
开源免费的开发^収ͼ允许你Q意修Ҏ(gu)码ƈ扩展功能
以DDD领域驱动思想为核心,抛弃传统的以数据库ؓ中心的四层编码模?/li>
丰富的基lg支持Q包括:国际化、异常、缓存等
向导式的搭徏目q程Q支持各U技术选择QJPA,Mybstis,SpringMVC,struts2MVC{?/li>
向导式的数据库到实体的生成过E?/li>
向导式的实体生成CURD功能
向导式的服务发布一键无~发布成war、EJB、webservice(SOAP/REST) 多种服务形式
ZRBAC3模型的权限子pȝ
监控子系l轻村֍助你监控URL,Ҏ(gu)Q数据库Q内存等状?/li>
使用通用查询子系l轻村֮制完成查询功?/li>
ZIPqoQ用户名验证及方法权限控制的WS安全子系l?/li>
ZJBPM5 的流E子pȝ
]]> javaee7-samples http://www.aygfsteel.com/paulwong/archive/2014/04/06/411982.htmlpaulwong paulwong Sun, 06 Apr 2014 00:33:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/04/06/411982.html http://www.aygfsteel.com/paulwong/comments/411982.html http://www.aygfsteel.com/paulwong/archive/2014/04/06/411982.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/411982.html http://www.aygfsteel.com/paulwong/services/trackbacks/411982.html http://git.oschina.net/ld/javaee7-samples ]]> 也谈ZWeb的含工作项目的一般开发流E?? http://www.aygfsteel.com/paulwong/archive/2014/04/04/411925.htmlpaulwong paulwong Fri, 04 Apr 2014 00:23:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/04/04/411925.html http://www.aygfsteel.com/paulwong/comments/411925.html http://www.aygfsteel.com/paulwong/archive/2014/04/04/411925.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/411925.html http://www.aygfsteel.com/paulwong/services/trackbacks/411925.html
该项目包含的通用模块代码{我有时间一q剥A献出来(ZWebSocket的通知引擎Q工作流整合模块Q自定义表单Q?a target="_blank" style="color: #1d58d1; text-decoration: none; ">详见q里Q,ZRBAC权限设计Q,最q太忙了QWeb目有一D|间没ͼ有点生疏的感觉,主要在忙GQT目Q一套基于桌面开发的框架Q?a target="_blank" style="color: #1d58d1; text-decoration: none; ">详见q里Q写代码写的有点手酸的感觉?
ZWeb的含工作的目看v来ƈ不如惌的那么简单,主要需求:
灉|定制工作,q跟t流E进度;
每个Order含有历史轨迹记录Q可在历史中查看Q?/span>
工作的Action灉|Q认领Q务不一定非要先提取表单Q因为很多节炚w只有几个动作Q直接按钮操作即可;
待办事宜列表在不h面情况下也能变动;
目要求Q?/span>
操作单高效;
权限l节到按钮别;
q发数少Q不过3000个在U用P
主要可能使用到技术:
工作引擎,我这里选用Activiti5Q很灉|好用Q?/span>
权限使用Spring SecurityQ基于标{ּ理权限很方便;
通知引擎使用WebSocketQ基于Flash实时通信Q基于socket.ioQ?/span>
权限_度Zl典的RBACQ?/span>
M框架Spring MVC+MybatisQ?/span>
实现的WebSocket的M思\Q?/span>
WebSocket Server独立于Web目QWeb Server与WebSocket Server之间的局域网通信Z单的Socket通信Q这栯个组件可以完全解耦和通用Q?/span>
当Web目要Push消息到ClientӞ通过Web Server的Socket Client向WebSocket Server的Socker Server发送消息,然后WebSocket Server收到消息后解码,q播到所有浏览器Q?/span>
我们实现的事仉知非常单,讑֮全局变量q让览器侦听:
var G_WebSocket=false;
var EVENT_ORDER_CHANGE_STATUS = "orderChange";
var EVENT_ORDER_CHANGE_AMOUNT = "amountChange";
var EVENT_ORDER_CHANGE_REFUND = "refundChange";
WebSocket.init = function(callbackFunc){
socket = io.connect(connUrl, connOptions);
socket.on('connect', function() {
G_WebSocket=true;
callbackFunc("connect",null);
});
socket.on('disconnect', function() {
G_WebSocket=false;
callbackFunc("disconnect",null);
});
socket.on('clientQuit', function(obj){
G_WebSocket=false;
callbackFunc("clientQuit",obj);
});
socket.on('broadcast', function(obj) {
callbackFunc("broadcast",obj);
});
};
在需要侦听WebSocket接受Web Server推送消息的地方加上一个函数即可:
WebSocket.init(function(command,jsonObj){
if(command=="broadcast"){
if(jsonObj.e == EVENT_ORDER_CHANGE_STATUS){
//TODO:write your code here
}else if(jsonObj.e == EVENT_ORDER_CHANGE_AMOUNT){
//TODO:write your code here
}else if(jsonObj.e == EVENT_ORDER_CHANGE_REFUND){
//TODO:write your code here
}
}
});
q样的结构要扩展推送服务很单,比如按频道推送等Q都可以很容易的扩展?/span>
再看看看工作,我们实现了activiti通用的申h交Q务流E和自定义表单功能,提取跟踪程囑֊能等Q这样你要设计一个新程也变得非常简单,只需要在eclipse里划上工作流图,在后台发布,然后通过SpringMVC的RestAPI启动实例程Q申领完成Q务等Q如下图Q?/span>
程走到了分支的两个节点上,q样对后l新增的工作提供了极大的遍历?/span>
最后说说Spring SecurityQ基于RBAC的权限体pL建好后(可以用在M理pȝ中)Q要在页面中讉K一个资源,首先判断一下是否有权限Q如下HTMLQ?/span>
<sec:authorize ifAllGranted="r_pd">
<a href="#">resource access here</a>
</sec:authorize>
<sec:authorize url="/XXX/XXX/XXX.html">
<a href="XXX/XXX/XXX.html'">
<span>XXX功能</span>
</a>
</sec:authorize>
前台׃目比较?yu),没有用到js的MVC框架Q如backbone{,q里׃再记录了?/span>
]]> LOGBACK TUTORIA http://www.aygfsteel.com/paulwong/archive/2014/04/03/411871.htmlpaulwong paulwong Thu, 03 Apr 2014 00:10:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/04/03/411871.html http://www.aygfsteel.com/paulwong/comments/411871.html http://www.aygfsteel.com/paulwong/archive/2014/04/03/411871.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/411871.html http://www.aygfsteel.com/paulwong/services/trackbacks/411871.html https://github.com/abdulwaheed18/Slf4jTutorial
< configuration >
< appender name ="STDOUT" class ="ch.qos.logback.core.ConsoleAppender" >
< encoder class ="ch.qos.logback.classic.encoder.PatternLayoutEncoder" >
< Pattern > %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</ Pattern >
</ encoder >
</ appender >
< appender name ="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender" >
< file > testFile7.log</ file >
< rollingPolicy class ="ch.qos.logback.core.rolling.TimeBasedRollingPolicy" >
<!-- daily rollover
Once any of the below condition met, it will change the file name as below and compressed it. -->
< fileNamePattern > logFile.%d{yyyy-MM-dd}.%i.log.zip
</ fileNamePattern >
<!-- keep 30 days' worth of history -->
< maxHistory > 30</ maxHistory >
<!-- or whenever the file size reaches 10MB -->
< timeBasedFileNamingAndTriggeringPolicy
class ="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP" >
< maxFileSize > 10MB</ maxFileSize >
</ timeBasedFileNamingAndTriggeringPolicy >
</ rollingPolicy >
< encoder >
< pattern > %-4relative [%thread] %-5level %logger{35} - %msg%n
</ pattern >
</ encoder >
</ appender >
< root level ="INFO" >
< appender-ref ref ="STDOUT" />
< appender-ref ref ="FILE" />
</ root >
</ configuration >
]]> 如何在WEB应用中绑定微信公众帐?/title> http://www.aygfsteel.com/paulwong/archive/2014/04/01/411767.htmlpaulwong paulwong Tue, 01 Apr 2014 00:41:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/04/01/411767.html http://www.aygfsteel.com/paulwong/comments/411767.html http://www.aygfsteel.com/paulwong/archive/2014/04/01/411767.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/411767.html http://www.aygfsteel.com/paulwong/services/trackbacks/411767.html http://www.chanzhi.org/book/weixin.html
]]> weather API 攉整理 http://www.aygfsteel.com/paulwong/archive/2014/01/14/408906.htmlpaulwong paulwong Tue, 14 Jan 2014 02:54:00 GMT http://www.aygfsteel.com/paulwong/archive/2014/01/14/408906.html http://www.aygfsteel.com/paulwong/comments/408906.html http://www.aygfsteel.com/paulwong/archive/2014/01/14/408906.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/408906.html http://www.aygfsteel.com/paulwong/services/trackbacks/408906.html 腾讯
http://sou.qq.com/online/get_weather.php?callback=Weather&city=南京
中国天气-weather.com.cn
http://geoip.weather.com.cn/g/ (Ҏ(gu)IP查询城市ID)
http://m.weather.com.cn/data/101110101.html Q六天预报)
http://www.weather.com.cn/data/sk/101110101.html Q实时天气信息)
google
http://www.google.com/ig/api?weather=Beijing
设计蜂l(f)
http://www.hujuntao.com/api/weather/api.php?city=南京
MSN
http://weather.msn.com/data.aspx?wealocations=wc:CHXX0008&weadegreetype=C
YAHOO
http://xml.weather.yahoo.com/forecastrss?p=CHXX0008&u=f
http://weather.yahooapis.com/forecastrss?w=2459115&u=f
ThinkPage(收费)
http://www.thinkpage.cn/weather/api.svc/getWeather?city=101010100&language=zh-chs&provider=cma&unit=c&key=
有道
http://www.youdao.com/smartresult-xml/search.s?type=weather&jsFlag=true&q=南京
360
http://cdn.weather.hao.360.cn/api_weather_info.php?app=hao360&_jsonp=smartloaddata101190101&code=101190101
搜狗
http://123.sogou.com/get123.php?block=wt&ver=v32&city=CN110100
1616
http://weather.1616.net/grab/weather/%25E5%258C%2597%25E4%25BA%25AC.js
毒霸
http://123.duba.net/weatherinfo/
?23
http://weather.tao123.com/static/weather/weather_json.php?cb=callback
114?/strong>
http://weather.api.114la.com/1901/101190101.txt
2345
http://tianqi.2345.com/t/detect2009v2.php
hao123
http://app.hao123.com/weather/forecast.php
其它
http://weather.all2rss.com/weatherrss.asp?City=%C4%CF%BE%A9
]]>JAX-RS资源 http://www.aygfsteel.com/paulwong/archive/2013/11/27/406879.htmlpaulwong paulwong Wed, 27 Nov 2013 04:03:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/11/27/406879.html http://www.aygfsteel.com/paulwong/comments/406879.html http://www.aygfsteel.com/paulwong/archive/2013/11/27/406879.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/406879.html http://www.aygfsteel.com/paulwong/services/trackbacks/406879.html
Jersey 2.4.1 User Guide
https://jersey.java.net/documentation/latest/index.html
The Java EE 6 Tutorial
http://docs.oracle.com/javaee/6/tutorial/doc/gkoib.html
ZJAXB注释的JSON与JAVA BEAN的互?/div>
]]>
微信公众q_开发资?/title> http://www.aygfsteel.com/paulwong/archive/2013/11/25/406817.htmlpaulwong paulwong Mon, 25 Nov 2013 14:00:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/11/25/406817.html http://www.aygfsteel.com/paulwong/comments/406817.html http://www.aygfsteel.com/paulwong/archive/2013/11/25/406817.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/406817.html http://www.aygfsteel.com/paulwong/services/trackbacks/406817.html 【微信公众^台改版后】Java模拟d微信q_,d推送消息给用户
http://50vip.com/blog.php?i=349
微信公众账号开?br />
http://my.oschina.net/ywooer/blog?catalog=419479 ]]> ZspringMVC+springSecurity3.x+Mybaits3.x的权限系l?/title> http://www.aygfsteel.com/paulwong/archive/2013/11/24/406757.htmlpaulwong paulwong Sun, 24 Nov 2013 12:54:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/11/24/406757.html http://www.aygfsteel.com/paulwong/comments/406757.html http://www.aygfsteel.com/paulwong/archive/2013/11/24/406757.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/406757.html http://www.aygfsteel.com/paulwong/services/trackbacks/406757.html https://github.com/lanyuancom/lanyuan
@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); ]]> 大型|站技术架构读书笔?/title> http://www.aygfsteel.com/paulwong/archive/2013/11/09/406160.htmlpaulwong paulwong Sat, 09 Nov 2013 03:34:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/11/09/406160.html http://www.aygfsteel.com/paulwong/comments/406160.html http://www.aygfsteel.com/paulwong/archive/2013/11/09/406160.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/406160.html http://www.aygfsteel.com/paulwong/services/trackbacks/406160.html 应用服务器、数据库服务器和文g服务器都安装在同一C?/li> 应用服务器、数据库服务器和文g服务器分别安装在不同L 增加了分布式的缓存服务器 应用服务器增加了好几収ͼ变成集群 增加了CDN和反代理服务器 数据库服务器变成M形式的服务器 数据库服务器变成分布式的服务器,文g服务器也变成分布式服务器 NOSQL分布式数据库和搜索引擎的引入 应用服务器虽然是多台Q但都是部v了同一应用Q这时将应用拆分Q每台服务器部v不同的拆分应?/li> 虽然应用已经拆分Q但每个应用都是从页面管到数据库Q这时l拆分,存取数据库的部份独立,面部䆾 也独?/li> 架构模式分层Q代码放在不同的cM 分割Q应用放在不同的JVM?/li> 分布式,部v在不同的物理?/li> 集群Q同一个应用部|到不同的主机,可以负蝲均衡 ~存QCND加速、反向代理、本地缓存、分布式~存 异步Q消除高q发 冗余Q多处备?/li> 安全?/li> ]]> Java EE 8愿望清单Q缺这些,Java EE不会完?/title> http://www.aygfsteel.com/paulwong/archive/2013/11/09/406156.htmlpaulwong paulwong Sat, 09 Nov 2013 03:14:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/11/09/406156.html http://www.aygfsteel.com/paulwong/comments/406156.html http://www.aygfsteel.com/paulwong/archive/2013/11/09/406156.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/406156.html http://www.aygfsteel.com/paulwong/services/trackbacks/406156.html 摘要Q?/strong>Java EE 7已于6月中旬正式发布,管新^台包含了诸多新的Ҏ(gu),但是开发者对此似乎ƈ不满I他们期待未来的版本Java EE 8中能够包含更完善的特性,比如更大的CDI应用范围、标准的~存API、现代化的安全框架等?/div> ]]> OAUTH 2.0资源 http://www.aygfsteel.com/paulwong/archive/2013/10/24/405595.htmlpaulwong paulwong Thu, 24 Oct 2013 03:27:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/10/24/405595.html http://www.aygfsteel.com/paulwong/comments/405595.html http://www.aygfsteel.com/paulwong/archive/2013/10/24/405595.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/405595.html http://www.aygfsteel.com/paulwong/services/trackbacks/405595.html http://wenku.baidu.com/view/0c80c91bb7360b4c2e3f647c.html
OAuth 2.0 Tutorial
http://tutorials.jenkov.com/oauth2/index.html
New JavaScript SDK & OAuth 2.0 based FBConnect Tutorial
http://thinkdiff.net/facebook/new-javascript-sdk-oauth-2-0-based-fbconnect-tutorial/
Twitter OAuth
http://robfig.github.io/revel/samples/twitter-oauth.html
]]> 启用TOMCAT的SSL http://www.aygfsteel.com/paulwong/archive/2013/10/14/404941.htmlpaulwong paulwong Mon, 14 Oct 2013 00:02:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/10/14/404941.html http://www.aygfsteel.com/paulwong/comments/404941.html http://www.aygfsteel.com/paulwong/archive/2013/10/14/404941.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/404941.html http://www.aygfsteel.com/paulwong/services/trackbacks/404941.html 基本步骤Q?br /> 使用 java 创徏一?keystore 文g 配置 Tomcat 以用该 keystore 文g 试 配置应用以便使用 SSL Q例?https://localhost:8443/yourApp 1. 创徏 keystore 文g 执行 keytool -genkey -alias tomcat -keyalg RSA l果如下loiane:bin loiane$ keytool -genkey -alias tomcat -keyalg RSA Enter keystore password: password Re-enter new password: password What is your first and last name? [ Unknown ] : Loiane Groner What is the name of your organizational unit? [ Unknown ] : home What is the name of your organization? [ Unknown ] : home What is the name of your City or Locality? [ Unknown ] : Sao Paulo What is the name of your State or Province? [ Unknown ] : SP What is the two-letter country code for this unit? [ Unknown ] : BR Is CN=Loiane Groner, OU=home, O=home, L=Sao Paulo, ST=SP, C=BR correct? [ no ] : y Enter key password for (RETURN if same as keystore password): password Re-enter new password: password
q样在用户的主目录下创Z一?.keystore 文g 2. 配置 Tomcat 以?keystore 文g 打开 server.xml 扑ֈ下面被注释的q段<!-- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />-->
q掉注释Qƈ内Ҏ(gu)?br />< Connector SSLEnabled ="true" acceptCount ="100" clientAuth ="false" disableUploadTimeout="true" enableLookups ="false" maxThreads ="25" port="8443" keystoreFile ="/Users/loiane/.keystore" keystorePass ="password" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme ="https" secure="true" sslProtocol ="TLS" />
3. 试 启动 Tomcat q访?https://localhost:8443. 你将看到 Tomcat 默认的首c?br /> 需要注意的是,如果你访问默认的 8080 端口Q还是有效的?br /> 4. 配置应用使用 SSL 打开应用?web.xml 文gQ增加配|如下:< security-constraint > < web-resource-collection > < web-resource-name > securedapp</ web-resource-name > < url-pattern > /*</ url-pattern > </ web-resource-collection > < user-data-constraint > < transport-guarantee > CONFIDENTIAL</ transport-guarantee > </ user-data-constraint > </ security-constraint >
?URL 映射设ؓ /* Q这样你的整个应用都要求?HTTPS 讉KQ?transport-guarantee 标签讄?CONFIDENTIAL 以便使应用支?SSL?br /> 如果你希望关?SSL Q只需要将 CONFIDENTIAL 改ؓ NONE 卛_?br /> 如果是MAVEN的TOMCAT插gQ则加入如下配置< build > < finalName > test-dropbox</ finalName > < plugins > < plugin > < groupId > org.apache.maven.plugins</ groupId > < artifactId > maven-compiler-plugin</ artifactId > < version > 2.5.1</ version > < configuration > < source > 1.6</ source > < target > 1.6</ target > </ configuration > </ plugin > < plugin > < groupId > org.apache.tomcat.maven</ groupId > < artifactId > tomcat7-maven-plugin</ artifactId > < version > 2.0</ version > < configuration > < httpsPort > 8443</ httpsPort > < keystorePass > password</ keystorePass > < keystoreFile > C:\Users\PAUL\.keystore</ keystoreFile > </ configuration > </ plugin > </ plugins > </ build >
]]>议JPA http://www.aygfsteel.com/paulwong/archive/2013/08/14/402812.htmlpaulwong paulwong Wed, 14 Aug 2013 10:17:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/08/14/402812.html http://www.aygfsteel.com/paulwong/comments/402812.html http://www.aygfsteel.com/paulwong/archive/2013/08/14/402812.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/402812.html http://www.aygfsteel.com/paulwong/services/trackbacks/402812.html
也是一套INTERFACEQ以ORM的方式提供,由厂商实玎ͼ如ECLIPSE LINKQHIBERNATEQOPENEJB{?br />
ENTITYMANAGERFACTORYQ根据配|文件制造ENTITYMANAGER
ENTITYMANAGERQ以ORM的方式提供操作数据库的功?br />
TRANSACTIONQ事务保?br />
PERSISTENCE.XMLQ链接数据库信息Q事务类型,重定义JPA的实现厂商等的配|信?br />
在容器环境下使用Q?br />
如果事务是RESOURCE_LOCAL的方式,则合用端需q所有的事情Q如构造ENTITYMANAGERQ打开事务Q关闭事务等。类gBMT?br />
以下是在服务器环境中合用RESOURCE_LOCAL型的JPA 事先要在容器中添加数据源?br /> persistence.xml
<? xml version="1.0" encoding="UTF-8" ?>
< persistence xmlns ="http://java.sun.com/xml/ns/persistence" version ="1.0" >
<!-- Tutorial "unit" -->
< persistence-unit name ="Tutorial" transaction-type ="RESOURCE_LOCAL" >
< non-jta-data-source > myNonJtaDataSource</ non-jta-data-source >
< class > org.superbiz.jpa.Account</ class >
</ persistence-unit >
</ persistence >
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;
public class MyEjbOrServlet
{
@PersistenceUnit(unitName="Tutorial")
private EntityManagerFactory factory;
// Proper exception handling left out for simplicity public void ejbMethodOrServletServiceMethod()
throws Exception {
EntityManager entityManager = factory.createEntityManager();
EntityTransaction entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
Account account = entityManager.find(Account.
class , 12345);
account.setBalance(5000);
entityTransaction.commit();
}
}
以下是JTA方式的JPAQ容?EJB+JPA+JTAQ容器会在EJB的方法调用前打开一个事务,在方法退出后Q提交事务,q且如果是多个数据源的,x多个ENTITYMANAGER?br />可以保证一致性,卛_局事务。相当于之前的先调用USERTRANSACTIONQBEGINQCOMMIT?br /> 事先要在容器中添加数据源?br /> persistence.xml<? xml version="1.0" encoding="UTF-8" ?> < persistence xmlns ="http://java.sun.com/xml/ns/persistence" version ="1.0" > <!-- Tutorial "unit" --> < persistence-unit name ="Tutorial" transaction-type ="JTA" > < jta-data-source > myJtaDataSource</ jta-data-source > < non-jta-data-source > myNonJtaDataSource</ non-jta-data-source > < class > org.superbiz.jpa.Account</ class > </ persistence-unit > </ persistence >
EJBimport javax.ejb.Stateless;import javax.ejb.TransactionAttribute;import javax.ejb.TransactionAttributeType;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext; @Statelesspublic class MyEjb implements MyEjbInterface { @PersistenceContext(unitName = "Tutorial") private EntityManager entityManager; // Proper exception handling left out for simplicity @TransactionAttribute(TransactionAttributeType.REQUIRED) public void ejbMethod() throws Exception { Account account = entityManager.find(Account.class , 12345); account.setBalance(5000); } }
如果是J2SE环境下用JPAQ则又是不一L?br /> persistence.xml<? xml version="1.0" encoding="UTF-8" ?> < persistence xmlns ="http://java.sun.com/xml/ns/persistence" version ="1.0" > < persistence-unit name ="SimplePU" transaction-type ="RESOURCE_LOCAL" > < provider > org.hibernate.ejb.HibernatePersistence</ provider > < class > com.someone.jmail.valueobject.CallActivity</ class > < class > com.someone.jmail.valueobject.Email</ class > < properties > < property name ="hibernate.connection.driver_class" value ="com.mysql.jdbc.Driver" /> < property name ="hibernate.connection.url" value ="jdbc:mysql://localhost:3306/test" /> < property name ="hibernate.connection.username" value ="root" /> < property name ="hibernate.connection.password" value ="12345" /> < property name ="hibernate.dialect" value ="org.hibernate.dialect.MySQL5Dialect" /> < property name ="hibernate.show_sql" value ="false" /> < property name ="hibernate.format_sql" value ="true" /> < property name ="hibernate.use_sql_comments" value ="false" /> < property name ="hibernate.hbm2ddl.auto" value ="none" /> </ properties > </ persistence-unit > </ persistence >
Dao:public class UserDaoImpl implements UserDao { public AccountInfo save(AccountInfo accountInfo) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("SimplePU"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(accountInfo); em.getTransaction().commit(); emf.close(); return accountInfo; } }
]]> ?Ubuntu 安裝 java Jdk http://www.aygfsteel.com/paulwong/archive/2013/08/10/402655.htmlpaulwong paulwong Sat, 10 Aug 2013 05:33:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/08/10/402655.html http://www.aygfsteel.com/paulwong/comments/402655.html http://www.aygfsteel.com/paulwong/archive/2013/08/10/402655.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/402655.html http://www.aygfsteel.com/paulwong/services/trackbacks/402655.html
Install-Oracle-Java-7-in-Ubuntu-via-PPA-Repository
安裝 java 很容?! (支援 Ubuntu 12.04, 11.10, 11.04 and 10.04)
說在前頭 :
0. 安裝 oracle java jdk (目前?7u5 ?
0-1. 包含 jdk jre ?瀏覽器插?(不能只安?jre ?瀏覽器插?
0-2. 自動 辨識 64 bits ?32 bits
0-2. 安裝?會自動從 ppa:webupd8team/java 套g?更新 已安裝套?
0-3. 以後有新版本 這個方?自動會直接安裝新版本(例如如果?7u6 ? 1. 安裝指o
2. 看看是否安裝成功java -version
目前最新版?br />
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)
2-1. 如果上面的指?得到的版?不是剛剛安裝的版?br />
sudo update-java-alternatives -s java- 7 -oracle
再試一?br />
java -version
3. U除 Oracle Java 7
sudo apt-get remove oracle-java7-installer
]]> ECLIPSE+MAVEN+TOMCAT7 PLUGING+JNDI http://www.aygfsteel.com/paulwong/archive/2013/07/15/401578.htmlpaulwong paulwong Mon, 15 Jul 2013 05:51:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/07/15/401578.html http://www.aygfsteel.com/paulwong/comments/401578.html http://www.aygfsteel.com/paulwong/archive/2013/07/15/401578.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/401578.html http://www.aygfsteel.com/paulwong/services/trackbacks/401578.html 阅读全文 ]]> J2EE+ECLIPSE+JETTY PLUGIN+JNDI DATA SOURCE http://www.aygfsteel.com/paulwong/archive/2013/07/14/401551.htmlpaulwong paulwong Sun, 14 Jul 2013 08:59:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/07/14/401551.html http://www.aygfsteel.com/paulwong/comments/401551.html http://www.aygfsteel.com/paulwong/archive/2013/07/14/401551.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/401551.html http://www.aygfsteel.com/paulwong/services/trackbacks/401551.html 在ECLIPSE中,启动JETTYQ能部v多个WEB应用Q应用间能共享JNDI 的数据源?br /> Jetty/Feature/Jetty Maven Pluginhttp://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin Speed Up J2EE Environment Setup With Jetty Maven Pluginhttp://owenou.com/2011/02/23/speed-up-j2ee-environment-setup-with-jetty-maven-plugin.html ]]>Oracle数据库备份与q原命o[转] http://www.aygfsteel.com/paulwong/archive/2013/05/12/399172.htmlpaulwong paulwong Sun, 12 May 2013 07:07:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/05/12/399172.html http://www.aygfsteel.com/paulwong/comments/399172.html http://www.aygfsteel.com/paulwong/archive/2013/05/12/399172.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/399172.html http://www.aygfsteel.com/paulwong/services/trackbacks/399172.html 1 数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp?br /> exp system/manager@TEST file=d:\daochu.dmp full=y 2 数据库中system用户与sys用户的表导出 exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys) 3 数据库中的表table1 、table2导出 exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 4 数据库中的表table1中的字段filed1?00"打头的数据导?br /> exp system/manager@TEST file=d:\daochu.dmp tables=(table1)query=\" where filed1 like '00%'\" 上面是常用的导出Q对于压~我不太在意Q用winzip把dmp文g可以很好的压~?br /> 不过在上面命令后?加上 compress=y 可以了 数据的导?br /> 1 D:\daochu.dmp 中的数据导入 TEST数据库中?br /> imp system/manager@TEST file=d:\daochu.dmp 上面可能有点问题Q因为有的表已经存在Q然后它?yu)报错,对该表就不进行导入?br /> 在后面加?ignore=y 可以了?br /> 2 d:\daochu.dmp中的表table1 导入 imp system/manager@TEST file=d:\daochu.dmp tables=(table1) 基本上上面的导入导出够用了。不情冉|是将表彻底删除,然后导入?br /> 注意Q?br /> 你要有够的权限Q权限不够它会提CZ?br /> 数据库时可以q上的。可以用tnsping TEST 来获得数据库TEST能否q上 附录一Q?br /> l用户增加导入数据权限的操作 W一,启动sql*puls W二Q以system/manager登陆 W三Qcreate user 用户?IDENTIFIED BY 密码 Q如果已l创用户Q这步可以省略) W四QGRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW , DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE, DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字 W五, q行-cmd-q入dmp文g所在的目录, imp userid=system/manager full=y file=*.dmp 或?imp userid=system/manager full=y file=filename.dmp 安装oracle9I Szportdb\szportdb\szportdb 用sysdba d建立用户Qszportdb 表空间可以自p定,也可以Users 倒入数据库?br /> Imp szportdb/szportdb@szportdb full=y C:\szportdb.dmp ignore= ]]>全方位的技术服务及相关技术解x案(Ujava解决Ҏ(gu)Q?/title> http://www.aygfsteel.com/paulwong/archive/2013/05/11/399132.htmlpaulwong paulwong Fri, 10 May 2013 16:17:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/05/11/399132.html http://www.aygfsteel.com/paulwong/comments/399132.html http://www.aygfsteel.com/paulwong/archive/2013/05/11/399132.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/399132.html http://www.aygfsteel.com/paulwong/services/trackbacks/399132.html http://www.iteye.com/topic/1128561
@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); ]]> 一个不错的学习JAVA教程 http://www.aygfsteel.com/paulwong/archive/2013/03/29/397147.htmlpaulwong paulwong Fri, 29 Mar 2013 05:47:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/03/29/397147.html http://www.aygfsteel.com/paulwong/comments/397147.html http://www.aygfsteel.com/paulwong/archive/2013/03/29/397147.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/397147.html http://www.aygfsteel.com/paulwong/services/trackbacks/397147.html http://tutorials.jenkov.com/java-concurrency/index.html ]]> JeeSite 企业信息理pȝ基础框架 http://www.aygfsteel.com/paulwong/archive/2013/03/17/396555.htmlpaulwong paulwong Sun, 17 Mar 2013 04:29:00 GMT http://www.aygfsteel.com/paulwong/archive/2013/03/17/396555.html http://www.aygfsteel.com/paulwong/comments/396555.html http://www.aygfsteel.com/paulwong/archive/2013/03/17/396555.html#Feedback 0 http://www.aygfsteel.com/paulwong/comments/commentRss/396555.html http://www.aygfsteel.com/paulwong/services/trackbacks/396555.html 1、Services相关 Core FrameworkQSpring Framework 3.2?br />Security FrameworkQApache Shiro 1.2?br /> 2、Web相关 MVC FrameworkQSpringMVC 3.2?br />Layout DecorationQSiteMesh 2.4?br />JavaScript LibraryQJQuery 1.9?br />CSS FrameworkQTwitter Bootstrap 2.0.4?br />JavaScript/CSS CompressorQYUI Compressor 2.4?br />Front ValidationQJQuery Validation Plugin 1.11?br /> 3、Database相关 ORM FrameworkQSpring-Data-JPA 1.3、Hibernate 4.1?br />Connection PoolQBoneCP 0.7 Bean ValidationQHibernate Validation 4.3.0?br />CacheQEhcache 2.6?br /> 4、Tools 相关 CommonsQApache Commons JSON MapperQJackson 2.1 Bean MapperQDozer 5.3.2 Full-text searchQHibernate Search 4.2QApache Lucene 3.6Q、IK Analyzer 2012_u6中文分词 Log ManagerQLog4j 1.2 http://thinkgem.github.com/jeesite/ https://github.com/thinkgem/jeesite ]]>
վ֩ģ壺
|
|
|
ͨ |
|
|
Ǧɽ |
ǫ |
Զ |
ʡ |
|
|
ͨ |
|
|
|
|
Ұ |
˳ |
|
ض |
|
|
|
|
|
|
½ |
˼é |
|
|
˲ |
Ȫ |
ˮ |
|
|
|
|
¤ |
ګ |
괨 |