??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美中文字幕视频,亚洲一区二区三区欧美,在线观看亚洲http://www.aygfsteel.com/paulwong/category/11299.htmlzh-cnFri, 07 Aug 2015 06:58:36 GMTFri, 07 Aug 2015 06:58:36 GMT60RESTful API 设计指南http://www.aygfsteel.com/paulwong/archive/2015/08/07/426659.htmlpaulwongpaulwongFri, 07 Aug 2015 06:13:00 GMThttp://www.aygfsteel.com/paulwong/archive/2015/08/07/426659.htmlhttp://www.aygfsteel.com/paulwong/comments/426659.htmlhttp://www.aygfsteel.com/paulwong/archive/2015/08/07/426659.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/426659.htmlhttp://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>

RESTful API

一、协?/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/userQ然后就得到了下面结果?/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>



paulwong 2015-08-07 14:13 发表评论
]]>
WEB版的REST试工具http://www.aygfsteel.com/paulwong/archive/2015/05/27/425327.htmlpaulwongpaulwongWed, 27 May 2015 06:12:00 GMThttp://www.aygfsteel.com/paulwong/archive/2015/05/27/425327.htmlhttp://www.aygfsteel.com/paulwong/comments/425327.htmlhttp://www.aygfsteel.com/paulwong/archive/2015/05/27/425327.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/425327.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/425327.htmlhttp://hackst.com/


http://www.quadrillian.com/


paulwong 2015-05-27 14:12 发表评论
]]>
maven3 jetty jrebel 搭徏可调式的开发环?/title><link>http://www.aygfsteel.com/paulwong/archive/2015/05/10/424979.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sun, 10 May 2015 12:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2015/05/10/424979.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/424979.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2015/05/10/424979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/424979.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/424979.html</trackback:ping><description><![CDATA[<a target="_blank">http://my.oschina.net/edeis2012/blog/68831</a><br /><br /><a target="_blank">http://chen-rojer-gmail-com.iteye.com/blog/910748</a><br /><br /><br /><img src ="http://www.aygfsteel.com/paulwong/aggbug/424979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2015-05-10 20:53 <a href="http://www.aygfsteel.com/paulwong/archive/2015/05/10/424979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分布式配|管理^台Disconfhttp://www.aygfsteel.com/paulwong/archive/2015/04/13/424366.htmlpaulwongpaulwongMon, 13 Apr 2015 08:12:00 GMThttp://www.aygfsteel.com/paulwong/archive/2015/04/13/424366.htmlhttp://www.aygfsteel.com/paulwong/comments/424366.htmlhttp://www.aygfsteel.com/paulwong/archive/2015/04/13/424366.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/424366.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/424366.htmlhttp://www.oschina.net/p/disconf

Disconf 可以为各U业务^台提供统一的配|管理服务?/p>

  • 支持配置Q配|项+配置文gQ的分布式化理

  • 配置发布l一?/p>

  • 极简的用方式(注解式编E??XML代码无代码R入模式)

  • 低R入性或无R入性、强兼容?/p>

  • 需要Spring~程环境

重要功能特点

  • 支持配置Q配|项+配置文gQ的分布式化理

  • 配置发布l一?/strong>

    • 配置发布、更新统一化(云端存储、发布):配置存储在云端系l,用户l一在^Cq行发布、更新配|?/p>

    • 配置更新自动化:用户在^台更新配|,使用该配|的pȝ会自动发现该情况Qƈ应用新配|。特D地Q如果用户ؓ此配|定义了回调函数c,则此函数cM被自动调用?/p>

  • 配置异构pȝ理

    • 异构包部|统一化:q里的异构系l是指一个系l部|多个实例时Q由于配|不同,从而需要多个部|包Qjar或warQ的情况Q下同)。?Disconf后,异构pȝ的部|只需要一个部|包Q不同实例的配置会自动分配。特别地Q在业界大量使用部v虚拟化(如JPAASpȝQSAEQBAEQ?的情况下Q同一个系l用同一个部|包的情景会来多QDisconf可以很自然地与他天然契合?/p>

    • 异构d自动切换Q如果一个异构系l存在主备机Q主机发生挂机时Q备机可以自动获取主机配|从而变成主机?/p>

    • 异构d机Context׃n工具Q异构系l下Q主备机切换时可能需要共享Context。可以用Context׃n工具来共享主备的Context?/p>

  • 极简的用方式(注解式编E??XML代码无代码R入模式)Q我们追求的是极的、用LE体验良好的~程方式。目前支持两U开发模式:ZXML配置或才Z注解Q即可完成复杂的配置分布式化?/p>

  • 需要Spring~程环境

注:配置Ҏ(gu)指某个类里的某个Field字段?/p>

Disconf的功能特Ҏ(gu)q图Q?/strong>

查看大图

其它功能特点

  • 低R入性或无R入性、强兼容?/strong>Q?/p>

    • 低R入性:通过极少的注解式代码撰写Q即可实现分布式配置?/p>

    • 无R入性:通过XML单配|,卛_实现分布式配|?/p>

    • 强兼Ҏ(gu):为程序添加了分布式配|注解后Q开启Disconf则用分布式配置Q若关闭Disconf则用本地配|;若开启Disconf后disconf-web不能正常WorkQ则Disconf使用本地配置?/p>

  • 支持配置多个项目共享,支持扚w处理目配置?/p>

  • 配置监控Q^台提供自校验功能Q进一步提高稳定性)Q可以定时校验应用系l的配置是否正确?/p>

