無聊人士

          搬家==》www.soapui.cn

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            32 隨筆 :: 0 文章 :: 60 評論 :: 0 Trackbacks

          #

          最近開始嘗試hibernate annotations,終于成功的將手上一個小應用轉為annotations :)

          1、spring orm support
          與原來使用LocalSessionFactoryBean相比,變動不大(AnnotationSessionFactoryBean本來就是從LocalSessionFactoryBean類繼承過來的嘛)
          ?1????<bean
          ?2?????????id="sessionFactory"
          ?3?????????class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
          ?4?????????parent="AbstractSessionFactory">
          ?5?????????<property?name="annotatedClasses">
          ?6?????????????<list>
          ?7?????????????????<value>xxx.xxx.xxx.domain.Account</value>
          ?8?????????????</list>
          ?9?????????</property>
          10?????</bean>
          11?????<bean
          12?????????id="AbstractSessionFactory"
          13?????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
          14?????????abstract="true">
          15?????????<property
          16?????????????name="dataSource"
          17?????????????ref="DataSource"?/>
          18?????????<property?name="hibernateProperties">
          19?????????????<props>
          20?????????????????<prop?key="hibernate.dialect">${hibernate.dialect}</prop>
          21?????????????????<prop?key="hibernate.show_sql">${hibernate.show_sql}</prop>
          22?????????????????<prop?key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
          23?????????????????<prop?key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
          24?????????????????<prop?key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
          25?????????????</props>
          26?????????</property>
          27?????????<property
          28?????????????name="lobHandler"
          29?????????????ref="DefaultLobHandler"?/>
          30?????</bean>
          2、id的配置
          非常簡單,在id的getter上面加個“@Id”就可以了。此時采用的id策略是javax.persistence.GenerationType.AUTO,也可以再加上“@GeneratedValue(generator =GenerationType.IDENTITY|GenerationType.SEQUENCE|GenerationType.TABLE)”換成其它策略。
          我的應用采用的是hibernate的uuid策略,就不得不在這兒使用hibernate的擴展了
          ??@Id
          ??@Column(length?
          =?32)
          ??@GeneratedValue(generator?
          =?"system-uuid")
          ??@GenericGenerator(name?
          =?"system-uuid",?strategy?=?"uuid")

          3、級聯策略
          在ejb3-persistence.jar中只定義了ALL、MERGE、PERSIST、REFRESH、REMOVE,比較惡心的就是,刪除對象的時候,并不會級聯刪除關聯對象,而是用update xx set parent_id=null where parent_id=?這類語句把關系干掉了事。不得已,在這兒用了hibernate的DELETE_ORPHAN。
          ??@OneToMany(targetEntity?=?Attachment.class)
          ??@Cascade(value?
          =?{org.hibernate.annotations.CascadeType.DELETE_ORPHAN,
          ??????org.hibernate.annotations.CascadeType.ALL})
          ??@JoinColumn(name?
          =?"info_id")
          4、CACHE
          ejb3-persistence.jar里面沒有找到cache的配置,繼續請出hibernate來干活
          import?org.hibernate.annotations.Cache;
          import?org.hibernate.annotations.CacheConcurrencyStrategy;

          @Entity
          @Table(name?
          =?"T_INFO")
          @Cache(usage?
          =?CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
          5、自定義字段類型
          我的POJO中有一個private String content;的屬性,按ejb3配成@Lob后,被處理成了text類型,text 64k的存儲容量還是比較可憐了。
          ??@Lob
          ??@Column(columnDefinition?
          =?"LongText")

          posted @ 2006-10-12 15:38 mmwy 閱讀(4891) | 評論 (0)編輯 收藏

          以如下字符串為例:
          <h1>AVG?Internet?Security?full?license?free?of?charge!</h1>
          <p>GRISOFT
          ,?the?supplier?of?AVG?security?software,?has?released?the?Public?Beta?2?version?of?the?upcoming?AVG?7.5?edition.?Individual?programs?are?now?available?for?testing?purposes?to?everyone.?Why?not?participate?in?our?AVG?beta?testing,?complete?the?questionnaire?about?testing?AVG?7.5?and?get?a?free?license??We?will?draw?100?participants?from?all?of?the?received?feedback?forms.?Winners?will?obtain?a?two-year?license?for?AVG?Internet?Security?7.5?completely?free?of?charge.</p>
          使用RichTextEditor進行編輯時,產生的html有oFCKeditor_InfoEdit_model_content.Value = 'xxx'字樣,由于字符串中包含單引號、雙引號、換行符等字符,編輯器無法進行處理,瀏覽器控制臺報js錯誤。

          在freemarker中提供了一個StringUtil工具,在使用RichTextEditor前,應使用StringUtil.javaStringEnc()進行預處理。
          posted @ 2006-09-25 12:05 mmwy 閱讀(832) | 評論 (1)編輯 收藏

          用webwork 2.2.4、sitemesh 2.2.1、freemarker 2.3.8,操作系統為winxp pro sp2.

          web.xml配置大致如下:

          ?1 ???? < filter >
          ?2 ???????? < filter-name > encodingFilter </ filter-name >
          ?3 ???????? < filter-class > com.yninfo.rules.web.util.CharacterEncodingFilter </ filter-class >
          ?4 ???????? < init-param >
          ?5 ???????????? < param-name > encoding </ param-name >
          ?6 ???????????? < param-value > UTF-8 </ param-value >
          ?7 ???????? </ init-param >
          ?8 ???????? < init-param >
          ?9 ???????????? < param-name > forceEncoding </ param-name >
          10 ???????????? < param-value > true </ param-value >
          11 ???????? </ init-param >
          12 ???? </ filter >
          13 ???? < filter >
          14 ???????? < filter-name > webwork-cleanup </ filter-name >
          15 ???????? < filter-class > com.opensymphony.webwork.dispatcher.ActionContextCleanUp </ filter-class >
          16 ???? </ filter >
          17 ???? < filter >
          18 ???????? < filter-name > sitemesh </ filter-name >
          19 ???????? < filter-class > com.opensymphony.webwork.sitemesh.FreeMarkerPageFilter </ filter-class >
          20 ???? </ filter >
          21 ???? < filter >
          22 ???????? < filter-name > webwork </ filter-name >
          23 ???????? < filter-class > com.opensymphony.webwork.dispatcher.FilterDispatcher </ filter-class >
          24 ???? </ filter >
          25 ???? < filter-mapping >
          26 ???????? < filter-name > webwork-cleanup </ filter-name >
          27 ???????? < url-pattern > *.ftl </ url-pattern >
          28 ???? </ filter-mapping >
          29 ???? < filter-mapping >
          30 ???????? < filter-name > sitemesh </ filter-name >
          31 ???????? < url-pattern > *.ftl </ url-pattern >
          32 ???? </ filter-mapping >
          33 ???? < filter-mapping >
          34 ???????? < filter-name > encodingFilter </ filter-name >
          35 ???????? < url-pattern > *.ftl </ url-pattern >
          36 ???? </ filter-mapping >
          37 ???? < filter-mapping >
          38 ???????? < filter-name > webwork </ filter-name >
          39 ???????? < url-pattern > *.ftl </ url-pattern >
          40 ???? </ filter-mapping >
          41 ???? < filter-mapping >
          42 ???????? < filter-name > webwork </ filter-name >
          43 ???????? < url-pattern > /webwork/* </ url-pattern >
          44 ???? </ filter-mapping >

          xwork.xml配置如下:
          1????????<action
          2????????????name="index"
          3????????????class="com.opensymphony.xwork.ActionSupport">
          4????????????<result
          5????????????????name="success"
          6????????????????type="freemarker">
          7????????????????<param?name="location">/admin/index.ftl</param>
          8????????????</result>
          9????????</action>
          sitemesh 配置如下
          1????<decorator
          2????????name="admin"
          3????????page="/admin/main.ftl">
          4????????<pattern>/admin/*.ftl</pattern>
          5????</decorator>

          在tomcat 5.1.17、resin 3.0.19上跑得順順利利的,一移到weblogic 8.1.5上就報錯
          ?1####<2006-9-8?上午02時46分44秒?CST>?<Error>?<HTTP>?<www-c1f900a12b2>?<myserver>?<ExecuteThread:?'14'?for?queue:?'weblogic.kernel.Default'>?<<WLS?Kernel>>?<>?<BEA-101104>?<Servlet?execution?in?servlet?context?"ServletContext(id=2664121,name=rules,context-path=/rules)"?failed,?java.net.ProtocolException:?Didn't?meet?stated?Content-Length,?wrote:?'4949'?bytes?instead?of?stated:?'4763'?bytes..
          ?2java.net.ProtocolException:?Didn't?meet?stated?Content-Length,?wrote:?'4949'?bytes?instead?of?stated:?'4763'?bytes.
          ?3????at?weblogic.servlet.internal.ServletOutputStreamImpl.ensureContentLength()V(ServletOutputStreamImpl.java:481)
          ?4????at?weblogic.servlet.internal.ServletResponseImpl.ensureContentLength()V(ServletResponseImpl.java:1253)
          ?5????at?weblogic.servlet.internal.ServletResponseImpl.send()V(ServletResponseImpl.java:1265)
          ?6????at?weblogic.servlet.internal.ServletRequestImpl.execute(Lweblogic/kernel/ExecuteThread;)V(ServletRequestImpl.java:2771)
          ?7????at?weblogic.kernel.ExecuteThread.execute(Lweblogic/kernel/ExecuteRequest;)V(ExecuteThread.java:224)
          ?8????at?weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:183)
          ?9????at?java.lang.Thread.startThreadFromVM(Ljava/lang/Thread;)V(Unknown?Source)
          10>?

          折騰了好幾天,各種方式試過,最后還是從sitemesh cvs上下了最新的源碼重新編譯解決問題。
          posted @ 2006-09-13 17:52 mmwy 閱讀(1958) | 評論 (1)編輯 收藏

          感謝google,感謝"webwork2.2.2的富文本編輯器的不完美解決方法"一文,感謝李李。當然,最應該感謝的是開源(刨源代碼刨出來的)。

          1、解決/webwork/*的路徑問題
          解決辦法見“http://www.aygfsteel.com/mmwy/archive/2006/08/18/64234.html
          BTW:也可以象“不完美解決方法”一文中描述的一樣,設webwork.serve.static=false,將static/下的東西拷至/webwork目錄下。

          2、重寫(繼承)DefaultRichtexteditorConnector類,解決無法在windows平臺上創建目錄的問題

          ?1 public ? class ?RichtexteditorConnector? extends ?DefaultRichtexteditorConnector? {
          ?2 ?? /**
          ?3 ???*?解決無法在windows平臺上創建目錄的問題
          ?4 ???*?overriding?methods
          ?5 ???*?(non-Javadoc)
          ?6 ???*? @see ?com.opensymphony.webwork.components.DefaultRichtexteditorConnector#calculateActualServerPath(java.lang.String,?java.lang.String,?java.lang.String)
          ?7 ??? */

          ?8 ?? protected ?String?calculateActualServerPath(String?actualServerPath,
          ?9 ??????String?type,?String?folderPath)? throws ?Exception? {
          10 ????String?path? = ?StringUtils.replaceChars( " file:/// "
          11 ???????? + ?servletContext.getRealPath( " / " ? + ?actualServerPath),? ' \\ ' ,? ' / ' );
          12 ????makeDirIfNotExists(path);
          13 ????path? = ?path.endsWith( " / " )
          14 ?????? ? ?path
          15 ??????:?path? + ? " / " ;
          16 ???? return ?path? + ?type? + ?folderPath;
          17 ??}

          18
          19 ?? private ?ServletContext?servletContext;
          20
          21 ?? public ? void ?setServletContext(ServletContext?servletContext)? {
          22 ???? this .servletContext? = ?servletContext;
          23 ??}

          24 }

          3、配置webwork.xml,解決上傳路徑自定義問題(actualServerPath參數,默認的使用DefaultRichtexteditorConnector類中protected String _actualServerPath = "/com/opensymphony/webwork/static/richtexteditor/data/";的定義),解決獲取上傳文件url路徑問題(默認的使用AbstractRichtexteditorConnector類中String _serverPath = "/webwork/richtexteditor/data/";的定義)

          ?1 ???? < package
          ?2 ???????? name ="richtexteditor-browse"
          ?3 ????????extends ="webwork-default"
          ?4 ????????namespace ="/webwork/richtexteditor/editor/filemanager/browser/default/connectors/jsp" >
          ?5 ???????? < action
          ?6 ???????????? name ="connector"
          ?7 ????????????class ="com.mmwy.weblogic_sitemesh.util.RichtexteditorConnector"
          ?8 ????????????method ="browse" >
          ?9 ???????????? < result
          10 ???????????????? name ="getFolders"
          11 ????????????????type ="richtexteditorGetFolders" ? />
          12 ???????????? < result
          13 ???????????????? name ="getFoldersAndFiles"
          14 ????????????????type ="richtexteditorGetFoldersAndFiles" ? />
          15 ???????????? < result
          16 ???????????????? name ="createFolder"
          17 ????????????????type ="richtexteditorCreateFolder" ? />
          18 ???????????? < result
          19 ???????????????? name ="fileUpload"
          20 ????????????????type ="richtexteditorFileUpload" ? />
          21 ???????????? < param? name ="actualServerPath" > /upload/ </ param >
          22 ???????????? < param? name ="serverPath" > /upload/ </ param >
          23 ???????? </ action >
          24 ???? </ package >
          25
          26 ???? < package
          27 ???????? name ="richtexteditor-upload"
          28 ????????extends ="webwork-default"
          29 ????????namespace ="/webwork/richtexteditor/editor/filemanager/upload" >
          30 ???????? < action
          31 ???????????? name ="uploader"
          32 ????????????class ="com.mmwy.weblogic_sitemesh.util.RichtexteditorConnector"
          33 ????????????method ="upload" >
          34 ???????????? < result? name ="richtexteditorFileUpload" ? />
          35 ???????????? < param? name ="actualServerPath" > /upload/ </ param >
          36 ???????????? < param? name ="serverPath" > /upload/ </ param >
          37 ???????? </ action >
          38 ???? </ package >

          注意:serverPath路徑必須有后面的"/"。

          4、解決獲取上傳文件url只能使用80端口的問題
          順著源碼一直跟進,首先是DefaultRichtexteditorConnector類:

          1 ???? protected ?String?calculateServerPath(String?serverPath,?String?folderPath,?String?type)? throws ?Exception? {
          2 ???????? // return?UrlHelper.buildUrl(serverPath,?_request,?_response,?null,?_request.getScheme(),?true,?true,?true);
          3 ???????? return ?UrlHelper.buildUrl(serverPath + type + folderPath,?_request,?_response,? new ?HashMap(),?_request.getScheme(),? true ,? true ,? true );
          4 ????}

          再跟進UrlHelper.buildUrl方法

          ?1 ???? public ? static ?String?buildUrl(String?action,?HttpServletRequest?request,?HttpServletResponse?response,?Map?params,?String?scheme,? boolean ?includeContext,? boolean ?encodeResult,? boolean ?forceAddSchemeHostAndPort)? {
          ?2 ????????StringBuffer?link? = ? new ?StringBuffer();
          ?3
          ?4 ???????? boolean ?changedScheme? = ? false ;
          ?5
          ?6 ???????? int ?httpPort? = ?DEFAULT_HTTP_PORT;
          ?7
          ?8 ???????? try ? {
          ?9 ????????????httpPort? = ?Integer.parseInt((String)?Configuration.get(WebWorkConstants.WEBWORK_URL_HTTP_PORT));
          10 ????????}
          ? catch ?(Exception?ex)? {
          11 ????????}

          12
          13 ???????? int ?httpsPort? = ?DEFAULT_HTTPS_PORT;
          14
          15 ???????? try ? {
          16 ????????????httpsPort? = ?Integer.parseInt((String)?Configuration.get(WebWorkConstants.WEBWORK_URL_HTTPS_PORT));
          17 ????????}
          ? catch ?(Exception?ex)? {
          18 ????????}

          19

          因此,解決這個問題的方法很簡單,只要在webwork.properties中設webwork.url.http.port = 8080即可。

          5、語言問題
          RichTextEditor標記autoDetectLanguage默認值為true,在中文環境下使用/editor/lang/zh.js,顯示繁體中文字符,而簡體中文應該使用zh-cn.js,因此,應設置defaultLanguage="zh-cn"。

          1 ???????????? < @ww .richtexteditor
          2 ????????????????theme ="simple"
          3 ????????????????defaultLanguage ="zh-cn"
          4 ????????????????width ="750"
          5 ????????????????height ="500"
          6 ????????????????name ="description4" ? />

          ?



          ?

          posted @ 2006-09-11 12:29 mmwy 閱讀(2279) | 評論 (0)編輯 收藏

          在網上google半天也沒見人解決,還是看了FilterDispatcher的源碼才解決,特地貼到blog上,備忘吧。


          在com.opensymphony.webwork.dispatcher.FilterDispatcher中有以下代碼
          1?????????????if?("true".equals(Configuration.get(WebWorkConstants.WEBWORK_SERVE_STATIC_CONTENT))?
          2?????????????????????&&?resourcePath.startsWith("/webwork"))?{
          3?????????????????String?name?=?resourcePath.substring("/webwork".length());
          4?????????????????findStaticResource(name,?response);
          5?????????????}?else?{
          6?????????????????//?this?is?a?normal?request,?let?it?pass?through
          7?????????????????chain.doFilter(request,?response);
          8?????????????}
          也就是說,只要webwork.properties文件中webwork.serve.static=true(系統默認),并且FilterDispatcher這個過濾器對/webwork/*這個url進行了處理的話,就不會發生使用ww2提供的datepicker時,找不到/webwork/*下所有的js、image等資源,不得不手工拷貝webwork.jar中/com/opensymphony/webwork/static為/webwork/*的情況。
          ?1?????<filter>
          ?2?????????<filter-name>webwork</filter-name>
          ?3?????????<filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
          ?4?????</filter>
          ?5?????<filter-mapping>
          ?6?????????<filter-name>webwork</filter-name>
          ?7?????????<url-pattern>*.action</url-pattern>
          ?8?????</filter-mapping>
          ?9?????<filter-mapping>
          10?????????<filter-name>webwork</filter-name>
          11?????????<url-pattern>/webwork/*</url-pattern>
          12?????</filter-mapping>

          posted @ 2006-08-18 02:16 mmwy 閱讀(1553) | 評論 (2)編輯 收藏

          很簡單,就幾個jar包

          1 groovy-all- 1.0 -jsr- 05 .jar
          2 groovysoap-all- 20060503 .jar
          3 activation.jar
          4 log4j- 1.2.13 .jar
          5 mail.jar

          拿以前HelloXfire時的Echo接口做測試,代碼少得可憐

          ?1 import ?groovy.net.soap.SoapClient
          ?2
          ?3 class ?HelloGroovy? {
          ?4
          ?5 ?? static ? void ?main(args)? {
          ?6 ????def?proxy? = ? new ?SoapClient( " http://localhost:8080/query/EchoService?wsdl " );
          ?7 ????System.out.println(proxy.sayHello());?????
          ?8 ??}

          ?9
          10 }

          在Eclipse里面寫完,一運行,出來個“HelloWorld”,順利得讓我簡直不敢相信。
          posted @ 2006-05-06 12:41 mmwy 閱讀(594) | 評論 (1)編輯 收藏

          受白衣同志的當,上了xfire的賊船,拋棄了axis,嗚!

          xfire 1.0終于final了,試用了一下,,感覺同1.0M6相比,使用變化不大。

          看看user guide,照著examples下的例子,基本上hello xfire不成問題。

          1、jar包

          同以往一樣,xfire user guide中的Dependency Guide.html還是說得不明不白,除了讓人發暈,沒有太大的實際意義。

          SNAG-0000.jpg

          注:
          1)XmlSchema-1.0.jar、jakatra commons httpclient/codec只有在Dynamic Client中才需要用。
          2)采用quick start、examples/book中用的service.xml配置方法時,xbean-spring與spring有兼容問題,我用1.2.7、2.0M2的spring時,總是報addPropertyValue(String,Object)之類的異常,換成1.2.6以后一切正常。用examples/spring例子中的配置方法時,沒有出現這種情況。

          2、quick start、examples/book

          這種做法很簡單,好象也不太合我的胃口,就沒仔細折騰。
          (1)在web.xml中配置一下

           1  <servlet>
           2    <servlet-name>XFireServlet</servlet-name>
           3    <display-name>XFire Servlet</display-name>
           4    <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
           5  </servlet>
           6
           7  <servlet-mapping>
           8    <servlet-name>XFireServlet</servlet-name>
           9    <url-pattern>/servlet/XFireServlet/*</url-pattern>
          10  </servlet-mapping>
          11
          12  <servlet-mapping>
          13    <servlet-name>XFireServlet</servlet-name>
          14    <url-pattern>/services/*</url-pattern>
          15  </servlet-mapping>

          (2)編碼。這個不用說,呵呵
          (3)在classpath中,建META-INF/xfire/services.xml配置文件,把剛才做好的webservices配置一下。

          1<beans xmlns="http://xfire.codehaus.org/config/1.0">
          2  <service>
          3    <name>BookService</name>
          4    <namespace>http://xfire.codehaus.org/BookService</namespace>
          5    <serviceClass>org.codehaus.xfire.demo.BookService</serviceClass>
          6  </service>
          7</beans>

          (4)然后就是deploy,訪問http://ip:port/webapp name/BookService?WSDL之類的動作了。

          3、examples/spring

          xfire和spring勾搭得比較緊密啊,只需要簡單配置一下,就可以把spring.xml中配置好的bean拿出來做web services了。
          (1)折騰spring的東西(略)。
          (2)在web.xml中配置一下(注意xfire那一段)

           1    <context-param>
           2        <param-name>contextConfigLocation</param-name>
           3        <param-value>/WEB-INF/applicationContext.xml classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
           4    </context-param>
           5
           6    <listener>
           7        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
           8    </listener>
           9
          10    <servlet>
          11        <servlet-name>xfire</servlet-name>
          12        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          13    </servlet>
          14    <servlet-mapping>
          15        <servlet-name>xfire</servlet-name>
          16        <url-pattern>/*</url-pattern>
          17    </servlet-mapping>

          (3)在WEB-INF/xfire-servlet.xml中把spring bean同xfire webservices“關聯”起來。這個xfire-servlet.xml實際上就是一個標準的spring.xml配置文件。

           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
           3<beans>
           4    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
           5        <property name="urlMap">
           6            <map>
           7                <entry key="/EchoService" value-ref="echo"/>
           8            </map>
           9        </property>
          10    </bean>
          11    
          12    <bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
          13        <property name="serviceFactory" ref="xfire.serviceFactory"/>
          14        <property name="xfire" ref="xfire"/>
          15        <property name="serviceBean" ref="echoBean"/>
          16        <property name="serviceClass" value="org.codehaus.xfire.spring.example.Echo"/>>
          17    </bean>
          18</beans>

          注:第16行,xfire 1.0M6中用serviceInterface,現在改成serviceClass了。

          (4)然后就完工,用http://ip:port/webapp name/xfire/EchoService?WSDL可以看到WSDL內容。

          4、客戶端

          按我的惡習,這類事情,肯定是直接開vs.net或者C# developer來顯擺一下了。不得不承認,.net里面調web services就是方便啊!
          SNAG-0001.jpg
          至于java做client么,以前一般是用axis來生成client class,xfire也提供類似的工具,不過對于xfire來說,最簡單的辦法就是用Dynamic Client,幾行代碼搞定。

          1    Service serviceModel = new ObjectServiceFactory().create(Echo.class);
          2    Echo service = (Echo) new XFireProxyFactory().create(serviceModel,
          3        "http://localhost:8080/xfire-examples/EchoService");
          4    String result = service.echo("ok");


           

          posted @ 2006-03-02 10:47 mmwy 閱讀(11122) | 評論 (13)編輯 收藏

          首先強烈遣責water ye同學不負責任的行為,那家伙在blog上貼了一段spring 2.0m2的test代碼就了事,居然不測試一下,結果俺的spring groovy test代碼折騰半天才過去。

          測試代碼俺就不貼了,spring的配置就夠了
           1 <?xml version="1.0" encoding="GBK"?>
           2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
           3     "http://www.springframework.org/dtd/spring-beans.dtd">
           4 <beans>
           5     <bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor" />
           6     <bean id="inlineMessenger" class="org.springframework.scripting.groovy.GroovyScriptFactory">
           7         <constructor-arg>
           8             <value>inline:
           9                     package spring.groovy;
          10                     
          11                     class GroovyInlineMessenger  implements Messenger{
          12                         void sayHello(){
          13                             System.err.println("Hello");
          14                         }
          15                     }
          16             </value>
          17         </constructor-arg>
          18     </bean>
          19     <bean id="messenger" class="org.springframework.scripting.groovy.GroovyScriptFactory">
          20         <constructor-arg value="classpath:spring/groovy/GroovyMessenger.groovy" />
          21         <property name="message" value="Hello World!" />
          22     </bean>
          23 </beans>

          1、第5行的bean定義一定要有,估計是提前編譯groovy腳本的(具體的可能啃一下源碼就明白了)。
          2、inlineMessenger這個bean的定義,inline一定要緊跟著<value>寫,我為了美觀,弄成下面兩種寫法都沒過去。
           1     <bean id="inlineMessenger" class="org.springframework.scripting.groovy.GroovyScriptFactory">
           2         <constructor-arg>
           3             <value>
           4             inline:
           5                     package spring.groovy;
           6                     
           7                     class GroovyInlineMessenger  implements Messenger{
           8                         void sayHello(){
           9                             System.err.println("Hello");
          10                         }
          11                     }
          12             </value>
          13         </constructor-arg>
          14     </bean>
          1     <bean id="inlineMessenger" class="org.springframework.scripting.groovy.GroovyScriptFactory">
           2         <constructor-arg>
           3             <value>
           4             <![CDATA[inline:
           5                     package spring.groovy;
           6                     
           7                     class GroovyInlineMessenger  implements Messenger{
           8                         void sayHello(){
           9                             System.err.println("Hello");
          10                         }
          11                     }]]>
          12             </value>
          13         </constructor-arg>
          14     </bean>
          寫成這樣倒是過的
           1     <bean id="inlineMessenger" class="org.springframework.scripting.groovy.GroovyScriptFactory">
           2         <constructor-arg>
           3             <value><![CDATA[inline:
           4                     package spring.groovy;
           5                     
           6                     class GroovyInlineMessenger  implements Messenger{
           7                         void sayHello(){
           8                             System.err.println("Hello");
           9                         }
          10                     }]]>
          11             </value>
          12         </constructor-arg>
          13     </bean>
          俺平時習慣讓myeclipse對xml進行格式化,照這么看來,估計一不小心,按個ctrl+shift+F,好端端的spring groovy代碼就過不去了,然后就慢慢找問題吧。

          posted @ 2006-02-07 10:09 mmwy 閱讀(952) | 評論 (0)編輯 收藏


          1、webwork.properties

          ww2.2.1默認的webwork.properties配置已經非常不錯,i18n用utf-8,ioc用spring,fileup用jakarta。因此,我的webwork.properties就只剩兩行
          1 webwork.multipart.maxSize=209715200
          2 webwork.action.extension=ftl #個人惡習,用freemarker做view,再加上不喜歡.action、.do的擴展名,就直接配成ftl了,用frontpage等軟件時也比較方便

          2、web.xml

          ww2.1.7是配servlet的,為了與spring集成,還得加上一個listener
           1     <context-param>
           2         <param-name>contextConfigLocation</param-name>
           3         <param-value>classpath:beans.xml,classpath:com/yninfo/rules/spring.scheduling.xml</param-value>
           4     </context-param>
           5     <listener>
           6         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
           7     </listener>
           8     <listener>
           9         <listener-class>com.opensymphony.xwork.spring.SpringExternalReferenceResolverSetupListener</listener-class>
          10     </listener>
          11     <servlet>
          12         <servlet-name>webwork</servlet-name>
          13         <servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
          14         <load-on-startup>1</load-on-startup>
          15     </servlet>
          16     <servlet-mapping>
          17         <servlet-name>webwork</servlet-name>
          18         <url-pattern>*.ftl</url-pattern>
          19     </servlet-mapping>
          ww2.2.1改成filter,也不需要配listener來處理spring

          3、xwork.xml

          原來的配置
           1 <xwork>
           2     <include file="webwork-default.xml" />
           3     <package name="default" extends="webwork-default"
           4         externalReferenceResolver="com.opensymphony.xwork.spring.SpringExternalReferenceResolver">
           5         <interceptors>
           6             <interceptor name="reference-resolver"
           7                 class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor" />
           8             <interceptor-stack name="default-stack">
           9                 <interceptor-ref name="timer" />
          10                 <interceptor-ref name="logger" />
          11                 <interceptor-ref name="completeStack" />
          12                 <interceptor-ref name="reference-resolver" />
          13             </interceptor-stack>
          14         </interceptors>
          15 
          16         <action name="rule" class="com.yninfo.rules.web.action.RuleAction">
          17             <result name="success" type="freemarker">
          18                 <param name="location">/rule.ftl</param>
          19             </result>
          20             <result name="error" type="freemarker">
          21                 <param name="location">/rule_error.ftl</param>
          22             </result>
          23             <external-ref name="ruleManager">RuleManager</external-ref>
          24         </action>
          25     </package>
          26 </xwork>
          ww2.2.1以后的配置,去掉了上面舊配置中粗體部分
           1 <xwork>
           2     <include file="webwork-default.xml" />
           3     <package name="default" extends="webwork-default">
           4         <interceptors>
           5             <interceptor name="reference-resolver"
           6                 class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor" />
           7             <interceptor-stack name="default-stack">
           8                 <interceptor-ref name="timer" />
           9                 <interceptor-ref name="logger" />
          10                 <interceptor-ref name="completeStack" />
          11             </interceptor-stack>
          12         </interceptors>
          13 
          14         <action name="rule" class="com.yninfo.rules.web.action.RuleAction">
          15             <result name="success" type="freemarker">
          16                 <param name="location">/rule.ftl</param>
          17             </result>
          18             <result name="error" type="freemarker">
          19                 <param name="location">/rule_error.ftl</param>
          20             </result>
          21         </action>
          22     </package>
          23 </xwork>

          4、注意:

          ww2.2.1中ioc使用spring,默認的是byName,要求spring的beans.xml配置文件中id與ww action中的名稱完全相同,由于我個人的惡習,不習慣首字母小寫的寫法,因此,在action中定義private AccountManager accountManager;,在spring中定義bean id="AccountManager",結果spring不能將AccountManager這個bean注入action的accountManager中,拋出NPE的異常
          posted @ 2006-02-04 16:46 mmwy 閱讀(560) | 評論 (1)編輯 收藏

          1、安裝
          從trutix 3.0的碟中,上傳兩個RPM文件DHCP_COM.RPM、DHCP_SER.RPM,然后使用rpm -ivh xxxx.rpm安裝即可。

          2、配置
          root@trustix-v22-cvs-001 ~# cat /etc/dhcpd.conf
          # Do not claim to rule this network.  You want to change this if you really
          # want it to work.
          not authoritative;

          # Do not try to update DNS by default
          ddns-update-style none;

          #網絡
          subnet 61.138.209.0 netmask 255.255.255.0 {
                  range 61.138.209.235 61.138.209.240;  #地址范圍
                  default-lease-time 600;                             #默認租期時間
                  max-lease-time 3600;                               #用戶可以獲得的最長租期時間
                  option subnet-mask 255.255.255.0;         #掩碼
                  option routers 61.138.209.1;                    #網關
                  option domain-name-servers 61.166.150.101; #DNS地址
          }
          #為某個MAC地址綁定IP
          host usr1{
                  hardware ethernet 00:50:8D:5A:9C:E9;
                  fixed-address 61.138.209.235;
          }

          posted @ 2005-12-29 18:07 mmwy 閱讀(450) | 評論 (0)編輯 收藏

          僅列出標題
          共4頁: 上一頁 1 2 3 4 下一頁 
          主站蜘蛛池模板: 恩平市| 惠州市| 虎林市| 神池县| 怀安县| 万山特区| 泗洪县| 固原市| 晋城| 高安市| 万州区| 揭东县| 防城港市| 独山县| 桑植县| 安龙县| 开江县| 唐河县| 延寿县| 长治县| 游戏| 仁寿县| 绍兴县| 嘉义县| 应城市| 贡山| 芜湖县| 阜新| 南城县| 毕节市| 双辽市| 芒康县| 金坛市| 苍溪县| 佛坪县| 杭锦后旗| 莱西市| 文成县| 德清县| 仪征市| 荥阳市|