paulwong

          #

          Java 微信公眾賬號開發平臺 JeeWx 1.0 發布

          JeeWx, 敏捷微信開發,簡稱"捷微".

          捷微是一款免費開源的JAVA微信公眾賬號開發平臺.


          平臺介紹:

           

          一、簡介
          jeewx是一個開源,高效,敏捷的微信開發平臺 , 采用JAVA語言它是基于jeecg這個企業級快速開發框架實現的。
          jeewx的目的是最大化的簡化微信開發的流程,使用開發者能把最好的精力放到微信具體業務開發,并能以最快的時間完成。把一些常規而頻繁的工作交由jeewx來處理即可,平臺兼備的代碼生成器,在線開發,可以快速的完成企業應用。為此jeewx提供了詳細的二次開發文檔,關鍵代碼里還是相關的注釋說明。jeewx采用插件的方式實現微信功能,不同的插件實現不同的微信功能。

           

          主要特性
          1、基于快速開發平臺jeecg 3.4.4最新版本,采用SpringMVC+Hibernate4+UI庫+代碼生成器+Jquery+Ehcache等主流架構技術
          2、支持企業快速開發,完善的用戶組織機構,報表,強大的代碼生成器快速有效的提高開發效率
          2、開源免費,jeewx遵循Apache2開源協議,免費提供使用。
          3、支持多用戶多公眾號管理
          4、詳細的二次開發文檔,并不斷更新增加相關開發案例提供學習參考
          5、微信功能插件化開發,更易于定制和二次開發
          6、提供豐富的微信插件下載安裝使用,總有一些是符合或接近你的需求

           

          主要功能
          1、微信接口認證
          2、菜單自定義
          3、文本管理和回復
          4、關注歡迎語
          5、關鍵字管理
          6、文本消息管理
          7、圖文 消息管理
          8、微信賬號管理
          9、用戶管理
          10、角色管理
          11、菜單管理
          12、微信支持多用戶多公眾號

           

          后續發布功能:
          1、微信大轉盤
          2、微信刮刮樂
          3、微信CMS
          4、周邊
          5、 微信群發
          6、 微信關注用戶分組
          7、微信關注用戶、
          8、微信掃描登錄
          9、會員管理

           

          最低系統需求
          Tomcat6.0 或更高版本。
          MySQL 5.0 或更高版本。

          MyEclipse8.5或其他版本。 

          源碼下載地址:
               https://code.csdn.net/zhangdaiscott/jeewx

          文檔下載地址:

             鏈接: http://pan.baidu.com/s/1i3LxLmH 密碼: j3co 

           

          系統安裝
          1、將jeewx壓縮包解壓并上傳到服務器。
          2、首次在瀏覽器中訪問 http://localhost:8080/jeewx/,默認admin登錄,一個賬號只能配置一個微信公眾賬號。
          3、按照安技術文檔完成安裝,如果有問題請訪問官網討論區尋求幫助。
          4、服務器配置      
                  URL:   http://*地址*/jeewx/wechatController.do?wechat
                Token:  jeecg
          5.云服務平臺建議,可以采用MoPaaS

           

          聯系方式:

          QQ  群 : 287090836,129190229,175449166

          官網:    http://www.jeewx.com
          郵箱:   jeecg@sina.com

           

          系統首頁展示:



           

          posted @ 2014-07-07 15:48 paulwong 閱讀(408) | 評論 (0)編輯 收藏

          NoSql存儲日志數據之Spring+Logback+Hbase深度集成


          http://www.cnblogs.com/xguo/p/3298956.html

          posted @ 2014-07-05 23:14 paulwong 閱讀(743) | 評論 (0)編輯 收藏

          運維工具

          運維神器Chef簡單介紹和安裝筆記
          http://www.cnblogs.com/xguo/p/3785346.html

          posted @ 2014-07-05 23:11 paulwong 閱讀(430) | 評論 (0)編輯 收藏

          Maven安裝jar文件到本地倉庫

          在項目開發期間難免遇遭使用的jar包在Maven的中央倉庫里沒有,比如那個固執的Oracle,這家伙始終不愿意把ojdbc驅動提交到Maven倉庫,這件事很郁悶,Maven又不支持引入本地jar文件如果用IDE強行引入在Maven編譯的時候又無法通過。

          Maven官方提供導入本地jar文件到本地倉庫的maven-install-plugin,可是要用的時候又得苦逼的去找命令,用起來也比較麻煩,因此,本文詳細介紹一下maven-install-plugin插件的使用,可以導入任意數量的jar文件到本地倉庫,是不是很開心那!

          配置POM
          Maven插件maven-install-plugin

          <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.4</version>
              <inherited>false</inherited>
              <executions>
                  <execution>
                      <id>install-artifacts.1</id>
                      <goals>
                          <goal>install-file</goal>
                      </goals>
                      <phase>validate</phase>
                      <configuration>
                          <file>${basedir}/libs/ojdbc14.jar</file>
                          <groupId>org.oracle</groupId>
                          <artifactId>oraclejdbc</artifactId>
                          <packaging>jar</packaging>
                          <version>14</version>
                      </configuration>
                  </execution>
                  <execution>
                      <id>install-artifacts.2</id>
                      <goals>
                          <goal>install-file</goal>
                      </goals>
                      <phase>validate</phase>
                      <configuration>
                          <file>${basedir}/libs/foundation-1.0.jar</file>
                          <groupId>org.bg</groupId>
                          <packaging>jar</packaging>
                          <artifactId>foundation</artifactId>
                          <version>1.0</version>
                      </configuration>
                  </execution>
              </executions>
          </plugin>


          執行導入

          在經過Maven的validate階段時自動導入安裝,在executions里指定插件的goals和maven的phase。
          直接執行命令 mvn install:install-file

          插件屬性

          如果要在導入時生成pom文件,增加配置屬性:
          <generatePom>true</generatePom>

          指定自己的POM文件:

          <generatePom>false</generatePom>
          <pomFile>${basedir}/dependencies/someartifact-1.0.pom</pomFile>
          如果JAR自帶POM文件無需指定此屬性,會自動安裝。

          http://www.cnblogs.com/xguo/archive/2013/06/04/3117894.html

          http://www.cnblogs.com/xguo/archive/2013/06/01/3113146.html

          更多詳細配置:http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html

          最后提示一句,其實Maven生命周期中的每一個階段都是一個插件來實現的,而且都可以單獨拿出來根據你的使用需要來配置。
          詳細請查看http://maven.apache.org/plugins/
          或者
          另一篇Maven相關文章http://www.cnblogs.com/xguo/archive/2013/06/01/3113146.html。

          posted @ 2014-07-05 22:37 paulwong 閱讀(2278) | 評論 (1)編輯 收藏

          Redisclient 1.0 發布,Java 的 Redis 客戶端 GUI 工具

          redisclient 1.0 正式發布,適用于多個 Redis 版本,主要更新內容如下:

          1. 管理 Redis 服務器

          2. 管理 Redis data favorite

          3. 管理 Redis 數據

            • 新 Redis 數據:string, list, hash, set, sorted set

            • 重命名 Redis 數據

            • 刪除 Redis 數據

            • 更新 Redis 數據

            • 剪切,復制,粘貼 Redis 數據

            • 導入,導出 Redis 數據

            • 搜索 Redis 數據

            • 通過關鍵字,數據類型,大小來排序 Redis 數據

            • 導航歷史

          RedisClient 是  Redis 客戶端 GUI 工具,使用 Java swt 和jedis 編寫。它將redis數據以windows資源管理器的界面風格呈現給用戶,可以幫助redis開發人員和維護人員方便的建立,修改,刪除,查詢redis數據,可以讓用戶方便的編輯數據,可以剪切,拷貝,粘貼redis數據,可以導入,導出redis數據,可以對redis數據排序。

          https://github.com/caoxinyu/RedisClient

          posted @ 2014-07-04 21:47 paulwong 閱讀(347) | 評論 (0)編輯 收藏

          DNS收集

          國內

          1.OpenerDNS:42.120.21.30

          2.114DNS:114.114.114.114; 114.114.115.115

          3.oneDNS:112.124.47.27

          4.aliDNS:223.5.5.5;223.6.6.6

          國際:

          1.V2EX DNS:199.91.73.222;178.79.131.110

          2.Google DNS:8.8.8.8;8.8.4.4

          3.OpenDNS:208.67.222.222;208.67.220.220

          posted @ 2014-07-04 12:55 paulwong 閱讀(162) | 評論 (0)編輯 收藏

          Java程序員們最常犯的10個錯誤

          1.將數組轉化為列表

          將數組轉化為一個列表時,程序員們經常這樣做:

          List<String> list = Arrays.asList(arr);

          Arrays.asList()會返回一個ArrayList對象,ArrayList類是Arrays的一個私有靜態類,而不是java.util.ArrayList類,java.util.Arrays.ArrayList類有set()、get()、contains()方法,但是沒有增加元素的方法,所以它的大小是固定的,想要創建一個真正的ArrayList類,你應該這樣做:

          ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

          ArrayList的構造方法可以接受一個集合類型,剛好它也是java.util.Arrays.ArrayList的超類。

          2.判斷一個數組是否包含一個值

          程序員們經常這樣做:

          Set<String> set = new HashSet<String>(Arrays.asList(arr)); 
          return set.contains(targetValue);

          這段代碼起作用,但是沒有必要把一個數組轉化成列表,轉化為列表需要額外的時間。它可以像下面那樣簡單:

          Arrays.asList(arr).contains(targetValue);

          或者是:

          for(String s:arr){
          if(s.equals(targetValue)){
          return true;
          }
          }
          return false;

          第一種方法比第二種更容易讀

          3.在一個循環中刪除一個列表中的元素

          思考下面這一段在循環中刪除多個元素的的代碼

          ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
          for(int i=0;i<list.size();i++){
          list.remove(i);
          }
          System.out.println(list);

          輸出結果是:

          [b,d]

          在這個方法中有一個嚴重的錯誤。當一個元素被刪除時,列表的大小縮小并且下標變化,所以當你想要在一個循環中用下標刪除多個元素的時候,它并不會正常的生效。

          你也許知道在循環中正確的刪除多個元素的方法是使用迭代,并且你知道java中的foreach循環看起來像一個迭代器,但實際上并不是。考慮一下下面的代碼:

          ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));

          for(String s:list){
              if(s.equals("a")){
                list.remove(s);
              }
          }

          它會拋出一個ConcurrentModificationException異常。

          相反下面的顯示正常:

                  ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b",
                          "c", "d"));
                  Iterator<String> iter = list.iterator();
                  while (iter.hasNext()) {
                      String s = iter.next();
                      if (s.equals("a")) {
                          iter.remove();
                      }
                  }

          .next()必須在.remove()之前調用。在一個foreach循環中,編譯器會使.next()在刪除元素之后被調用,因此就會拋出ConcurrentModificationException異常,你也許希望看一下ArrayList.iterator()的源代碼。

          4.Hashtable與HashMap的對比

          就算法而言,哈希表是數據結構的一個名字。但是在java中,這個數據結構的名字是HashMap。Hashtable與HashMap的一個重要不同點是Hashtable是同步的。所以你經常不需要Hashtable,相反HashMap經常會用到。

          具體請看:

          HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap
          Top 10 questions about Map

          5.在集合中使用原始類型

          在Java中原始類型與無界通配符類型很容易混合在一起,拿Set來說,Set是一個原始類型,而Set<?>是無界的通配符類型。
          考慮下面使用原始類型List作為參數的代碼:

          public static void add(List list,Object o){
          list.add(o);
          }
          pulbic static void main(String[] args){
          List<String> list = new ArrayList<String>();
          add(list,10);
          String s = list.get(0);

          這段代碼會拋出一個異常:

          Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

          at ...

          使用原生類型集合是危險的,這是因為原生類型集合跳過了泛型類型檢查,并且不是安全的,在Set、Set<?>和Set<Object>中有很大的不同,具體請看Raw type vs. Unbounded wildcard和Type Erasure。

          6.訪問級別

          程序員們經常使用public作為類字段的修飾符,可以很簡單的通過引用得到值,但這是一個壞的設計,按照經驗,分配給成員變量的訪問級別應該盡可能的低。

          具體請看:public, default, protected, and private

          7.ArrayList與LinkedList的對比

          當程序員們不知道ArrayList與LinkedList的區別時,他們經常使用ArrayList,因為它看起來比較熟悉。
          然而,它們之前有巨大的性能差別。簡而言之,如果有大量的增加刪除操作并且沒有很多的隨機訪問元素的操作,應該首先LinkedList。
          如果你剛接觸它們,請查看ArrayList vs. LinkedList來獲得更多關于它們性能的信息。

          8.可變與不可變

          不可變對象有許多的優點,比如簡單,安全等等。但是對于每一個不同的值都需要一個獨立的對象,太多的對象可能會造成大量的垃圾回收。
          當選擇可變與不可變時應該有一個平衡。
          一般的,可變對象用來避免產生大量的中間對象。一個典型的例子是連接大量的字符串。
          如果你用一個不可變的字符串,你會產生很多需要進行垃圾回收的對象。這很浪費CPU的時間,使用可變對象是正確的解決方案(比如StringBuilder)。

          String result="";
          for(String s: arr){
            result = result + s;
          }

          有時在某些情況下也是需要可變對象的,比如將可變對象作為參數傳入方法,你不用使用很多語句便可以得到多個結果。
          另外一個例子是排序和過濾:當然,你可以寫一個方法來接收原始的集合,并且返回一個排好序的集合,但是那樣對于大的集合就太浪費了。(來自StackOverFlow的dasblinkenlight’s的答案)

          具體請看:Why String is Immutable?

          9.父類與子類的構造函數




          這個編譯期錯誤的出現是父類默認的構造方法未定義,在java中,如果一個類沒有定義構造方法,編譯器會默認的為這個類添加一個無參的構造方法。如果在父類中定義了構造方法,在這個例子中是Super(String s),編譯器就不會添加默認的無參構造方法,這就是上面這個父類的情形。

          子類的構造器,不管是無參還有有參,都會調用父類的無參構造器。因為編譯器試圖在子類的兩個構造方法中添加super()方法。但是父類默認的構造方法未定義,編譯器就會報出這個錯誤信息。

          想要修復這個問題,可以簡單的通過1)在父類中添加一個Super()構造方法,像下面這樣:

          public Super(){
            System.out.println("Super");
          }

          或者2)移除父類自定義的構造方法,或者3)在子類的構造方法中調用父類的super(value)方法。

          具體請看:Constructor of Super and Stub

          10.使用" "還是構造器

          有兩種方式可以創建字符串:

          //1.使用字符串
          String x = "abc";
          //2.使用構造器
          String y = new String("abc");

          有什么區別?

          下面的例子會給出一個快速的答案:

          String a = "abc";
          String b = "abc";
          System.out.println(a==b);//true
          System.out.println(a.equals(b));//true

          String c = new String("abc");
          String d = new String("abc");
          System.out.println(a==b);//false
          System.out.println(a.equals(b));//true

          關于它們內存分配的更多信息,請參考Create Java String Using ” ” or Constructor?.

          將來的工作

          這個列表是我基于大量的github上的開源項目,Stack overflow上的問題,還有一些流行的google搜索的分析。沒有明顯示的評估證明它們是前10,但它們絕對是很常見的。如果您不同意任一部分,請留下您的評論。如果您能提出其它一些常見的錯誤,我將會非常感激。

          原文鏈接: programcreek 翻譯: ImportNew.com - 林林
          譯文鏈接: http://www.importnew.com/12074.html 

          posted @ 2014-07-04 10:44 paulwong 閱讀(301) | 評論 (0)編輯 收藏

          JAVABEAN和JSON STRING互轉

          TestUser.java
          import javax.xml.bind.annotation.XmlRootElement;

          import org.codehaus.jackson.annotate.JsonProperty;

          @XmlRootElement
          public class TestUser {
              
              /*@XmlElement(name="username")*/
              @JsonProperty("username")
              private String userName;
              
              private String email;

              public String getEmail() {
                  return email;
              }

              public String getUserName() {
                  return userName;
              }

              public void setUserName(String userName) {
                  this.userName = userName;
              }

              public void setEmail(String email) {
                  this.email = email;
              }

              @Override
              public String toString() {
                  return "TestUser [userName=" + userName + ", email=" + email + "]";
              }
              
              

          }


          Test.java
          import java.io.IOException;

          import org.codehaus.jackson.JsonParseException;
          import org.codehaus.jackson.map.DeserializationConfig;
          import org.codehaus.jackson.map.JsonMappingException;
          import org.codehaus.jackson.map.ObjectMapper;
          import org.codehaus.jackson.type.TypeReference;
          import org.junit.Test;
          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;


          public class Test {
              
              private Logger logger = LoggerFactory.getLogger(Test.class);
              
              /*private String getBaseUri()
              {
                  return "
          http://192.168.1.223:8080/restfull-api";
              }
          */
              
              @Test
              public void testTest()
              {
                  ObjectMapper mapper = new ObjectMapper();
                  /*AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
                  // make deserializer use JAXB annotations (only)
                  mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
                  // make serializer use JAXB annotations (only)
                  mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
          */
                  mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                  
                  String userStr = "{\"username\":\"paul\",\"email\":\"paul@paul.com\"}";
                  try {
                      TypeReference<TestUser> temp = new TypeReference<TestUser>(){};
                      TestUser testUser = mapper.readValue(userStr, temp);
                      System.out.println(testUser.toString());
                      
                      String result = mapper.writeValueAsString(testUser);
                      System.out.println(result);
                      
                  } catch (JsonParseException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  } catch (JsonMappingException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  } catch (IOException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              }

          }









          posted @ 2014-07-04 09:07 paulwong 閱讀(589) | 評論 (0)編輯 收藏

          2014巴西世界杯淘汰賽賽程

          posted @ 2014-07-03 08:36 paulwong 閱讀(208) | 評論 (0)編輯 收藏

          如何模擬超過 5 萬的并發用戶

          http://www.oschina.net/translate/how-run-load-test-50k-concurrent-users

          posted @ 2014-07-02 09:13 paulwong 閱讀(303) | 評論 (0)編輯 收藏

          僅列出標題
          共115頁: First 上一頁 50 51 52 53 54 55 56 57 58 下一頁 Last 
          主站蜘蛛池模板: 乳山市| 曲阜市| 乐陵市| 翁牛特旗| 临洮县| 青州市| 都江堰市| 印江| 祁东县| 道真| 柏乡县| 阳城县| 盐城市| 依兰县| 晋中市| 凉城县| 临颍县| 随州市| 岳池县| 龙南县| 大港区| 翁牛特旗| 行唐县| 扶风县| 安溪县| 九龙城区| 玛沁县| 高要市| 合肥市| 赤城县| 江门市| 林口县| 哈尔滨市| 绵竹市| 东乌珠穆沁旗| 砀山县| 防城港市| 岚皋县| 永清县| 大港区| 阿拉善左旗|