模块架构?/h2>



paulwong 2015-04-13 16:12 发表评论
]]>JAVAEE资源http://www.aygfsteel.com/paulwong/archive/2014/12/26/421859.htmlpaulwongpaulwongFri, 26 Dec 2014 08:29:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/12/26/421859.htmlhttp://www.aygfsteel.com/paulwong/comments/421859.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/12/26/421859.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/421859.htmlhttp://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 WildFly
http://www.javacodegeeks.com/2014/01/java-ee-7-and-websocket-api-for-java-jsr-356-with-angularjs-on-wildfly.html



lll

paulwong 2014-12-26 16:29 发表评论
]]>
分布式调度QUARTZ+SPRINGhttp://www.aygfsteel.com/paulwong/archive/2014/11/14/420104.htmlpaulwongpaulwongFri, 14 Nov 2014 10:46:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/11/14/420104.htmlhttp://www.aygfsteel.com/paulwong/comments/420104.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/11/14/420104.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/420104.htmlhttp://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.java
package 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.java
package 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.java
package 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

















paulwong 2014-11-14 18:46 发表评论
]]>
Spring对HttpSession的重新封?/title><link>http://www.aygfsteel.com/paulwong/archive/2014/08/19/417090.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 19 Aug 2014 01:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2014/08/19/417090.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/417090.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2014/08/19/417090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/417090.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/417090.html</trackback:ping><description><![CDATA[<a target="_blank">https://github.com/spring-projects/spring-session/tree/master/samples</a><img src ="http://www.aygfsteel.com/paulwong/aggbug/417090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2014-08-19 09:13 <a href="http://www.aygfsteel.com/paulwong/archive/2014/08/19/417090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转(探讨分布式系l与集群的区别)http://www.aygfsteel.com/paulwong/archive/2014/05/23/414022.htmlpaulwongpaulwongFri, 23 May 2014 05:27:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/05/23/414022.htmlhttp://www.aygfsteel.com/paulwong/comments/414022.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/05/23/414022.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/414022.htmlhttp://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>

paulwong 2014-05-23 13:27 发表评论
]]>
整合试http://www.aygfsteel.com/paulwong/archive/2014/04/20/412701.htmlpaulwongpaulwongSun, 20 Apr 2014 02:33:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/04/20/412701.htmlhttp://www.aygfsteel.com/paulwong/comments/412701.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/04/20/412701.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/412701.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/412701.htmlhttp://arquillian.org/guides/getting_started_zh_cn/

paulwong 2014-04-20 10:33 发表评论
]]>
Java EE 应用开发^?Koala http://www.aygfsteel.com/paulwong/archive/2014/04/17/412553.htmlpaulwongpaulwongThu, 17 Apr 2014 01:18:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/04/17/412553.htmlhttp://www.aygfsteel.com/paulwong/comments/412553.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/04/17/412553.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/412553.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/412553.htmlKoala (考拉) 是一Ƒֺ用在 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ȝ



paulwong 2014-04-17 09:18 发表评论
]]>
javaee7-sampleshttp://www.aygfsteel.com/paulwong/archive/2014/04/06/411982.htmlpaulwongpaulwongSun, 06 Apr 2014 00:33:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/04/06/411982.htmlhttp://www.aygfsteel.com/paulwong/comments/411982.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/04/06/411982.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/411982.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/411982.htmlhttp://git.oschina.net/ld/javaee7-samples

