posts - 23, comments - 0, trackbacks - 0, articles - 3
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理


          作者: beauty9235  鏈接:http://beauty9235.javaeye.com/blog/229619  發(fā)表時(shí)間: 2008年08月08日

          聲明:本文系JavaEye網(wǎng)站發(fā)布的原創(chuàng)博客文章,未經(jīng)作者書(shū)面許可,嚴(yán)禁任何網(wǎng)站轉(zhuǎn)載本文,否則必將追究法律責(zé)任!

          dwr開(kāi)發(fā)總結(jié) dwr+spring
          參考資料
          http://wiki.javascud.org/display/dwrcn/Spring+Integration
          http://wiki.javascud.org/display/dwrcn/Getting+Started
          測(cè)試http://{your app}//dwr/
          第一步 web.xml
             <!--***********************dwr setting***********************-->
              <servlet>
                  <servlet-name>dwr-invoker</servlet-name>
                  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
                  <init-param>
                      <param-name>debug</param-name>
                      <param-value>true</param-value>
                  </init-param>
              </servlet>

              <servlet-mapping>
                  <servlet-name>dwr-invoker</servlet-name>
                  <url-pattern>/dwr/*</url-pattern>
              </servlet-mapping>
           <!--*********************** spring setting ***********************-->
              <listener>
                  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
              </listener>
              <context-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>
                      /WEB-INF/classes/applicationContext.xml
                  </param-value>
              </context-param>
          第二步  dwr.xml
          <!DOCTYPE dwr PUBLIC
              "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
              "

          <dwr>
            <allow>
              <create creator="new" javascript="JDate">
                <param name="class" value="java.util.Date"/>
              </create>
              <create creator="new" javascript="TestBean">
                <param name="class" value="com.photo.test.TestBean"/>
              </create>
                <create creator="spring" javascript="userAction">          這里交給spring進(jìn)行創(chuàng)建
                    <param name="beanName" value="userAction"/>
                </create>
              <convert converter="bean" match="com.photo.dao.domain.User"/>返回類(lèi)型需要反換的bean
            </allow>
          </dwr>
          第三步 applicationContext.xml
          <beans>   
              <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close" singleton="true">
                 ....
              </bean>
            
              <bean id="userService" class="com.photo.service.UserService">
            ...
           </bean>
               <bean id="userAction" class="com.photo.action.UserAction">  這里是spring創(chuàng)建bean的定義
            <property name="userService" ref="userService"/>         將業(yè)務(wù)層注入
           </bean>

          第四步 類(lèi)、網(wǎng)頁(yè)
           User.java 返回的實(shí)體
           public class User {
               Integer id;
               String username;
               String password;

               public Integer getId() {
                   return id;
               }

               public void setId(Integer id) {
                   this.id = id;
               }

               public String getUsername() {
                   return username;
               }

               public void setUsername(String username) {
                   this.username = username;
               }

               public String getPassword() {
                   return password;
               }

               public void setPassword(String password) {
                   this.password = password;
               }
           }
           UserAction.java dwr框架調(diào)用
           public class UserAction {
            private UserService userService; //spring依賴(lài)注入,實(shí)現(xiàn)與持久層通信
            public void setUserService(UserService userService) {
             this.userService = userService;
            }
            public Map getUserList(String id){
             Map map=new HashMap();
             map.put("userList",userService.queryUser(new User())) ;//查詢(xún)實(shí)體bean User
             map.put("id",id);//用于顯示的div id
             return map ;
            }
           }
           測(cè)試頁(yè)面testajax.html
            <html>
            <head>
                <META http-equiv=Content-Type content="text/html; charset=UTF-8">
                <title>First Example</title>
                <script type='text/javascript' src='/dwr/interface/userAction.js'></script>
                <script type='text/javascript' src='/dwr/engine.js'></script>
                <script type='text/javascript' src='/dwr/util.js'></script>
                <script type="text/javascript">
                    var showUser = function(data) {
                        var id = data["id"];//取出頁(yè)面顯示的id
                        var userList = data["userList"];//取出頁(yè)面顯示的Userlist
                        if ($(id).style.display == "none") {
                            $(id).style.display = "block";
                            var htmlStr = ""; //alert(id);
                            for (var property in userList) {
                                var user = userList[property];
                                htmlStr += user.id + " " + user.username + "  " + user.password + "<br>";
                            }
                            $(id).innerHTML = htmlStr;
                            return;
                        }
                        $(id).style.display = "none";
                    }
                </script>
            </head>
            <body>
            這是觸發(fā)函數(shù)
            <a style="cursor:hand" id="" onclick="userAction.getUserList('div_show',showUser);">show Users</a> <br>
                  這塊區(qū)域用于顯示
            <div id="div_show" style="display:none"></div>
            </body>
            </html>


          本文的討論也很精彩,瀏覽討論>>


          JavaEye推薦



          posted @ 2008-08-18 17:04 beauty9235 閱讀(353) | 評(píng)論 (0)編輯 收藏


          作者: beauty9235  鏈接:http://beauty9235.javaeye.com/blog/229617  發(fā)表時(shí)間: 2008年08月08日

          聲明:本文系JavaEye網(wǎng)站發(fā)布的原創(chuàng)博客文章,未經(jīng)作者書(shū)面許可,嚴(yán)禁任何網(wǎng)站轉(zhuǎn)載本文,否則必將追究法律責(zé)任!

          spring 任務(wù)調(diào)度總結(jié)
          參考資料
          http://www.ibm.com/developerworks/cn/java/j-quartz/
          http://www.opensymphony.com/quartz/download.action

          Java的Timer類(lèi)和OpenSymphony的Quartz調(diào)度器是兩個(gè)流行的調(diào)度API。Spring為這兩個(gè)調(diào)度器提供了一個(gè)抽象層,可以更容易的使用他們


          spring+timer

          1 .使用java Timer調(diào)度任務(wù)
          第一步 web.xml
           <!--*********************** spring setting ***********************-->
              <listener>
                  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
              </listener>
              <context-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>
                      /WEB-INF/classes/applicationContextTimeTask.xml
                  </param-value>
              </context-param>
          第二步  配置applicationContextTimeTask.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<beans>
               <!--
               ****************使用java Timer調(diào)度任務(wù)*********************
               使用java Timer調(diào)度第一步是從java.util.TimerTask派生一個(gè)任務(wù)
               聲明本身只是將EmailReportTask放到應(yīng)用上下文,
              并在testBean屬性裝配TestBean
              在調(diào)度之前不會(huì)做任何事。
              -->
              <bean id="testBean" class="com.photo.test.TestBean"/>
              <bean id="reportTimerTask" class="com.photo.task.EmailReportTask">
                  <property name="testBean">
                      <ref bean="testBean"/>
                  </property>
              </bean>
              <!--
              Spring的ScheduledTimerTimerTask定義了一個(gè)定時(shí)器任務(wù)的運(yùn)行周期。應(yīng)該如下裝配一個(gè)ScheduledTimerTask
              timerTask告訴ScheduledTimerTask運(yùn)行哪個(gè)TimerTask,
              這里該裝配屬性指向reportTimerTask的一個(gè)引用。
              屬性period告訴ScheduledTimerTask以怎樣的頻率調(diào)用TimerTask的run()方法。
              這個(gè)屬性以毫秒作為單位,
              86400000指定該任務(wù)每24小時(shí)運(yùn)行一次
              10X1000
               屬性scheduledTimerTasks  要求一個(gè)需要啟動(dòng)的定時(shí)器任務(wù)列表。
               ScheduledTimerTask有一個(gè)delay屬性, 允許你指定當(dāng)任務(wù)第一次運(yùn)行之前應(yīng)該等多久。
               如,EmailReportTask的第一次運(yùn)行延遲5毫秒
              -->


              <bean id="scheduledReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
                  <property name="timerTask">
                      <ref bean="reportTimerTask"/>
                  </property>
                  <property name="period">
                      <value>10000</value>
                  </property>
                  <property name="delay">
                      <value>5000</value>
                  </property>
              </bean>
              <!--Spring 的TimerFactoryBean負(fù)責(zé)啟動(dòng)定時(shí)任務(wù)。按以下方式在Spring配置文件里聲明它-->
              <bean class="org.springframework.scheduling.timer.TimerFactoryBean">
                  <property name="scheduledTimerTasks">
                      <list>
                          <ref bean="scheduledReportTask"/>
                      </list>
                  </property>
              </bean>
          </beans>  
          第三步 相關(guān)類(lèi)的編寫(xiě)
           EmailReportTask.java
           public class EmailReportTask extends TimerTask {//必需繼承TimerTask
               Log log= LogFactory.getLog(EmailReportTask.class);
               public EmailReportTask() {
               }

               public void run() {//這個(gè)函數(shù)是調(diào)度任務(wù)執(zhí)行的入口
                  log.debug("task begin :"+testBean.greeting);
               }

               private TestBean testBean;//這里實(shí)現(xiàn)spring的依賴(lài)注入

               public void setTestBean(TestBean testBean) {
                   this.testBean = testBean;
               }
           }
           testBean.java
           public class TestBean {
               public String greeting="hello,world";
           }
           
           
          spring+Quartz
          Quartz 作業(yè)調(diào)度框架所提供的 API 在兩方面都表現(xiàn)極佳:既全面強(qiáng)大,又易于使用。Quartz 可以用于簡(jiǎn)單的作業(yè)觸發(fā),也可以用于復(fù)雜的 JDBC 持久的作業(yè)存儲(chǔ)和執(zhí)行。
          第一步  同上
          第二步  配置applicationContextTimeTask.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
          <beans>
          <bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean">
            <property name="jobClass">
             <value>com.photo.task.EmailReportTask2</value>
            </property>
            <property name="jobDataAsMap">
             <map>
              <entry key="testBean">
               <ref bean="testBean"/>
              </entry>
             </map>
            </property>
           </bean>
           <!--用它來(lái)指定一個(gè)工作應(yīng)以怎樣的頻率運(yùn)行,及第一次運(yùn)行工作前應(yīng)等多久-->
           <bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
            <property name="jobDetail">
             <ref bean="reportJob"/>
            </property>
            <property name="startDelay">
             <value>3600000</value>
            </property>
            <property name="repeatInterval">
             <value>86400000</value>
            </property>
           </bean>
          <!--
          CronTriggerBean允許更精確的控制任務(wù)的運(yùn)行時(shí)間。如果要在每天的6:00運(yùn)行任務(wù)可以按照以下方式聲明一個(gè)CronTriggerBean
          0 0 6 * * ?
          jobDetail屬性告訴觸發(fā)器調(diào)度哪一個(gè)工作,屬性cronExpression告訴觸發(fā)器何時(shí)觸發(fā)。一個(gè)cron表達(dá)式至少有6個(gè)由空格分隔的時(shí)間元素(最多7個(gè))從左到右元素定義如下
             1。秒(0-59)
             2。分(0-59)
             3。小時(shí)(0-23)
             4。月份中的日期(1-31)
             5。月份(1-12 或 JAN-DEC)
             6。星期(1-7 或 SUN-SAT)
             7。年份(1970-2099)
            每一個(gè)元素都可以顯示規(guī)定的一個(gè)值,一個(gè)區(qū)間(9-14),一個(gè)列表(9,12,14)或一個(gè)通配符(*)月份中的日期和星期中的日期這兩個(gè)元素時(shí)互斥的一起應(yīng)該通過(guò)設(shè)置一個(gè)問(wèn)號(hào)(?)來(lái)表明不想設(shè)置那個(gè)字段
          對(duì)于cronReportTrigger我們?cè)O(shè)置的cronExpression為 0 0 6 * * ?可以讀作任意月份任何日期的6時(shí)0分0秒執(zhí)行觸發(fā)器
          -->
           <bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail">
             <ref bean="reportJob"/>
            </property>
            <property name="cronExpression">
             <value>0/5 * * * * ?</value>
            </property>
           </bean>
           <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
             <list>
              <ref bean="cronReportTrigger"/>
             </list>
            </property>
           </bean>
          </beans>  
          第三步 相關(guān)類(lèi)的編寫(xiě)  
           EmailReportTask2.java
           public class EmailReportTask2 extends QuartzJobBean {
               Log log = LogFactory.getLog(EmailReportTask.class);

               public EmailReportTask2() {
               }
           //這個(gè)函數(shù)是調(diào)度任務(wù)執(zhí)行的入口
               protected void executeInternal(JobExecutionContext jobExecutionContext) throws org.quartz.JobExecutionException {

                   log.debug("task 2 begin :" + testBean.greeting);
               }


               private TestBean testBean;//這里實(shí)現(xiàn)spring的依賴(lài)注入

               public void setTestBean(TestBean testBean) {
                   this.testBean = testBean;
               }
           }
           TestBean.java 同上


          本文的討論也很精彩,瀏覽討論>>


          JavaEye推薦



          posted @ 2008-08-18 17:04 beauty9235 閱讀(4232) | 評(píng)論 (0)編輯 收藏

          				

          引用地址:http://blog.csdn.net/joohnnie/archive/2004/09/15/105911.aspx

          最近看了一本關(guān)于Hibernate開(kāi)發(fā)的書(shū).自己嘗試了一下.

          1.首先準(zhǔn)備環(huán)境,以下Hibernate及其插件的下載地址 http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc

          2.Hibernate基礎(chǔ)代碼包括

          • POJO
            POJO在Hibernate里應(yīng)該理解成數(shù)據(jù)庫(kù)表所對(duì)應(yīng)的Domain Object.POJO就是“Plain Ordinary Java Object“ 無(wú)格式的普通Java對(duì)象.可以理解為不包含邏輯代碼的值對(duì)象(Value Object)

            public class TUser implements Serializable
            {
            ??????? private String name;

            ??????? public User(String name)
            ?????? {
            ?????????????? this.name = name;
            ??????? }

            ??????? /** default constructor */
            ??????? public User()
            ?????? {
            ???????}

            ??????? public String getName()
            ?????? {
            ?????????????? return this.name;
            ?????? }

            ??????? public void setName(String name)
            ?????? {
            ????????????? this.name = name;
            ???????}
            }


          • Hibernate映射文件
            Hibernate 從本質(zhì)上來(lái)講是一種“對(duì)象-關(guān)系型數(shù)據(jù)映射”(Object Relational
            Mapping 簡(jiǎn)稱(chēng)ORM)。前面的POJO在這里體現(xiàn)的就是ORM中Object層的語(yǔ)義,
            而映射(Mapping)文件則是將對(duì)象(Object)與關(guān)系型數(shù)據(jù)(Relational)相關(guān)聯(lián)的紐帶,在Hibernate中,映射文件通常以“.hbm.xml”作為后綴。

          3.由數(shù)據(jù)庫(kù)來(lái)產(chǎn)生基礎(chǔ)代碼
          ??? Hibernate官方提供的MiddleGen for Hibernate 和Hibernate_Extension工具包,我
          ??? 以很方便的根據(jù)現(xiàn)有數(shù)據(jù)庫(kù),導(dǎo)出數(shù)據(jù)庫(kù)表結(jié)構(gòu),生成ORM和POJO。下面就來(lái)做個(gè)示例.

          4.接壓縮MiddleGen-Hibernate到 C:workMiddleGen.

          5.接壓縮Hibernate 到 C:workHibernate.

          6.接壓縮Extentions到 c:workExtentions

          7.進(jìn)入MiddleGen目錄的configdatabase子目錄.我們這里用的是Sqlserver2000,所以選擇mssql.xml

          ?? 打開(kāi) mssql.xml

          ?? <property name="database.script.file"?????????? value=""/>
          ?? <property name="database.driver.file"?????????? value="${lib.dir}/Sprinta2000.jar"/>
          ?? <property name="database.driver"??????????????? value="com.inet.tds.TdsDriver"/>
          ?? <property name="database.url"?????????????????? value="jdbc:inetdae7:localhost?database=airline"/>
          ?? <property name="database.userid"??????????????? value="sa"/>
          ?? <property name="database.password"????????????? value="sa"/>
          ?? <property name="database.schema"??????????????? value=""/>
          ?? <property name="database.catalog"?????????????? value=""/>

          ?? <property name="jboss.datasource.mapping"?????? value="MS SQLSERVER"/>

          這里修改一下

          我們把下載好的jdbc for sqlserver2000安裝了后,把安裝目錄的lib目錄下面的3個(gè)jar文件放到Middlegen的lib目錄里面.

          ???????? <property name="database.driver.file"?????????? value="${lib.dir}/mssqlserver.jar"/>? //驅(qū)動(dòng)jar文件
          ?????????<property name="database.driver"??????????????? value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>//用winrar打開(kāi)上面的jar文件就可以看到SQLServerDriver.class在jar文件中的路徑了
          ?????????<property name="database.url"?????????????????? value="jdbc:microsoft:sqlserver://localhost:1433;database=Northwind"/>//數(shù)據(jù)庫(kù)的路徑.前面的“jdbc.microsoft.sqlserver“
          ???????? <property name="database.userid"??????????????? value="sa"/>//用戶(hù)名
          ????????<property name="database.password"????????????? value=""/>//密碼
          ????????<property name="database.schema"??????????????? value="dbo"/>//一定要寫(xiě),很重要
          ??????? <property name="database.catalog"?????????????? value="Northwind"/>//一定要寫(xiě)很重要

          8.配置build.xml文件(下面只是個(gè)人做一些測(cè)試,可以根據(jù)自己的需要來(lái)進(jìn)行修改)

          • 查找關(guān)鍵字 ”!ENTITY”,得到:
            ??????? <!DOCTYPE project [
            ???????????????? <!ENTITY database SYSTEM? ?"file:./config/database/hsqldb.xml">
            ??????? ]>

          ????????????????? 因?yàn)槟J(rèn)MiddleGen是采用hsql.xml,所以修改成我們的mssql.xml

          ??????????????????<!DOCTYPE project [
          ??????????????????????????? <!ENTITY database SYSTEM? ?"file:./config/database/hsqldb.xml">
          ????????????????? ]>

          • 修改程序的name

          ????????????? <property name="name" value="airline"/>

          ?????????????? 修改成

          ?????????????? <property name="name" value="sample"/>

          • 修改輸出目錄
            ??? 查找“name="build.gen-src.dir"“
            ?? <property name="build.gen-src.dir" value="${build.dir}/gen-src"/>

          ???????????? 修改成
          ???????????? <property name="build.gen-src.dir" value="c:sample"/>

          • 修改Package 名稱(chēng)

            查找“<hibernate“

          ?????????? <hibernate
          ???????????????????? destination="${build.gen-src.dir}"
          ????????????????????? package="${name}.hibernate"
          ????????????????????? genXDocletTags="false"
          ???????????????????? genIntergratedCompositeKeys="false"
          ???????????????????? javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
          ??????????/>

          ??????????把pachage屬性修改為

          ????????? <hibernate
          ???????????????????? destination="${build.gen-src.dir}"
          ????????????????????? package="org.hibernate.sample"
          ????????????????????? genXDocletTags="true"
          ???????????????????? genIntergratedCompositeKeys="false"
          ???????????????????? javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
          ??????????/>??????????

          ????????? 這里的genXDocletTags是設(shè)置在生成代碼的時(shí)候是否生成XDoclettags,這個(gè)很重要,我們?cè)O(shè)置成true.

          9.配置ant的路徑,解壓縮下載的ant后,比如c:ant

          ? 我們右擊我的電腦->熟悉->高級(jí)->編輯path的熟悉

          ? 在后面加入c:antin

          10.點(diǎn)擊開(kāi)始-->運(yùn)行-->cmd

          ??????? cd到我們的MiddleGen目錄 ,運(yùn)行ant

          ??????? 如果提示連接數(shù)據(jù)庫(kù)失敗的話那就是mssql.xml沒(méi)有配置好

          ??????? 如果顯示連接數(shù)據(jù)庫(kù)成功,沒(méi)有找到table的話就是schemas和catalogs沒(méi)有配置對(duì)了.

          11.如果沒(méi)有出錯(cuò)的話會(huì)啟動(dòng)一個(gè)界面,然后點(diǎn)擊最上面的generae就可以生成POJO文件了.

          posted @ 2006-08-09 16:24 beauty9235 閱讀(246) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共3頁(yè): 上一頁(yè) 1 2 3 
          主站蜘蛛池模板: 吉林市| 邵阳县| 玉山县| 鸡东县| 慈利县| 巴马| 交口县| 宁乡县| 丹棱县| 雷波县| 洪洞县| 孟津县| 喀喇沁旗| 泸定县| 长沙县| 焦作市| 砚山县| 和平县| 开远市| 安化县| 确山县| 禹城市| 正安县| 文山县| 五指山市| 大丰市| 滕州市| 班玛县| 马龙县| 毕节市| 安陆市| 连江县| 永春县| 元朗区| 自贡市| 孟津县| 台东市| 芮城县| 公主岭市| 惠安县| 尼勒克县|