posted @
2014-03-21 16:50 Terry Zou 閱讀(3433) |
評論 (0) |
編輯 收藏
摘要: JAVA卡介紹
JAVA卡與智能卡
什么是 JAVA 卡呢?JAVA 卡是一種可以運行 JAVA 程序的接觸式微處理器智能卡。1996 年 11 月,JAVA 卡 1.0 版本的規范正式發布了。如今 JAVA&n...
閱讀全文
posted @
2014-03-14 17:48 Terry Zou 閱讀(215) |
評論 (0) |
編輯 收藏
Hibernate 默認總共支持 13 種生成策略 :
1. increment 2. identity 3. sequence
4. hilo 5. seqhilo 6. uuid
7. uuid.hex 8. guid 9. native
10. assigned 11. select 12. foreign 13. sequence-identity
下面介紹幾個較為常用的策略 :
① identity [ 自然遞增 ]
支持 DB2,MySQL,SQL Server,Sybase 和HypersonicSQL 數據庫, 用于為 long 或 short 或 int 類型生成唯一標識。它依賴于底層不同的數據庫,
與 Hibernate 和 程序員無關。
注解示例 :
@Id
@GenericGenerator(name = "idGenerator", strategy = "identity")
@GeneratedValue(generator = "idGenerator")
② sequence [ 序列 ]
支持 Oracle,DB2,PostgreSql,SAPDb 等數據庫,用于為 long 或 short 或 int 類型生成唯一標識。它需要底層數據庫的支持,
并由數據庫來維護這個 sequence 序列。
注解示例 :
@Id
@GenericGenerator(name = "idGenerator", strategy = "sequence",
parameters = {@Parameter(name = "sequence",value="seq_name")})
@GeneratedValue(generator = "idGenerator")
注意 : 該策略要求設定序列名,否則 hibernate 將無法找到,這將引致拋出異常 :
org.hibernate.exception.SQLGrammarException: could not get next sequence value
③ native
需底層數據庫的支持,對于 MySQL,SQL Server 采用 identity 的生成策略,對于 Oracle,則采用 sequence 策略。
注解示例 :
@Id
@GenericGenerator(name = "idGenerator", strategy = "native")
@GeneratedValue(generator = "idGenerator")
④ increment [ 自然遞增 ]
與 identity 策略不同的是,該策略不依賴于底層數據庫,而依賴于 hibernate 本身,用于為 long 或 short 或 int 類型生成唯一標識。
主鍵計數器是由 hibernate 的一個實例來維護,每次自增量為 1,但在集群下不能使用該策略,
否則將引起主鍵沖突的情況,該策略適用于所有關系型數據庫使用。
注解示例 :
@Id
@GenericGenerator(name = "idGenerator", strategy = "increment")
@GeneratedValue(generator = "idGenerator")
⑤ uuid [ 32位16進制數的字符串 ]
采用128位UUID算法生成主鍵,能夠保證網絡環境下的主鍵唯一性,也就能夠保證在不同數據庫及不同服務器下主鍵的唯一性。
uuid 最終被編碼成一個32位16進制數的字符串,
占用的存儲空間較大。用于為 String 類型生成唯一標識,適用于所有關系型數據庫。
注解示例 :
@Id
@GenericGenerator(name = "idGenerator", strategy = "uuid")
@GeneratedValue(generator = "idGenerator")
⑤ assigned [ 手工分配主鍵ID值 ]
該策略要求程序員必須自己維護和管理主鍵,當有數據需要存儲時,程序員必須自己為該數據分配指定一個主鍵ID值,
如果該數據沒有被分配主鍵ID值或分配的值存在重復,則該數據都將無法被持久化且會引起異常的拋出。
注解示例 :
@Id
@GenericGenerator(name = "idGenerator", strategy = "assigned")
@GeneratedValue(generator = "idGenerator")
[ 隨筆均原創,轉載請注明出處:http://www.tkk7.com/fancydeepin ]
posted @
2014-03-06 16:13 Terry Zou 閱讀(212) |
評論 (0) |
編輯 收藏
Android開發的過程中,每次調用startService(Intent)的時候,都會調用該Service對象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些處理。然后我們注意到這個函數有一個int的返回值,這篇文章就是簡單地講講int返回值的作用。
從Android官方文檔中,我們知道onStartCommand有4種返回值:
START_STICKY:如果service進程被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent對象。隨后系統會嘗試重新創建service,由于服務狀態為開始狀態,所以創建服務后一定會調用onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啟動命令被傳遞到service,那么參數Intent將為null。
START_NOT_STICKY:“非粘性的”。使用這個返回值時,如果在執行完onStartCommand后,服務被異常kill掉,系統不會自動重啟該服務。
START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand后,服務被異常kill掉,系統會自動重啟該服務,并將Intent的值傳入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保證服務被kill后一定能重啟。
可能導致異常如下
java.lang.RuntimeException: Unable to start service
serviceName with null: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3221)
at android.app.ActivityThread.access$2100(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1461)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5872)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.ag.rhg.download.DownloadPassService.onStart(Unknown Source)
at android.app.Service.onStartCommand(Service.java:450)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3187)
... 10 more
解決辦法:在Service onStart方法中做判斷
if (null != intent) {
。。。。。。。
}
posted @
2014-02-26 15:50 Terry Zou 閱讀(901) |
評論 (0) |
編輯 收藏
在android系統中,安裝和卸載都會發送廣播,當應用安裝完成后系統會發android.intent.action.PACKAGE_ADDED廣播。可以通過intent.getDataString()獲得所安裝的包名。當卸載程序時系統發android.intent.action.PACKAGE_REMOVED廣播。同樣intent.getDataString()獲得所卸載的包名。
第一、 新建監聽類:BootReceiver繼承BroadcastReceiver