paulwong 2014-04-06 08:33 发表评论
]]>
也谈ZWeb的含工作项目的一般开发流E??http://www.aygfsteel.com/paulwong/archive/2014/04/04/411925.htmlpaulwongpaulwongFri, 04 Apr 2014 00:23:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/04/04/411925.htmlhttp://www.aygfsteel.com/paulwong/comments/411925.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/04/04/411925.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/411925.htmlhttp://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来ƈ不如惌的那么简单,主要需求:
  1. 灉|定制工作,q跟t流E进度;
  2. 每个Order含有历史轨迹记录Q可在历史中查看Q?/span>
  3. 工作的Action灉|Q认领Q务不一定非要先提取表单Q因为很多节炚w只有几个动作Q直接按钮操作即可;
  4. 待办事宜列表在不h面情况下也能变动;
目要求Q?/span>
  1. 操作单高效;
  2. 权限l节到按钮别;
  3. q发数少Q不过3000个在U用P
主要可能使用到技术:
  1. 工作引擎,我这里选用Activiti5Q很灉|好用Q?/span>
  2. 权限使用Spring SecurityQ基于标{ּ理权限很方便;
  3. 通知引擎使用WebSocketQ基于Flash实时通信Q基于socket.ioQ?/span>
  4. 权限_度Zl典的RBACQ?/span>
  5. M框架Spring MVC+MybatisQ?/span>
实现的WebSocket的M思\Q?/span>
  1. WebSocket Server独立于Web目QWeb Server与WebSocket Server之间的局域网通信Z单的Socket通信Q这栯个组件可以完全解耦和通用Q?/span>
  2. 当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>



paulwong 2014-04-04 08:23 发表评论
]]>
LOGBACK TUTORIAhttp://www.aygfsteel.com/paulwong/archive/2014/04/03/411871.htmlpaulwongpaulwongThu, 03 Apr 2014 00:10:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/04/03/411871.htmlhttp://www.aygfsteel.com/paulwong/comments/411871.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/04/03/411871.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/411871.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/411871.htmlhttps://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>


paulwong 2014-04-03 08:10 发表评论
]]>
如何在WEB应用中绑定微信公众帐?/title><link>http://www.aygfsteel.com/paulwong/archive/2014/04/01/411767.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 01 Apr 2014 00:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2014/04/01/411767.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/411767.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2014/04/01/411767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/411767.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/411767.html</trackback:ping><description><![CDATA[<a target="_blank">http://www.chanzhi.org/book/weixin.html</a> <div><br /> </div> <div><a target="_blank">http://demo.chanzhi.org/chanzhiadmin.php?m=wechat&f=admin</a><br /> </div> <img src ="http://www.aygfsteel.com/paulwong/aggbug/411767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2014-04-01 08:41 <a href="http://www.aygfsteel.com/paulwong/archive/2014/04/01/411767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weather API 攉整理http://www.aygfsteel.com/paulwong/archive/2014/01/14/408906.htmlpaulwongpaulwongTue, 14 Jan 2014 02:54:00 GMThttp://www.aygfsteel.com/paulwong/archive/2014/01/14/408906.htmlhttp://www.aygfsteel.com/paulwong/comments/408906.htmlhttp://www.aygfsteel.com/paulwong/archive/2014/01/14/408906.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/408906.htmlhttp://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.htmlQ六天预报)

http://www.weather.com.cn/data/sk/101110101.htmlQ实时天气信息)

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



paulwong 2014-01-14 10:54 发表评论
]]>
JAX-RS资源http://www.aygfsteel.com/paulwong/archive/2013/11/27/406879.htmlpaulwongpaulwongWed, 27 Nov 2013 04:03:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/11/27/406879.htmlhttp://www.aygfsteel.com/paulwong/comments/406879.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/11/27/406879.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/406879.htmlhttp://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>

