2014年11月12日 星期三

QuartzSchedulerListener



    <listener>
      <listener-class>
           com.quart.QuartzSchedulerListener
          </listener-class>
    </listener>

2014年11月11日 星期二

Gson add field

http://stackoverflow.com/questions/13024749/gson-add-field-during-serialization

HibernateUtil

http://www.mediatek.com.tw/?a=url&k=86218eff&u=aHR0cDovL3NlZ21lbnRmYXVsdC5jb20vYmxvZy93YW5nZGFpLzExOTAwMDAwMDA2NzM1MzI=&t=SGliZXJuYXRlLWNvcmUgNC4zLjYgRmluYWwg6YWN572u5Lit5Ye6546w55qE5LiA5Lqb5bCP6Zeu6aKYIC0gU2VnbWVudC4uLg==&s=aGliZXJuYXRlNC4zLjbphY3nva4=


package com;

import javax.persistence.EntityManagerFactory;

import org.apache.struts2.ServletActionContext;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
    private org.hibernate.Transaction tx;
    private Session session;
    private static Boolean isAvaliable = true;

    private static final SessionFactory sessionFactory = buildSessionFactory();

    public HibernateUtil(){
        this.session = sessionFactory.openSession();
    }
    private static SessionFactory buildSessionFactory() {
        try {
            Configuration config = new Configuration();
            String sessionFactoryPath = (String) ServletActionContext.getServletContext().getInitParameter("SessionFactoryPath");
            config.configure(sessionFactoryPath);

            return config.buildSessionFactory(new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build());
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }

    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public String[] getColumnNames(Class<?> calsss) {
        ClassMetadata hibernateMetadata = sessionFactory.getClassMetadata(calsss);
        String[] columnNames = hibernateMetadata.getPropertyNames();

        return columnNames;

    }

    public org.hibernate.type.Type[] getColumnTypes(Class<?> calsss) {

        ClassMetadata hibernateMetadata = sessionFactory.getClassMetadata(calsss);
        org.hibernate.type.Type[] columnTypes = hibernateMetadata.getPropertyTypes();
        return columnTypes;

    }

    public Boolean getIsAvaliable() {
        return isAvaliable;
    }

    public Session getSession() {
        return this.session;
    }

    public int sessionBeginTransaction() {
        try {
            tx = session.beginTransaction();
        } catch (HibernateException e) {
            e.printStackTrace();
            return 0;
        }

        return 1;
    }

    public int commitTransactionAndClose() {
        try {
            this.tx.commit();
            System.err.println("commitTransactionAndClose() sus");
            return 1;
        } catch (HibernateException e) {
            if (tx != null)
                tx.rollback();
            e.printStackTrace();

            return 0;
        } finally {
            session.close();

        }

    }

    public Transaction getTransaction() {
        return this.tx;
    }

    public void close() {
        try {
            if (tx != null) {
                if (tx.isActive()) {
                    tx.rollback();
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {

            if (session != null) {
                if (session.isOpen()) {
                    session.close();
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}



20150214
public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            new Configuration().configure().buildSessionFactory(
   new StandardServiceRegistryBuilder().build() );
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
return null;
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}

gson TableExclusionStrategy


 http://hashtagfail.com/post/44606137082/mobile-services-android-serialization-gson
 http://stackoverflow.com/questions/4802887/gson-how-to-exclude-specific-fields-from-serialization-without-annotations


public class TableExclusionStrategy implements ExclusionStrategy{

    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        if(f.getName().equals("transactions")){
            return true;
        }
        if(f.getName().equals("memberowners")){
            return true;
        }
        return false;
    }

    @Override
    public boolean shouldSkipClass(Class<?> f) {
       
           return false;
    }

}

2014年11月10日 星期一

ATTRIBUTE NAME: " + field.getName()

http://stackoverflow.com/questions/1038308/how-to-get-the-list-of-all-attributes-of-a-java-object-using-beanutils-introspec


java得到類別名稱

         String name = "godleon";
           Class stringClass = name.getClass();

           System.out.println("類別名稱:" + stringClass.getName());
           System.out.println("getSimpleName:" + stringClass.getSimpleName());
           System.out.println("是否為介面:" + stringClass.isInterface());
           System.out.println("是否為基本型態:" + stringClass.isPrimitive());
           System.out.println("是否為陣列物件:" + stringClass.isArray());
           System.out.println("父類別名稱:" + stringClass.getSuperclass().getName());

2014年11月7日 星期五

BufferedReader example ->texttoInsertSql

 texttoInsertSql:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package acerrcode;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author linkulife
 */
public class AcerRcode {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

       
        File file = null;

        file = new File("D:\\keith\\linkulife\\AcerRcode.txt");
       readfileByLine(file);

    }

    public static void readfileByLine(File file) {
        ArrayList<String[]> list = new ArrayList<String[]>();
        InputStreamReader isr = null;
        try {
            try {
                isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
            } catch (UnsupportedEncodingException ex) {
                Logger.getLogger(AcerRcode.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(AcerRcode.class.getName()).log(Level.SEVERE, null, ex);
        }
        BufferedReader br = new BufferedReader(isr);
        String str = null;

        try {
            while((str = br.readLine())!=null){
              
                 list.add(parseTosql(str));
            }
           
        } catch (IOException ex) {
            Logger.getLogger(AcerRcode.class.getName()).log(Level.SEVERE, null, ex);
        }
        //System.out.println(Arrays.toString(list));

    }

    public static String[] parseTosql(String line) {
        String[] linearray = line.split("\\s+");
        //System.out.println(Arrays.toString(linearray));
        String sql=setToSql(linearray[0],linearray[1],linearray[2],linearray[3]);
        System.out.println(sql);
        return linearray;
      
    }

    public static String setToSql(String acerCode, String acerResponse, String ewalletCode, String appShowMsg) {
        String temp = "INSERT INTO `ewalletValue`.`acerResponse` (`acerResponseId`, `acerCode`, `acerResponse`, `ewalletCode`, `appShowMsg`) VALUES (NULL"
                + ", '" + acerCode + "', '" + acerResponse + "', '" + ewalletCode + "', '" + appShowMsg + "');";
        return temp;
    }

}

input:
00    授權成功    A00    交易成功
01    請查詢發卡銀行    A01    交易失敗(A01):請洽原發卡行
02    請查詢發卡銀行    A02    交易失敗(A02):請洽原發卡行
03    未核准之特約店    A03    交易失敗(A03):請洽客服
04    非正常卡    A04    交易失敗(A04):卡片異常,請洽原發卡行
05    拒絕交易    A05    交易失敗(A05):拒絕交易,請洽客服
12    本交易不接受    A12    交易失敗(A12):拒絕交易,請洽客服
13    金額不符    A13    交易失敗(A13):請洽客服
14    帳號不符    A14    交易失敗(A14):請洽客服
15    原發卡行不符    A15    交易失敗(A15):請洽客服
19    請重試交易    A19    交易失敗(A19):請洽原發卡行確認交易結果
25    請查詢銀行    A25    交易失敗(A25):請洽原發卡行
30    請查詢銀行    A30    交易失敗(A30):請洽原發卡行
31    本交易不接受    A31    交易失敗(A31):拒絕交易,請洽客服
41    非正常卡    A41    交易失敗(A41):卡片異常,請洽原發卡行
43    非正常卡    A43    交易失敗(A43):卡片異常,請洽原發卡行
51    餘額不足    A51    交易失敗(A51):額度不足,請洽原發卡行
54    卡片過期    A54    交易失敗(A54):卡片過期,請洽原發卡行
55    密碼錯誤    A55    交易失敗(A55):請洽客服
57    本交易不接受    A57    交易失敗(A57):拒絕交易,請洽客服
58    本交易不接受    A58    交易失敗(A58):拒絕交易,請洽客服
59    無此帳號    A59    交易失敗(A59):請洽客服
61    提款超過限額    A61    交易失敗(A61):請洽原發卡行
62    非正常卡    A62    交易失敗(A62):卡片異常,請洽原發卡行
63    主機安全碼有誤    A63    交易失敗(A63):請洽客服
75    密碼超過次數    A75    交易失敗(A75):請洽客服
77    總額不符    A77    交易失敗(A77):請洽客服
79    批號已開啟    A79    交易失敗(A79):請洽客服
80    批號錯誤    A80    交易失敗(A80):請洽客服
85    無此批號    A85    交易失敗(A85):請洽客服
88    特約店帳號不符    A88    交易失敗(A88):請洽客服
89    終端機號錯誤    A89    交易失敗(A89):請洽客服
91    請查詢發卡銀行    A91    交易失敗(A91):請洽原發卡行
94    傳輸重覆    A94    交易失敗(A94):請洽客服
95    檔案傳輸中    A95    交易失敗(A95):請洽客服
96    主機系統故障    A96    交易失敗(A96):請洽客服
outpunt

2014年11月6日 星期四

log4j to separate log files

http://stackoverflow.com/questions/9652032/how-can-i-create-2-separate-log-files-with-one-log4j-config-file

# Define the root logger with appender file A1
log4j.rootLogger = INFO,stdout,detail
#log4j.category.* private static Logger log = Logger.getLogger("struts2");
log4j.category.struts2 = WARN,struts2
#private static Logger log = Logger.getLogger("error");
log4j.category.error = ERROR,error

log4j.category.org.hibernate = INFO,hibernatelog


# Direct log messages to a log file
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File=/opt/apache-tomcat-7.0.54/webapps/mwallet/error.log
log4j.appender.error.DatePattern='.'yyyy-MM-dd
log4j.appender.error.MaxFileSize=10MB
log4j.appender.error.MaxBackupIndex=100
log4j.appender.error.Append=true
 log4j.appender.error.encoding=UTF-8
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p](%F:%L) - %m%n

# Direct log messages to a log file
log4j.appender.struts2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.struts2.File=/opt/apache-tomcat-7.0.54/webapps/mwallet/struts2ex.log
log4j.appender.struts2.DatePattern='.'yyyy-MM-dd
log4j.appender.struts2.MaxFileSize=10MB
log4j.appender.struts2.MaxBackupIndex=100
log4j.appender.struts2.Append=true
 log4j.appender.struts2.encoding=UTF-8
log4j.appender.struts2.layout=org.apache.log4j.PatternLayout
log4j.appender.struts2.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p](%F:%L) - %m%n
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p](%F:%L) - %m%n
# Direct log messages to a hibernatelog file
log4j.appender.hibernatelog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.hibernatelog.File=/opt/apache-tomcat-7.0.54/webapps/mwallet/hibernatelog.log
log4j.appender.hibernatelog.DatePattern='.'yyyy-MM-dd
log4j.appender.hibernatelog.MaxFileSize=10MB
log4j.appender.hibernatelog.MaxBackupIndex=100
log4j.appender.hibernatelog.Append=true
log4j.appender.hibernatelog.layout=org.apache.log4j.PatternLayout
log4j.appender.hibernatelog.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p](%F:%L) - %m%n

# Direct log messages to a detail file
log4j.appender.detail=org.apache.log4j.DailyRollingFileAppender
log4j.appender.detail.File=/opt/apache-tomcat-7.0.54/webapps/mwallet/detail.log
log4j.appender.detail.DatePattern='.'yyyy-MM-dd
log4j.appender.detail.MaxFileSize=10MB
log4j.appender.detail.MaxBackupIndex=100
log4j.appender.detail.Append=true
log4j.appender.detail.layout=org.apache.log4j.PatternLayout
log4j.appender.detail.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p](%F:%L) - %m%n


# hibernate
org.hibernate.tool.hbm2ddl=hibernatelog

DaoFactory greendao

http://android.hew.io/octa-george/android-greendao-sample

1.https://github.com/SureCase/GreenDaoForAndroidStudio

Download module

2.

Add module to project

3.

Connect generator with project

4.

Run module

5.

Make project aware of GreenDao files

6.
  • Project is still not aware of new Java files because it isn't located in ../<PROJECT NAME>/src/main/java directory. To fix this we must specify projects source sets. It is important to point two java file sources: /src/main/java and /src/main/java-gen. You can do it by placing sourceSets section into android section in gradle.build file:

android {
 
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java', 'src/main/java-gen']
res.srcDirs = ['src/main/res']
}
}
}




