<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    云自無心水自閑

    天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    今天下載了Apache James 3.0 Beta 5, 文件名:james-server-app-3.0.0-beta5-20150627.102412-1076-app.zip
    解壓,運行run.bat

    然后,注冊domain
    james-cli --host localhost adddomain example.com
    添加用戶
    james-cli.bat --host localhost adduser test@example.com password

    然后測試發送郵件,客戶端顯示發送成功,但是james服務器報錯,找不到MimeConfig的無參數構造函數。
    解決方法:
    使用舊的mime4j的jar包替換james 3.0 beta5中自帶的最新包。
    beta5中自帶的是0.8.0版,apache網站中可以下載到0.7.2
    下載apache-mime4j-0.7.2-bin.zip, 將其中的apache-mime4j-core-0.7.2.jar, apache-mime4j-dom-0.7.2.jar復制到james\lib目錄,
    并將其更名覆蓋原有的
    apache-mime4j-core-0.8.0-20150617.024907-738.jar
    apache-mime4j-dom-0.8.0-20150617.024927-735.jar
    重新啟動james, 發送郵件, 成功。

    posted @ 2015-10-08 08:45 云自無心水自閑 閱讀(3277) | 評論 (0)編輯 收藏

         摘要: 解壓/生成有密碼保護的壓縮文件, 研發過程中,作者研究了壓縮文件格式文檔: http://www.pkware.com/documents/casestudies/APPNOTE.TXT,并且參考了7-zip的實現。
      閱讀全文

    posted @ 2015-08-19 10:16 云自無心水自閑 閱讀(9954) | 評論 (0)編輯 收藏

         摘要: 花了兩天時間終于把windows10安裝好了,以下是我的一些個人的體會
      閱讀全文

    posted @ 2015-08-03 18:56 云自無心水自閑 閱讀(6251) | 評論 (0)編輯 收藏

    在JfinalConfig的繼承類中,
    configConstant() 需要設置me.setDevMode(true);

    1. 只有在DevMode下,才能禁止freeMarker的緩存。
    Configuration config = FreeMarkerRender.getConfiguration();
    config.setTemplateUpdateDelayMilliseconds(0);
    才會生效


    2. 這時才會有JFinal Action Report日志輸出

    posted @ 2015-07-24 19:58 云自無心水自閑 閱讀(416) | 評論 (0)編輯 收藏

    本文將簡單介紹如何使用PowerMock和Mockito來mock
    1. 構造函數
    2. 靜態函數
    3. 枚舉實現的單例
    4. 選擇參數值做為函數的返回值
    5. 在調用mock出來的方法中,改變方法參數的值

    一點簡要說明:Mockito其實已經可以滿足大部分的需求,但是它的實現機制是使用cglib來動態創建接口的類的實例。但是這種實現方式不能用于構造函數和靜態函數,因為那需要使用類的字節碼(比如使用javassist). 所以我們才需要結合使用PowerMock.

    1. mock構造函數, 如果有代碼沒有使用DI注入依賴實例,在單元測試中可以使用PowerMock來模擬創建對象。
    注意的開始兩行的2個注解 @RunWith 和 @PrepareForTest
    @RunWith比較簡單,后面始終是PowerMockRunner.class
    @PrepareForText后面需要加的是調用構造函數的類名,而不是有構造函數的類本身。
    在下面的例子中,我們要測試的類是:Helper, 在Helper類中調用了Somthing類的構造函數來創建實例。
    @RunWith(PowerMockRunner.class)
    @PrepareForTest(Helper.
    class)
    public class HelperTest {
      @Mock
      
    private Something mockSomething;
          
      @InjectMocks
      
    private Helper helper;
          
      @Test
      
    public void doSomething() throws Exception {
          String argument 
    = "arg";
              
          PowerMockito.whenNew(Something.
    class).withArguments(argument).thenReturn(mockSomething);
             
          // 調用需要測試方法
          helper.doSomething(argument);
             
          // 進行驗證
          verify(mockSomething).doIt();
      }
    }


    public class Helper {
      public void doSomething(String arg) {
          Something something = new Something(arg);
          something.doit();
      }
    }


    2,mock 靜態函數, 單例模式就是一個典型的會調用靜態函數的例子。 注意要點與mock構造函數相同。
    class ClassWithStatics {
      
    public static String getString() {
        
    return "String";
      }

      
    public static int getInt() {
        
    return 1;
      }
    }

    @RunWith(PowerMockRunner.
    class)
    @PrepareForTest(ClassWithStatics.
    class)
    public class StubJustOneStatic {
      @Test
      
    public void test() {
        PowerMockito.mockStatic(ClassWithStatics.
    class);

        when(ClassWithStatics.getString()).thenReturn(
    "Hello!");

        System.out.println(
    "String: " + ClassWithStatics.getString());
        System.out.println(
    "Int: " + ClassWithStatics.getInt());
      }
    }

    3。mock枚舉實現的單例
    SingletonObject.java
    public enum SingletonObject { 
        INSTANCE
    ;
        private
    int num;
        protected
    void setNum(int num) {
            this.num = num;
        }
        public int getNum() {
            return
    num;
        }

    }
    SingletonConsumer.java

    public class SingletonConsumer {
        public String consumeSingletonObject() { 
            return
    String.valueOf(SingletonObject.INSTANCE.getNum());
        }
    }
    SingletonConsumerTest.java
    @RunWith(PowerMockRunner.class) 
    @PrepareForTest({SingletonObject.class})
    public class SingletonConsumerTest {
        @Test public void testConsumeSingletonObject() throws Exception {
            SingletonObject
    mockInstance = mock(SingletonObject.class);
            Whitebox
    .setInternalState(SingletonObject.class, "INSTANCE", mockInstance);
            when
    (mockInstance.getNum()).thenReturn(42);
            assertEquals
    ("42", new SingletonConsumer().consumeSingletonObject());
        }
    }
    4。返回參數值做為函數返回值。
    mockito 1.9.5之后,提供一個方便的方法來實現這個需要,在這之前可以使用一個匿名函數來返回一個answer來實現。
    when(myMock.myFunction(anyString())).then(returnsFirstArg());
    其中returnsFirstArg()是org.mockito.AdditionalAnswers中的一個靜態方法。
    在這個類中還有其他的一些類似方法
    returnsSecondArg()
    returnsLastArg()
    ReturnsArgumentAt(int position)

    5. 在調用mock出來的方法中,改變方法參數的值
    when( myMock.someMethod( any( List.class ) ) ).thenAnswer( ( new Answer<Void>() {
        @Override
        
    public Void answer( InvocationOnMock invocation )
                
    throws Throwable {
            Object[] args 
    = invocation.getArguments();
            List arg1 
    = (List)args[0];
            arg1.add(
    "12345");
            
    return null;
        }
    } ) );



    Verifying with generic parameters
    verify(someService).process(Matchers.<Collection<Person>>any());
    verify(adunoMasterBaseProcessor).processBinFiles( anyListOf(File.class) );

    posted @ 2015-06-16 21:27 云自無心水自閑 閱讀(18459) | 評論 (0)編輯 收藏

    Oracle提供的JDK其實已經自帶一定程度的熱加載功能,但是如果你修改了類名,方法名,或者添加了新類,新方法的話。
    Tomcat都需要重新啟動來使得剛才的更改生效。
    而JRebel和springloaded都能有效地解決這個問題。其中springloaded是開源軟件,可以免費使用,尤其難得。
    其主頁:https://github.com/spring-projects/spring-loaded
    在官方頁面的簡單介紹中,作者只講述了如何在java程序中應用springloaded,而沒有說明如何在tomcat中進行配置。
    本文將簡要進行介紹。

    1,下載springloaded到本地目錄,比如:c:\temp\springloaded-1.2.3.RELEASE.jar

    2. 修改tomcat的應用,禁止tomcat自己的熱加載,方法是在META-INF目錄下創建context.xml文件,里面包含如下語句,關鍵便是其中設置reloadable為false
    <?xml version="1.0" encoding="UTF-8"?>
    <Context antiResourceLocking="false" privileged="true" useHttpOnly="true" reloadable="false" />

    3.在運行環境中添加springloaded的jar文件,在eclipse中右鍵點擊項目,run as->run configuration
    在彈出的窗口中,選擇Arguments標簽,在vm arguments的末尾添加:
    -javaagent:C:\temp\springloaded-1.2.3.RELEASE.jar -noverify
    點擊應用按鈕。

    以上便完成了所有的配置,步驟并不復雜。

    posted @ 2015-06-11 21:59 云自無心水自閑 閱讀(7714) | 評論 (0)編輯 收藏

    java wrapper是一個可以用于將java應用程序包裝成windows服務的工具。
    并且可以通過簡單的配置來允許使用visualVM進行監控。

    配置方法:
    在wrapper.conf中添加如下3行

    wrapper.java.additional.1=-Dcom.sun.management.jmxremote.port=9898 #這里的端口號可以自行選擇。
    wrapper.java.additional.2=-Dcom.sun.management.jmxremote.ssl=false
    wrapper.java.additional.3=-Dcom.sun.management.jmxremote.authenticate=false

    修改完畢保存后重新啟動服務。

    打開visualVM, 在菜單中選擇 file->Add JMX Connection。
    在彈出窗口中,connection一項中輸入: localhost:9898 即可。

    此配置對于jconsole也同樣有效。

    posted @ 2015-06-11 14:09 云自無心水自閑 閱讀(4817) | 評論 (0)編輯 收藏

    在一些歷史遺留代碼中,會用到java.util.logging. 如果在新的項目中引用了這些代碼,而又不希望去一個一個的修改原來的代碼。
    可以使用slf4j提供的類來轉接這部分的日志輸出。

    方法:
    1、類路徑中添加
        slf4j-api-1.7.10.jar
        jul-to-slf4j.1.7.10.jar ( 用于將java.util.logging的日志橋接到slf4j中)
        logback-core.1.1.2.jar
        logback-classic-1.1.2.jar

    2、在代碼中添加:
             // Optionally remove existing handlers attached to j.u.l root logger
             SLF4JBridgeHandler.removeHandlersForRootLogger();  // (since SLF4J 1.6.5)

             // add SLF4JBridgeHandler to j.u.l's root logger, should be done once during
             // the initialization phase of your application
             SLF4JBridgeHandler.install();

    注意事項:
    1、這個橋接可以會造成性能問題。
    和其他的橋接實現(比如:log4j, commons logging)不同,這個模塊并不真正的完全替代java.util.logging類,因為這個java.util.logging是java自帶的。
    所以只是把原來的日志對象進行了轉換,簡單的說,這個轉換過程是有開銷的。
    關鍵在于,不管日志語句有沒有根據日志級別被關閉,這個轉換無法避免。

    2、不能在類路徑中放入
    slf4j-jkd14.jar
    jul-toslf4j.jar

    posted @ 2015-04-27 15:31 云自無心水自閑 閱讀(1551) | 評論 (0)編輯 收藏

     1. Text Editor: Notepad++/Syncplify.me Notepad!
     2. Browser: Chrome/Firefox
     3. 文件管理: XYplorer Lite/Explorer++/Q-Dir
     4. Mind map: XMind Free
     5. Video player: PotPlayer
     6. Music player: Kugou
     7. Mysql client: HeidiSql
     8. PDF reader: Foxit Reader
     9. File/Folder synchronize : FreeFileSync
    10. MP3 tools: Audacity/MP3 Gain
    11. Zip: 7-zip
    12. Partition Management: EaseUS Partition Master Free / MiniTool Free Partition Manager 
    13. Data Recovery: EaseUS Data Recovery Wizard Free / MiniTool Free Data Recovery
    14. PDF Printer: PDF reDirect v2
    15. 個人信息管理: EssentialPIM Free Edition
    16. 遠程登錄: Terminals
    17. 文本比較合并: winmerge
    18. (s)FTP client: WinSCP
    19. 圖像處理: GIMP

    posted @ 2015-04-14 21:21 云自無心水自閑 閱讀(726) | 評論 (0)編輯 收藏

    Ember 是一個旨在創建大型web應用的JavaScript框架,它消除了樣板(boilerplate)并提供了標準的應用程序架構。

    Manning: Ember.js in action 第一章
    Manning: Ember.js in action 第五章

    posted @ 2015-03-23 12:37 云自無心水自閑 閱讀(3707) | 評論 (1)編輯 收藏

    僅列出標題
    共29頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
    主站蜘蛛池模板: 亚洲国产精品线观看不卡| 国产一精品一aⅴ一免费| 不卡一卡二卡三亚洲| 免费看内射乌克兰女| 日本大片在线看黄a∨免费| 亚洲色精品三区二区一区| 免费的一级黄色片| 美女被暴羞羞免费视频| 亚洲美女在线国产| 国产一级婬片A视频免费观看| 亚洲一级特黄大片在线观看 | 亚洲精品~无码抽插| 精品多毛少妇人妻AV免费久久| 亚洲无人区一区二区三区| av永久免费网站在线观看| 亚洲一区影音先锋色资源| 久久WWW免费人成一看片| 亚洲国产成人久久99精品| 免费看a级黄色片| 成年大片免费高清在线看黄| 亚洲午夜国产精品无码老牛影视| 日本视频免费高清一本18| 亚洲国产av美女网站| 国产青草视频免费观看97| 亚欧洲精品在线视频免费观看 | 亚洲国产高清视频在线观看| 国产在线a免费观看| 黄色毛片免费观看| 亚洲AV无码1区2区久久| 毛片a级毛片免费播放100| 四虎精品免费永久免费视频| 久久久综合亚洲色一区二区三区| 国产v精品成人免费视频400条| 激情无码亚洲一区二区三区 | 亚洲美女视频一区二区三区| 免费无码不卡视频在线观看 | 最近免费中文字幕大全高清大全1| 伊人久久亚洲综合影院首页| 老司机亚洲精品影视www| 免费不卡视频一卡二卡| 四虎永久在线精品免费一区二区|