本文章介绍如何安装、配置和部署BEA的RFID产品,包括BEA Edge Server, BEA Enterprise Server和 BEA Compliance Express。默认的,每个步骤都是接下来步骤的基础。并且该配置是基于WebLogic Server 9.1的,本篇首先介绍BEA Edge Server。

com.connecterra.ale.servicePort = 6060
com.connecterra.ale.savantID = SAVANT_ID
com.connecterra.ale.siteID = SITE_ID
com.connecterra.ale.telemetryPeriod = 5000
或者可以使用Edge Server Configuration Wizard来进行配置,配置过程如下:



com.connecterra.ualegui.edgeServerURLs=http://localhost:6060

安装BEA Edge Server是相对比较容易的,但是需要验证它的工作是否正确就需要我们进一步学习了。使用管理控制台和阅读器模拟器,我们可以快速的配置一个“事件周期”(“Event Cycle Specification”, or “ECSpec”)来模拟读取标签。下面就是创建一个简单的ECSpec并且使用管理控制台的测试特性。
在开始配置前,首先需要理解的一点是RFID应用程序其实就是BEA Edge Server的一个客户端。BEA Edge Server实现了ALE(Application Level Events)规范,ALE客户端需要定义一个ECSpec,然后提交给ALE接口(即Edge Server)。Edge Server使用ECSpec的内容来控制阅读器的限制条件、使用哪个逻辑阅读器、报告返回等等。其中限制条件可能是例如何时开始读卡、何时停止读卡;一个逻辑阅读器是一个任意的RFID阅读点,通常是具有统一命名的一组天线;报告指Edge Server返回给应用程序的信息。
具体操作如下:





在本节配置完成后,我们从逻辑上将实现如下的部署图:

首先,创建第二个阅读器,并且配置Edge Server来使用它



Immediate示例使用ALE“Immediate”方式来演示同步报告发布。
set EDGEHOST=localhost
set EDGEPORT=6060


测试导入的ECSpec:

/**
* ImmediateSample 是使用ALE api 从指定的逻辑读卡器读取一个EPC 列表的小
* 程序
* ECSpec 将从一个XML文件中读取,周期报告也将以XML格式打印出来
*/
public class ImmediateSample
{
//程序的使用说明,其中的命令行参数ecSpecFilename 应该是ECSpec.xml,//aleServiceURL 形如:http://localhost:6060/axis/services/EPCglobalALEService。
private static void usage()
{
System.out.println(
"usage: ImmediateSample ");
System.exit(1);
}
public static void main(String[] args)
{
System.out.println( "Immediate Sample, XML-based" );
//分析命名行参数
if ( args.length != 2 )
usage();
String aleServiceURL = args[0];
String ecSpecFilename = args[1];
try
{
// 创建一个ALE客户端实例
ALE aleClient = new SOAPALEClient(new URL(aleServiceURL));
// 从XML文件读取ECSpec (Event Cycle Specification)
// ECSpec 包括定义事件周期的所有参数,也可以在程序中指定
ECSpec myECSpec = readECSpec(ecSpecFilename);
// 使用 ALE.immediate()方法,发出事件请求
// immediate() 在一个事件周期完成后会阻塞,并且返回报告
System.out.println( " sending request to Edge Server...");
ECReports myECReports = aleClient.immediate(myECSpec);
System.out.println( " ...received response.
");
printECReports(myECReports);
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 从XML文件读取ECSpec的辅助方法
*/
private static ECSpec readECSpec(String ecSpecFilename)
throws IOException,
XMLDeserializerException
{
// ECSpec 和ECReports等对象可以转换为XML 表现形式
// XMLSerializationFactory是一个单态的工厂,从中可以通过转换完成XML
// 的序列化和反序列化
// 下面,使用XML反序列化将XML 中的内容转换为一个ECSpec 对象实例
XMLSerializationFactory factory =
XMLSerializationFactory.getInstance(
XMLSerializationSyntax.EPCGLOBAL_ALE_1_0);
XMLDeserializer deserializer = factory.createDeserializer();
FileReader fileReader = new FileReader(ecSpecFilename);
ECSpec ecSpec = deserializer.deserializeECSpec(fileReader);
return ecSpec;
}
/**
* 将XML形式的ECReports输出到控制台
*/
private static void printECReports(ECReports ecReports)
throws XMLSerializerException,
IOException
{
System.out.println("Received the following ECReports:
");
// XMLSerializationFactory是一个单态的工厂,获取实例
XMLSerializationFactory factory =
XMLSerializationFactory.getInstance(
XMLSerializationSyntax.EPCGLOBAL_ALE_1_0);
XMLSerializer serializer = factory.createSerializer();
//使用XML序列化将ecReports对象实例转化为XML形式,并输出.
Writer w = new OutputStreamWriter(System.out);
serializer.serialize(ecReports, w, true);
w.flush();
}
}

>run.bat urn:epc:tag:gid-64-i:1.4.10
Received the following PCWriteReport: <PCWriteReport date="2005-12-16T16:10:44.265Z" savantID="EdgeServerID" specName= "=0" totalMilliseconds="531" totalTrials="1" xmlns="http://schemas.con necterra.com/alepc"> <applicationData>application specific data can go here</applicationData> <wasSuccessful>true</wasSuccessful> <status>SUCCESSFUL</status> <physicalReaders> <physicalReader>SimReadr</physicalReader> </physicalReaders> <failedLogicalReaders/> <cacheSize>0</cacheSize> <epc>urn:epc:tag:gid-64-i:1.4.10</epc> <successfulLogicalReader>ConnecTerra1</successfulLogicalReader> </PCWriteReport>Press any key to continue . . .
/**
* ImmediateProgramSample 是使用ALEPC api来通过逻辑读卡器将EPC值写入标
* 签的一个简单程序
*/
public class ImmediateProgramSample
{
//程序使用说明
private static void usage()
{
System.out.println("usage: ImmediateProgramSample ");
System.exit(1);
}
public static void main(String[] args)
{
System.out.println( "Immediate Program Sample, XML-based" );
//分析命名行参数
if ( args.length != 3 )
usage();
//程序的使用说明,其中的命令行参数pcSpecFilename 应该是PCSpec.xml,//aleServiceURL 形如:http://localhost:6060/axis/services/EPCglobalALEService。
// epcVal是EPC值
String aleServiceURL = args[0];
String pcSpecFilename = args[1];
String epcVal = args[2];
try
{
// 创建一个ALEPC客户端实例.
ALEPC aleClient = new AxisALEPCClient(new URL(aleServiceURL));
// 从XML文件读取PCSpec (Programming Cycle Specification)
// PCSpec包括定义写入周期的所有参数,也可以在程序中指定
PCSpec pcSpec = readPCSpec(pcSpecFilename);
// 使用ALEPC.immediate()方法,发出事件请求
// immediate() 在一个事件周期完成后会阻塞,并且返回报告
System.out.println( " sending request to Edge Server...");
PCWriteReport writeReport = aleClient.immediate(pcSpec, new URI(epcVal));
System.out.println( " ...received response.
");
printWriteReport(writeReport);
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
*从XML文件读取PCSpec的辅助方法
*/
private static PCSpec readPCSpec(String pcSpecFilename)
throws IOException,
PCXMLDeserializerException
{
// PCSpec和PCWriteReport等对象可以转换为XML 表现形式
// PCXMLSerializationFactory是单态工厂类,从中可以通过转换完成XML
// 的序列化和反序列化
// 下面,使用XML反序列化将XML 中的内容转换为一个PCSpec对象实例
PCXMLSerializationFactory factory = PCXMLSerializationFactory.getInstance();
PCXMLDeserializer deserializer = factory.createDeserializer();
FileReader fileReader = new FileReader(pcSpecFilename);
PCSpec pcSpec = deserializer.deserializePCSpec(fileReader);
return pcSpec;
}
/**
* 将XML形式的PCWriteReport输出到控制台
*/
private static void printWriteReport(PCWriteReport writeReport)
throws PCXMLSerializerException,
IOException
{
System.out.println("Received the following PCWriteReport:
");
//获取PCXMLSerializationFactory的实例,序列化PCWriteReport
PCXMLSerializationFactory factory = PCXMLSerializationFactory.getInstance();
PCXMLSerializer serializer = factory.createSerializer();
//使用XML序列化将writeReport对象实例转化为XML形式,并输出
Writer w = new OutputStreamWriter(System.out);
serializer.serialize(writeReport, w, true);
w.flush();
}
}
本篇我们简单介绍了BEA Edge Server的安装、使用和简单的标签读、写过程,大家可以根据实际情况,在此基础上开发自己的应用。后面我们还会介绍Edge Server中的一些其他读写方式和工作流模块。