public class BootReceiver extends BroadcastReceiver
{
@Override

public void onReceive(Context context, Intent intent)
{
//接收廣播:系統啟動完成后運行程序

if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
Intent newIntent = new Intent(context, WatchInstall.class);
newIntent.setAction("android.intent.action.MAIN");
newIntent.addCategory("android.intent.category.LAUNCHER");
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(newIntent);
}
//接收廣播:設備上新安裝了一個應用程序包后自動啟動新安裝應用程序。

if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED"))
{
String packageName = intent.getDataString().substring(8);
System.out.println("---------------" + packageName);
Intent newIntent = new Intent();
newIntent.setClassName(packageName,packageName+ .MainActivity");
newIntent.setAction("android.intent.action.MAIN");
newIntent.addCategory("android.intent.category.LAUNCHER");
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(newIntent);
}
//接收廣播:設備上刪除了一個應用程序包。

if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED"))
{
System.out.println("********************************");
DatabaseHelper dbhelper = new DatabaseHelper();
dbhelper.executeSql("delete from users");
}
}

第二、 修改AndroidManifest.xml配置文件 <?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="
package="org.me.watchinstall">
<application>
<receiver android:name=".BootReceiver"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
<!--[color=red] 注意?。?這句必須要加,否則接收不到BroadCast [/color] -->
</intent-filter>
</receiver>
<activity android:name=".WatchInstall" android:label="WatchInstall">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
</manifest>
posted @
2014-02-14 14:37 Terry Zou 閱讀(186) |
評論 (0) |
編輯 收藏
1.new->Java Card Project
2.new->Java Card Applet Class->AID Settings

編寫卡內程序
public class HelloApplet extends Applet {
public static void install(byte[] bArray, short bOffset, byte bLength) {
// GP-compliant JavaCard applet registration
new HelloApplet().register(bArray, (short) (bOffset + 1),
bArray[bOffset]);
}
public void process(APDU apdu) {
// Good practice: Return 9000 on SELECT
if (selectingApplet()) {
return;
}
byte[] buf = apdu.getBuffer();
short offset = ISO7816.OFFSET_CDATA;
switch (buf[ISO7816.OFFSET_INS]) {
case (byte) 0xE2:
buf[offset++] = 0x01;
buf[offset++] = 0x02;
buf[offset++] = 0x03;
buf[offset++] = 0x04;
buf[offset++] = 0x05;
buf[offset++] = 0x06;
apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA, (short)(offset-ISO7816.OFFSET_CDATA));
break;
case (byte) 0xE3:
buf[offset++] = 0x11;
buf[offset++] = 0x12;
buf[offset++] = 0x13;
buf[offset++] = 0x14;
buf[offset++] = 0x15;
buf[offset++] = 0x16;
apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA,(short) (offset-ISO7816.OFFSET_CDATA));
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
}
3.右鍵項目->Run Configurations...->Java Card Application右鍵選擇new->選擇新建的Applet->package Upload->aid
4.新建卡外項目java project
編寫卡內程序如下:
public class TestHelloWorld {
protected static RFCSMXIO smxio = null;
@Before
public void setUp() throws Exception {
smxio = SMXIOFactory.createJDKSMXIO();
}
@Test
public void test() {
try {
byte[] aid = ByteUtil.hexToByteArray("5200413120");
RFCIOResult result = smxio.selectApplet(aid);
int offset = 0;
byte[] apdu = new byte[5];
apdu[offset] = (byte)0x80;
apdu[offset+1] = (byte)0xE2;
apdu[offset+2] = 0;
apdu[offset+3] = 0;
apdu[offset+4] = 0;
result = smxio.exchange(apdu);
System.out.println("result: "+ByteUtil.byteArrayToHex(result.getResult()));
boolean res = RFCSMXIOHelper.processCardIOResult(result);
byte[] b = result.getResult();
if(res){
System.out.println(ByteUtil.byteArrayToHex(b));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
6.安裝卡內程序
jcop debug->upload package->install applet
7.運行卡外程序
posted @
2014-01-23 11:38 Terry Zou 閱讀(190) |
評論 (0) |
編輯 收藏
摘要: Hibernate 參數設置一覽表
SQL方言
1、Hibernate JDBC屬性
屬性名
用途
hibernate.connection.driver_class
jdbc驅動類
hibernate.connection.url
jdbc URL
hibernate.connection.username
數據庫用戶
...
閱讀全文
posted @
2014-01-22 10:18 Terry Zou 閱讀(158) |
評論 (0) |
編輯 收藏
Multiple markers at this line
原因1,這中情況有時候是jar包中缺少需要的類,沒把需要的類打進去
原因2,缺少default.properties文件
從其他工程拷貝一個過來
原因3,沒有jar包,沒有資源文件
工程右鍵 -> Properties ->android ->選擇一個android的版本,(如果已經選擇好了,還是有問題,就先選擇另一個,之后再換回來)
posted @
2014-01-21 15:21 Terry Zou 閱讀(179) |
評論 (0) |
編輯 收藏
1.缺少包commons-collections-3.1.jar
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/LRUMap
at org.hibernate.util.SimpleMRUCache.init(SimpleMRUCache.java:71)
at org.hibernate.util.SimpleMRUCache.<init>(SimpleMRUCache.java:55)
at org.hibernate.engine.query.QueryPlanCache.<init>(QueryPlanCache.java:76)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:239)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at com.rfcyber.rfcepayment.util.jpa.JPAHelper.init(Unknown Source)
at test.TestDataPreparation.setUp(TestDataPreparation.java:52)
at junit.framework.TestCase.runBare(TestCase.java:128)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.map.LRUMap
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 22 more
2.缺jta.jar
java.lang.NoClassDefFoundError: javax/transaction/SystemException
at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:112)
at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:107)
at com.rfcyber.rfcepayment.util.jpa.JPAHelper.getEntityManager(Unknown Source)
at com.rfcyber.rfcepayment.util.jpa.JPADAO.findByJPQL(Unknown Source)
at com.richhouse.personal.service.DPZYTService.searchNextAvaiable(Unknown Source)
at com.richhouse.personal.util.ZYTDPHandler.searchNextAvaiable(Unknown Source)
at com.richhouse.personal.util.ZYTDataPreparation.prepareStoreData(Unknown Source)
at test.TestDataPreparation.testOracleSearchNext(TestDataPreparation.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: javax.transaction.SystemException
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 24 more
posted @
2014-01-15 10:44 Terry Zou 閱讀(296) |
評論 (0) |
編輯 收藏
public static List<ApplicationInfo> getAllInstalledApp(Context context) {
List<ApplicationInfo> installedPackageList = new ArrayList<ApplicationInfo>();
List<ApplicationInfo> list = context.getPackageManager().getInstalledApplications(0);
for (int i = 0; i < list.size(); i++) {
installedPackageList.add(list.get(i));
}
return installedPackageList;
}
posted @
2014-01-14 16:07 Terry Zou 閱讀(165) |
評論 (0) |
編輯 收藏