| |
JavaCard主应用程序开发教程 |
|
时间: 2003-12-09 来自:yesky |
 |
|
生成RMI客户端程序
你可以使用标准的Java RMI编译程序(rmic)生成客户端程序。你必须使用下面格式的命令运行rmic,用于你的小应用程序中的每个远程类:
rmic -v1.2 -classpath path -d output_dir class_name
在这里:
1 -v1.2是一个Java Card RMI客户端框架所需要的标志。
2 - classpath路径标明到远程类的路径。
3 output_dir是存放结果程序的目录。
4 class_name是远程类的名称。
然而,推荐生成RMI客户端程序的方法是使用J2SE SDK 1.3中的动态代理生成机制。如果当你选择JCRMI小应用程序的时候使用CardObjectFactory子类型JCCardProxyFactory的话,JavaCard RMI客户端应用编程接口的2.2版本将为你自动生成程序,你不必再生成程序。这个方法在列表5中说明。
用法限制
因为Java Card是一个有限制的运行时环境,我们可以发现JCRMI的限制。Java Card不支持序列化,并且JCRMI参数和返回值也有限制:
1、每个到远程方法的参数必须是Java Card支持的类型之一,不包括char、double、float、long或多维数组。对于int的支持是自选的。
2、任何远程方法的返回值必须是支持的类型之一,或者void,或者一个远程接口类型。 JCRMI客户应用程序
一个JCRMI客户应用程序类似你前面看到的OCF主应用程序,因为JCRMI客户端应用编程接口依靠OCF用于卡片管理和通讯。
下面的代码片断首先初始化OCF,并且等待智能卡插入。它然后创建一个OCFCardAccessor实现,用于把我们的JCRMI连接到卡片上,如果必要,客户端程序动态生成,小应用程序被选中,我们取得远程引用,最后我们产生到getBalance()的我们的远程调用:
... try { // Initialize OCF SmartCard.start();
// Wait for a smart card CardRequest cr = new CardRequest(CardRequest.NEWCARD, null,OCFCardAccessor.class); SmartCard myCard = SmartCard.waitForCard(cr);
// Get an OCFCardAccessor for Java Card RMI CardAccessor ca = (CardAccessor) myCard.getCardService(OCFCardAccessor.class, true);
// Create a Java Card RMI instance JavaCardRMIConnect jcRMI = new JavaCardRMIConnect(ca);
// Create a Java Card Proxy Factory that is used for dynamic // proxy generation. CardObjectFactory factory = new JCCardProxyFactory(ca); // select the Java Card applet jcRMI.selectApplet(MY_APPLET_AID, factory);
// Get the initial reference MyRemoteInterface myRemoteInterface = (MyRemoteInterface) jcRMI.getInitialReference(); if(myRemoteInterface == null) { throw new Exception("Received null instead of the initial ref"); }
// Invoke the remote getBalance() method short balance = myRemoteInterface.getBalance(); } catch(UserException e) { // Handle exception ... } catch (Exception e){ // Handle exception ... } finally { // Clean up try{ SmartCard.shutdown(); }catch (Exception e){ System.out.println(e); } } | 列表5、示例JCRMI客户端
如你所见,你必须让代码简化。
|
|
|
|
|
|
|
|