package citygo.ewallet.com.facebookexample;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import dao.BoxDao;
import dao.DaoMaster;
import dao.DaoSession;
import de.greenrobot.dao.AbstractDao;

/**
 * Created by linkulife on 2014/11/5.
 */
public class DaoFactory {
    private DaoSession daoSession;
    private static DaoFactory daoFactory;
    public   static DaoFactory getInstance(){
        if(daoFactory==null){
            daoFactory = new DaoFactory();
        }
        return daoFactory;
    }
    public void init(Context context){
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "example-db", null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }

    public DaoSession getDaoSession() {
        return daoSession;
    }
    public void beginTransaction(AbstractDao dao){
        dao.getDatabase().beginTransaction();
    }

    public void rollback(AbstractDao dao){
        dao.getDatabase().endTransaction();
    }
    public void commit(AbstractDao dao){
        dao.getDatabase().setTransactionSuccessful();
        dao.getDatabase().endTransaction();
    }


    public void setDaoSession(DaoSession daoSession) {
        this.daoSession = daoSession;
    }
    public BoxDao getBoxDao(){
        return daoSession.getBoxDao();
    }

}


public class DaoExampleApplication extends Application {



    @Override
    public void onCreate() {
        super.onCreate();
        DaoFactory.getInstance().init(this);
    }

}