paulwong 2013-11-27 12:03 发表评论
]]>微信公众q_开发资?/title><link>http://www.aygfsteel.com/paulwong/archive/2013/11/25/406817.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 25 Nov 2013 14:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2013/11/25/406817.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/406817.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2013/11/25/406817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/406817.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/406817.html</trackback:ping><description><![CDATA[<div>【微信公众^台改版后】Java模拟d微信q_,d推送消息给用户</div> <a target="_blank">http://50vip.com/blog.php?i=349</a><br /> <br /> <br />微信公众账号开?br /> <a target="_blank">http://my.oschina.net/ywooer/blog?catalog=419479</a><img src ="http://www.aygfsteel.com/paulwong/aggbug/406817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2013-11-25 22:00 <a href="http://www.aygfsteel.com/paulwong/archive/2013/11/25/406817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZspringMVC+springSecurity3.x+Mybaits3.x的权限系l?/title><link>http://www.aygfsteel.com/paulwong/archive/2013/11/24/406757.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sun, 24 Nov 2013 12:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2013/11/24/406757.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/406757.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2013/11/24/406757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/406757.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/406757.html</trackback:ping><description><![CDATA[<a target="_blank">https://github.com/lanyuancom/lanyuan</a> @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);<img src ="http://www.aygfsteel.com/paulwong/aggbug/406757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2013-11-24 20:54 <a href="http://www.aygfsteel.com/paulwong/archive/2013/11/24/406757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大型|站技术架构读书笔?/title><link>http://www.aygfsteel.com/paulwong/archive/2013/11/09/406160.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 09 Nov 2013 03:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2013/11/09/406160.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/406160.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2013/11/09/406160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/406160.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/406160.html</trackback:ping><description><![CDATA[大型|站l历的技术架构演变:<br /><ol><li>应用服务器、数据库服务器和文g服务器都安装在同一C?/li><li>应用服务器、数据库服务器和文g服务器分别安装在不同L</li><li>增加了分布式的缓存服务器</li><li>应用服务器增加了好几収ͼ变成集群</li><li>增加了CDN和反代理服务器</li><li>数据库服务器变成M形式的服务器</li><li>数据库服务器变成分布式的服务器,文g服务器也变成分布式服务器<br /></li><li>NOSQL分布式数据库和搜索引擎的引入</li><li>应用服务器虽然是多台Q但都是部v了同一应用Q这时将应用拆分Q每台服务器部v不同的拆分应?/li><li>虽然应用已经拆分Q但每个应用都是从页面管到数据库Q这时l拆分,存取数据库的部份独立,面部䆾<br />也独?/li></ol>架构模式<br /><ol><li>分层Q代码放在不同的cM</li><li>分割Q应用放在不同的JVM?/li><li>分布式,部v在不同的物理?/li><li>集群Q同一个应用部|到不同的主机,可以负蝲均衡</li><li>~存QCND加速、反向代理、本地缓存、分布式~存</li><li>异步Q消除高q发</li><li>冗余Q多处备?/li><li>安全?/li></ol><img src ="http://www.aygfsteel.com/paulwong/aggbug/406160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2013-11-09 11:34 <a href="http://www.aygfsteel.com/paulwong/archive/2013/11/09/406160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java EE 8愿望清单Q缺这些,Java EE不会完?/title><link>http://www.aygfsteel.com/paulwong/archive/2013/11/09/406156.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 09 Nov 2013 03:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2013/11/09/406156.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/406156.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2013/11/09/406156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/406156.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/406156.html</trackback:ping><description><![CDATA[<div style="margin: 0px; color: #333333; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; line-height: 25px; background-color: #ffffff;"><strong style="padding: 0px; margin: 0px;">摘要Q?/strong>Java EE 7已于6月中旬正式发布,管新^台包含了诸多新的Ҏ(gu),但是开发者对此似乎ƈ不满I他们期待未来的版本Java EE 8中能够包含更完善的特性,比如更大的CDI应用范围、标准的~存API、现代化的安全框架等?/div><div style="margin: 0px; color: #333333; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; line-height: 25px; background-color: #ffffff;"><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><a target="_blank" rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Java EE 7已于6月中旬正式发?/a>Q新版本提供了一个强大、完整、全面的堆栈来帮助开发者构Z业和Web应用E序——为构建HTML5动态可伸羃应用E序提供了支持,q新增大量规范和Ҏ(gu)来提高开发h员的生力以及满企业最苛刻的需求?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><a target="_blank" rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;"></a><a target="_blank" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;"><img src="http://static.oschina.net/uploads/img/201311/08133128_iBCa.jpg" style="padding: 8px; margin: 10px 0px; border: 1px solid #dddddd; max-width: 640px; background-color: #f6f6f6; cursor: pointer; background-position: initial initial; background-repeat: initial initial;" alt="" /></a></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">下面的这个图表包含了Java EE 7中的各种lg。橙色部分ؓJava EE中新d的组件?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><a target="_blank" rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;"></a><a target="_blank" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;"><img src="http://static.oschina.net/uploads/img/201311/08133128_wK8X.jpg" style="padding: 8px; margin: 10px 0px; border: 1px solid #dddddd; max-width: 640px; background-color: #f6f6f6; cursor: pointer; background-position: initial initial; background-repeat: initial initial;" alt="" /></a></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">管新的q_包含了诸多新的特性,但是开发者对此似乎ƈ不满I管他们中的大部分还没有q移到Java EE 7Q或许是׃Java EE 7的特性还不完善)Q但是这q不影响他们对于Java EE 8Ҏ(gu)的设想?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">比如Q在Java EE 6发布Q?009q?2?0日发布)后,开发者Antonio Goncalves认ؓ该版本ƈ没有解决一些问题,因此写了一个希望在Java EE 7中包含的<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Ҏ(gu)清?/a>。有的是,他写?个特性中Q其中有2个(flows和batchQ已l包含在Java EE 7中了Q而第3个特性(cachingQ原本也计划包含其中Q但׃开发进度关p,在Java EE 7最l发布前被舍弃?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">此D促开发?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Arjan Tijms</a>也写了一个他希望在Java EE 8中出现的Ҏ(gu)清单,如下?/p><ol style="padding: 0px; margin: 10px 20px; list-style-position: inside;"><li style="padding: 0px; margin: 0px;">无处不在的CDIQContexts and Dependency Injection for Java EEQ上下文与依赖注入)</li><li style="padding: 0px; margin: 0px;">更深入的PruningQ修剪)和DeprecatingQ弃用)</li><li style="padding: 0px; margin: 0px;">一个标准的~存API</li><li style="padding: 0px; margin: 0px;">administrative objectsQ管理对象)的应用内替代?/li><li style="padding: 0px; margin: 0px;">l合的现代化的安全框?/li><li style="padding: 0px; margin: 0px;">q_范围内的配置</li></ol><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">下面来详细阐述q些Ҏ(gu)的必要性?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">1.  无处不在的CDI</strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">实际上这意味着2U不同的东西QCDI可以用在目前不能用的其他地方、基于CDI来实现和攚w其他规范中的相x术?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">a. 使CDI可以用在其他地方</strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">与Java EE 6相比QJava EE 7中的CDI的适用范围已经扩大了很多,比如CDI注入现在可以工作?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">大多数JSFlgQartifactsQ?/a>中,比如<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Zbean validation的约束验证器</a>。不q的是,只是大部分JSFlgQƈ非所有的Q比如{换器和验证器׃行,管<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">OmniFaces 1.6支持这些特?/a>Q但最好是在Java EE 7中能够开即用?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">此外QJava EE 7中的CDI也没有考虑?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">JASPIClg</a>Q在此之中注入操作将无法工作。即使httph和会话在Servlet Profile SAM中可用,但是当SAM被调用时Q相应的CDI作用域也不会被徏立。这意味着它甚至不能通过bean理器以~程方式来检索请求或<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">会话</a>bean作用域?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">q有一U特D情冉|Q各U各Lq_artifacts可以通过一些替代的注解Q如@PersistenceUnitQ来注入Q但早期的注入注解(@ResourceQ?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">仍然需要做很多事情</a>Q比如DataSource。即使Java EE 7中引入了artifactsQ如d调度服务Q,但也不得不通过“古?#8221;的@Resource来注入,而不是通过@Inject?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">b. ZCDI来实现和攚w其他规范中的相x?/strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">CDIl对不应该只专注于在其他规范中已l解决的那些问题Q其他规范还可以在CDI之上来实现它们各自的功能Q这意味着它们可以作ؓCDI扩展。以Java EE 7中的JSF 2.2ZQ该规范中的<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">兼容CDI的视图作用域</a>可作为CDI扩展来用,q且其新的flow作用域也可被立即实现为CDI扩展?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">此外QJTA 1.2现在也提供了一个CDI扩展Q其可以声明式地应用到CDI托管的bean中。此前EJB也提供了cM的功能,其背后技术也使用CJTAQ但是声明部分还是基于EJB规范。在q种情况下,可以通过JTA来直接处理其自n的声明性事务,但是q需要在CDI之上q行?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">管从EJB 3版本开始,<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">EJB beans</a>已经非常单易用了Q同时还相当强大Q但问题是:CDI中已l提供了lg模型QEJB beans只是另一个替代品。无论各UEJB beancd有多么实用,但是一个^C?个组件模型,Ҏ(gu)让用Lx规范实现者؜淆。通过CDIlg模型Q你可以选择需要的功能Q或者؜合用,q且每个注解提供了额外的功能。而EJB是一?#8220;一?#8221;模式Q在一个单一的注解中定义了特定的beancdQ它们之间可以很好地协同工作。你可以用部分不想使用的功能。例如,你可以关闭beancd中提供的事务支持Q或者禁用@Stateful beans中的passivationQ或者禁?a target="_blank" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">@Singleton</a> beans中的容器理锁?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">如果EJB被当做CDI的一l扩展来q行攚w,可能最l会更好。这样就会只有一个组件模型,q且h同样有效的功能?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">q意味着EJB的服务,如计时器服务Q?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">@Schedule</a>?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;"></a><a target="_blank" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">@TimeOut</a> Q?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">@Asynchronous</a>?nbsp;<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;"></a><a target="_blank" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">@Lock</a>?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">@Startup/@DependsOn</a>和@RolesAllowed都应该能与CDI托管的bean一起工作。此外,现有EJB beancd提供的隐式功能也应该被分解成可单独用的功能。比如可以通过@Pooled来模拟@Stateless beans提供的容器池Q通过@CallScoped来模拟调用@Stateless beanC同的实例中的行ؓ?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">2.  更深入的PruningQ修剪)和DeprecatingQ弃用)</strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">在Java EEq_中,为数众多的API可能会o初学者不知所措,q也是导致Java EE如此复杂的一个重要原因。因此从Java EE 6版本开始就引入?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Pruning</a>Q修剪)和DeprecatingQ弃用)q程。在Java EE 7中,更多的技术和API成ؓ了可选项Q这意味着开发者如果需要,q可以包含进来?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">比如我个人最喜欢的是JSF本地托管bean设施、JSP视图处理E序Q这早在2009q就被弃用了Q,以及JSF中各U各L功能Q这些功能在规范文g中很长一D|间一直被描述?#8220;被弃?#8221;?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">如果EJBlg模型也被修剪会更好Q但q有可能qؓ时过早。其实最应该做的是l去修剪EJB 2~程模型相关的所有东西,比如在Java EE 7中依然存在的home接口?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">3.  一个标准化的缓存API</strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">JCache~存API原本包含在Java EE 7中,但不q的是,该API<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">错过了重要的公共审查的最后期?/a>Q导致其没能成ؓJava EE 7的一部分?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">如果该规范能够在Java EE 8计划表的早期阶段完成Q就有可能成为Java EE 8的一部分。这P其他一些规范(如JPAQ也能够在JCache之上重新构徏自己的缓存API?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">4.  所有管理对象(administrative objectsQ的应用内替代品</strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">Java EE中有一个概念叫“理对象Qadministrative objectsQ?#8221;。这是一个配|在AS端而不是在应用E序本n中的资源。这个概忉|有争议的?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">对于在应用服务器上运行许多外部程序的大企业而言Q这可以是一个大的优?#8212;—你通常不会惛_打开一个外部获得的应用E序来改变它q接的数据库的相关细节。在传统企业中,如果在开发h员和操作之间有一个强大的分离机制Q这个概念也是有益的——q可以在pȝ安装时分别设|?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">但是Q这对于在自q应用服务器部|内部开发的应用E序的敏捷团队来_q种分离方式是一个很大的障碍Q不会带来Q何帮助。同P对于初学者、教育方面的应用或者云部v来说Q这U设|也是非怸可取的?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">从Java EE 6的@DataSourceDefinition开始,许多资源Q早期的“理对象”Q只能从应用E序内部被定义,比如JMS Destinations、email会话{。不q的是,qƈ不适用于所有的理对象?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">不过QJava EE 7中新?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Concurrency Utils for Java EE</a>规范中有明确?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">选项使得它的资源只针对管理对?/a>。如果在Java EE 8中,允许<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">以一个便携的方式从应用程序内部配|?/a>Q那么这是非常的。更q一步来_如果Java EE 8中能够定义一U规范来明确止资源只能被administrativeQ那么会更好?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">5.  l合的现代化的安全框?/strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">在Java EE中,安全一直是一个棘手的问题。缺乏整体和全面的安全框架是<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Java EE的主要缺点之一</a>Q尤其是在讨论或评估竞争框架Q如SpringQ时Q这些问题会被更多地提及?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">q不是Java EE没有关于安全斚w的规定。事实上Q它有一整套选项Q比如JAAS、JASPIC、JACC、部分的Servlet安全斚w的规范、部分EJB规范、JAX-RS自己的APIQ甚至JCA也有一些自q安全规定。但是,q方面存在相当多的问题?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">首先Q安全标准被分布在这么多规范中,且ƈ不是所有这些规范都可以用在Java EE Web Profile中,q也D难以推出一个综合的Java EE安全框架?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">W二Q各U安全API已经相当长一D|间没有被C化,其是JASPIC和JACC。长期以来,q些API只是修复了一些小的重要的问题Q从来没有一个API?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">JMS 2</a>一栯完整地现代化。比如,JASPIC现在<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">仍然针对Java SE 1.4</a>?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">W三Q个别安全APIQ如JAAS、JASPIC 和JACCQ都?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">比较抽象和低层次?/a>。虽然这Z应商提供了很大的灉|性,但是它们不适合普通的应用E序开发者?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">W四Q最重要的问题是QJava EE中的安全机制也遭遇到?#8220;理对象”中同L问题。很长一D|_所谓的Java EE声明式安全模型主要认证过E是在AS端按照供应商特定方式来单独配|和实现的,q再ơ让安全讄对于敏捷团队、教育工作者和初学者来说成Z件困隄事?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">以上q些是主要的问题。虽然其中一些问题可以在最q的Java EE升中通过增加功能和修复问题来解冟뀂然而,我的愿望是,能够在Java EE 8中,通过一个综合的和现代化的安全框Ӟ可能地构徏在现有安全基上)这些问题解军_更加d?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">6.  q_范围内的配置</strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">Java EE应用E序可以使用部v描述文gQ比如web.xmlQ进行配|,但该Ҏ(gu)对于不同的开发阶D(如DEV、BETA、LIVE{)来说是比较痛苦的。针对这些阶D配|Java EE应用E序的传l的Ҏ(gu)是通过ȝ在一个特定服务器实例中的“理对象”来实现。在该方法中Q配|的是服务器Q而不是应用程序。由于不同阶D会对应不同的服务器Q因此这些设|也会随之自动改变?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">q种Ҏ(gu)有一些问题。首先在AS端的配置资源是服务器特定的,q些资源可以被标准化Q但是它们的配置肯定没有被标准化。这对于初学者来_在即发布的应用E序中进行解释说明比较困难。对于小型开发团队和敏捷开发团队而言Q也增加了不必要的困难?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">对于配置Java EE应用E序Q目前有很多可替代的方式Q比如在<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">部v描述W?/a>内用(Z表达式语a的)占位W,q部v描述W(或fragmentsQ可切换。许多规范已l允许指定外部的部v描述W(如web.xml中可以指定外部的faces-config.xml文gQpersistence.xml中可以指定外部的orm.xml文gQ,但是没有一个统一的机制来针对描述W做q些事情Qƈ且没有办法去参数化这些包含的外部文g?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">如果Java EE 8能够以一U?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">d的、统一q_的方?/a>来解册些配|问题,再好不q了。似乎Java EE 8开发团?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">正在计划</a>做这L事情。这会非常有趣Q接下来q如何发展了?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">l论</strong></p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">Java EE 8目前处于规划初期,但愿上面提到的大多数Ҏ(gu)能够以某种方式加以解决。可?#8220;无处不在的CDI”的几率会大一些,此方面似乎已l得C很大的支持,且事情已l在朝着q个方向发展了?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">标准化缓存API也非常有可能Q它几乎快被包含在Java EE 7中了Q但愿其不会再次错过规范审查的最后期限?/p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">此外Q?#8220;C化的安全框架”q一Ҏ(gu)已l被几个Java EE开发成员提刎ͼ但是此方面工作尚未启动。这可能需要相当大的努力,以及大量其他规范的支持,q是一个整体性问题。顺便说一句,安全框架也是Antonio Goncalves关于Java EE 7愿望清单中的W?个提议,希望Java EE 8可以解决q一问题?/p></div><img src ="http://www.aygfsteel.com/paulwong/aggbug/406156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2013-11-09 11:14 <a href="http://www.aygfsteel.com/paulwong/archive/2013/11/09/406156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OAUTH 2.0资源http://www.aygfsteel.com/paulwong/archive/2013/10/24/405595.htmlpaulwongpaulwongThu, 24 Oct 2013 03:27:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/10/24/405595.htmlhttp://www.aygfsteel.com/paulwong/comments/405595.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/10/24/405595.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/405595.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/405595.htmlhttp://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












paulwong 2013-10-24 11:27 发表评论
]]>
启用TOMCAT的SSLhttp://www.aygfsteel.com/paulwong/archive/2013/10/14/404941.htmlpaulwongpaulwongMon, 14 Oct 2013 00:02:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/10/14/404941.htmlhttp://www.aygfsteel.com/paulwong/comments/404941.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/10/14/404941.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/404941.htmlhttp://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>








paulwong 2013-10-14 08:02 发表评论
]]>
议JPAhttp://www.aygfsteel.com/paulwong/archive/2013/08/14/402812.htmlpaulwongpaulwongWed, 14 Aug 2013 10:17:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/08/14/402812.htmlhttp://www.aygfsteel.com/paulwong/comments/402812.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/08/14/402812.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/402812.htmlhttp://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>


EJB
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public 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; 
    } 
 } 




paulwong 2013-08-14 18:17 发表评论
]]>
?Ubuntu 安裝 java Jdkhttp://www.aygfsteel.com/paulwong/archive/2013/08/10/402655.htmlpaulwongpaulwongSat, 10 Aug 2013 05:33:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/08/10/402655.htmlhttp://www.aygfsteel.com/paulwong/comments/402655.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/08/10/402655.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/402655.htmlhttp://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
   apt-get install software-properties-common