使用:
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        QueryBuilder.LOG_SQL = true;
        QueryBuilder.LOG_VALUES = true;



        BoxDao b = DaoFactory.getInstance().getBoxDao();

        b.deleteAll();
        Box box= new Box();
        box.setDescription("de");
        box.setName("name");


        b.insertOrReplace(box);


        DaoFactory.getInstance().beginTransaction(b);
        Box box1= new Box();
        box1.setName("name2");
        b.insert(box1);
        DaoFactory.getInstance().rollback(b);


        List<Box> all = b.loadAll();
        for(Box bb:all){
            Log.d("",""+bb.getName());
        }



    }




    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:name=".DaoExampleApplication"
        >



package ex.lfo.com.myapplicationex;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import de.greenrobot.dao.query.QueryBuilder;
import greendao.BoxDao;
import greendao.DaoMaster;
import greendao.DaoSession;

/**
 * Created by Administrator on 2015/2/14.
 */
public class Orm {
    private static Orm instance=null;


    private  SQLiteOpenHelper helper;
    private SQLiteDatabase db;
    private DaoMaster daoMaster;

    private Orm(Context context){
        QueryBuilder.LOG_SQL = true;
        QueryBuilder.LOG_VALUES = true;

        initDb(context);
    }

    private void initDb(Context context) {
         helper = new DaoMaster.DevOpenHelper(context, "box", null);
         db = helper.getWritableDatabase();
         daoMaster = new DaoMaster(db);

    }

    public DaoSession getDaoSession(){
        DaoSession daoSession = daoMaster.newSession();
       // BoxDao boxDao= daoSession.getBoxDao();

       return daoSession;
    }

    public static Orm getInstance(Context context ){

        if(instance==null){

            instance=new  Orm(context);
        }
        return instance;
    }

}

2014年11月5日 星期三

Android Icons

http://www.creativefreedom.co.uk/icon-designers-blog/android-4-1-icon-size-guide-made-simple/


2014年11月1日 星期六

MYSQL找出兩個月前


SELECT * FROM `servicecard` where `update_date` > (DATE_SUB(CURDATE(), INTERVAL 2 MONTH))

兩個月前

http://stackoverflow.com/questions/2793619/mysql-query-working-with-interval-and-curdate