1-1. sudo add-apt-repository ppa:webupd8team/java
 
1-2. sudo apt-get update
 
1-3. sudo apt-get install oracle-java7-installer(6qq个Qoracle-java6-installer)


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


paulwong 2013-08-10 13:33 发表评论
]]>
ECLIPSE+MAVEN+TOMCAT7 PLUGING+JNDIhttp://www.aygfsteel.com/paulwong/archive/2013/07/15/401578.htmlpaulwongpaulwongMon, 15 Jul 2013 05:51:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/07/15/401578.htmlhttp://www.aygfsteel.com/paulwong/comments/401578.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/07/15/401578.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/401578.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/401578.html阅读全文

paulwong 2013-07-15 13:51 发表评论
]]>
J2EE+ECLIPSE+JETTY PLUGIN+JNDI DATA SOURCEhttp://www.aygfsteel.com/paulwong/archive/2013/07/14/401551.htmlpaulwongpaulwongSun, 14 Jul 2013 08:59:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/07/14/401551.htmlhttp://www.aygfsteel.com/paulwong/comments/401551.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/07/14/401551.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/401551.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/401551.html
在ECLIPSE中,启动JETTYQ能部v多个WEB应用Q应用间能共享JNDI 的数据源?br />
Jetty/Feature/Jetty Maven Plugin
http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin

Speed Up J2EE Environment Setup With Jetty Maven Plugin
http://owenou.com/2011/02/23/speed-up-j2ee-environment-setup-with-jetty-maven-plugin.html

paulwong 2013-07-14 16:59 发表评论
]]>
Oracle数据库备份与q原命o[转]http://www.aygfsteel.com/paulwong/archive/2013/05/12/399172.htmlpaulwongpaulwongSun, 12 May 2013 07:07:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/05/12/399172.htmlhttp://www.aygfsteel.com/paulwong/comments/399172.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/05/12/399172.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/399172.htmlhttp://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=

paulwong 2013-05-12 15:07 发表评论
]]>
全方位的技术服务及相关技术解x案(Ujava解决Ҏ(gu)Q?/title><link>http://www.aygfsteel.com/paulwong/archive/2013/05/11/399132.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 10 May 2013 16:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/paulwong/archive/2013/05/11/399132.html</guid><wfw:comment>http://www.aygfsteel.com/paulwong/comments/399132.html</wfw:comment><comments>http://www.aygfsteel.com/paulwong/archive/2013/05/11/399132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/paulwong/comments/commentRss/399132.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/paulwong/services/trackbacks/399132.html</trackback:ping><description><![CDATA[<a target="_blank">http://www.iteye.com/topic/1128561</a> @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);<img src ="http://www.aygfsteel.com/paulwong/aggbug/399132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/paulwong/" target="_blank">paulwong</a> 2013-05-11 00:17 <a href="http://www.aygfsteel.com/paulwong/archive/2013/05/11/399132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个不错的学习JAVA教程http://www.aygfsteel.com/paulwong/archive/2013/03/29/397147.htmlpaulwongpaulwongFri, 29 Mar 2013 05:47:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/03/29/397147.htmlhttp://www.aygfsteel.com/paulwong/comments/397147.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/03/29/397147.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/397147.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/397147.htmlhttp://tutorials.jenkov.com/java-concurrency/index.html

paulwong 2013-03-29 13:47 发表评论
]]>
JeeSite 企业信息理pȝ基础框架http://www.aygfsteel.com/paulwong/archive/2013/03/17/396555.htmlpaulwongpaulwongSun, 17 Mar 2013 04:29:00 GMThttp://www.aygfsteel.com/paulwong/archive/2013/03/17/396555.htmlhttp://www.aygfsteel.com/paulwong/comments/396555.htmlhttp://www.aygfsteel.com/paulwong/archive/2013/03/17/396555.html#Feedback0http://www.aygfsteel.com/paulwong/comments/commentRss/396555.htmlhttp://www.aygfsteel.com/paulwong/services/trackbacks/396555.html1、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


paulwong 2013-03-17 12:29 发表评论
]]>
վ֩ģ壺 | | | ͨ| | | Ǧɽ| ǫ| Զ| ʡ| | | ͨ| | | | | Ұ| ˳| | ض| | | | | | | ½| ˼é| | | ˲| Ȫ| ˮ| | | | | ¤| ګ| |