在这个由两部分组成的教程系列中,将学习如何设计和构建消息服务应用程序。本文将使用一个 Liberty for Java 应用程序作为示例,您将了解如何集成两个外部消息服务,使用它们的 API,使用 IBM Bluemix™ SQL Database Service 实现持久性,使用 Dojo JavaScript 框架提供一个富 Web 2.0 前端。
在这个由两部分组成的教程系列的第 1 部分中,介绍了应用程序架构,列出了构建一个类似应用程序所需的工具,还分析了获取示例应用程序代码和设置开发环境的步骤。我还将介绍我们的 3 层多消息富 Web 应用程序的设计和实现,分析每一层并提供了重要的代码段。
在第 2 部分中,我们将介绍多消息应用程序部署细节,以及 IBM WebSphere Application Server V8.5 Liberty 配置文件上的本地测试。您还会进一步了解外部消息服务。
如果您尚未向 Bluemix 注册,请获取示例代码和设置您的应用程序,按照第 1 部分 中的介绍完成这些步骤。
要将我们的示例应用程序部署到 Bluemix 上,请执行以下步骤:
要发送 SMS 消息,首先需要在 Nexmo 和 Twilio 上创建您的消息服务帐户。该过程对二者是相同的,但 Twilio 需要一个额外的步骤来获取一个支持 SMS 的电话号码。
点击查看大图
关闭 [x]
AccountSID
和 AuthToken
。单击 Lock 查看 AuthToken
。 备注:为了避免未来产生费用,请在本教程最后释放您的号码,除非您打算继续使用它。
在本教程系列的第 1 部分 中,您在 Eclipse 中安装了 Bluemix 工具,并将 Bluemix 服务器添加到了 Eclipse Servers 列表中。现在,您将在 Eclipse 中设置 Bluemix 服务器并发布您的应用程序。
点击查看大图
关闭 [x]
点击查看大图
关闭 [x]
清单 1. 环境变量
NEXMO_SMS_FROM - obtained in step 2 > Nexmo > 1. example value: 353862335871 (must not prepend + or 00 sign) NEXMO_API_KEY - obtained in step2 > Nexmo > 3. example value: 12345678 NEXMO_API_SECRET - obtained in step2 > Nexmo > 3. example value: 12345678 TWILIO_SMS_FROM - obtained in step2 > Twilio > 4. example value: +353768886708 (must prepend a + sign and no spaces in between) TWILIO_ACCOUNT_SID - obtained in step2 > Twilio > 6. example value: ACe69a03aacff17c501eb1da1e5ee456ee TWILIO_AUTH_TOKEN - obtained in step2 > Twilio > 6. example value: 12345678901234567890123456789012
messages.log
。如果应用程序的行为不符合预期,一定要查看日志。
如果日志中没有错误,那么您的应用程序已成功部署到 Bluemix 上!
Error:Client error - Error performing operation:500 Error
,则表明 Bluemix 服务临时中断。有关的详细信息,请参阅 500 Error with Push 。
如果出现这种情况,请等待服务恢复正常,然后从 Eclipse IDE 删除您的应用程序。为此,请转到 Servers 选项卡,并右键单击 Bluemix server > Remove > Do not remove the DB services during this wizard > Finish 。
再次按照上面的第 3.4 到 3.8 的步骤添加该应用程序。因为您选择保存到清单文件,所以无需再次提供环境变量值。
点击查看大图
关闭 [x]
servername
要创建一个数据库表并插入示例联系人数据,可以使用 IBM Data Studio Client 或 IBM SQL DB Service Web 控制台。
create_tables.sql
和 insert_sample_data.sql
文件分别创建该表和在您的 IBM SQL DB 服务上插入联系人。 USER03749
更新为您在上面的第 3.15 步中获得的名称。 备注:模式名称与 username
相同。
点击查看大图
关闭 [x]
create_tables.sql
。 ContactList
表。 insert_sample_data.sql
重复上面的第 5 和 6 步来填充联系人。 备注:示例 insert_sample.sql
文件已包含一些联系人。使用您自己的数据更新 contactName
和 contactNumber
字段。
备注:不要更改 userid
字段。就现在而言,将它保留为 user1
。请查阅本教程末尾的后续步骤来了解您可以执行的未来增强的详细信息。
如果使用了 IBM SQL DB Service Web 控制台,请执行以下步骤:
备注:有时上面的页面中没有显示模式。可忽略此问题。运行下面这条命令后,模式会自动出现。
清单 2. CREATE TABLE ContactList
CREATE TABLE ContactList ( Id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 MINVALUE -2147483648 MAXVALUE 2147483647 NO CYCLE CACHE 20 NO ORDER ), UserId VARCHAR(128) NOT NULL, ContactName VARCHAR(128) NOT NULL, ContactNumber VARCHAR(128) ) DATA CAPTURE NONE COMPRESS NO; ALTER TABLE ContactList ADD CONSTRAINT ContactList_PK PRIMARY KEY (Id);
清单 3. SQL 插入语句
insert into CONTACTLIST (USERID, CONTACTNAME, CONTACTNUMBER) values ('user1', 'Ahmad', '+353862335871'); insert into CONTACTLIST (USERID, CONTACTNAME, CONTACTNUMBER) values ('user1', 'Roger', '+353861241422');
备注:不要更改 userid
字段。现在,为了简便起见,将它保留为 user1
。请查阅本教程末尾的后续步骤,了解未来增强的详细信息。
Bluemix 提供了两种类型的环境变量:VCAP_SERVICES 和 USER-DEFINED。
VCAP_SERVICES 包含 Bluemix 可绑定服务的连接细节,在我们的例子中是 SQL DB Service。要获得 VCAP_SERVICES,可以登录到 Bluemix,转到您的仪表板和您的空间。单击 CF Apps > Your app > Environment Variables > VCAP_SERVICES 。
USER-DEFINED包含用户定义的变量。在这里,您可以看到您从 Eclipse IDE 发布应用程序时提供的变量。
该应用程序现在已经可用。打开一个新浏览器窗口并输入您的应用程序的 URL:http://<your route>/index.html。例如,示例应用程序的路径为 http://multimessage.mybluemix.net/index.html 。
从 Bluemix 仪表板中获取您应用程序的路径,如下所示。
备注:如果部署中存在错误,或应用程序存在其他问题,可将它们部署在本地来诊断,如第 7 步所述。
以下步骤展示如何在 WebSphere Application Server (WAS) V8.5 Liberty 配置文件本地设置和部署您的应用程序。
点击查看大图
关闭 [x]
webApplication
元素中来配置 dataSource
。 清单 4. 数据源配置
<jdbcDriver id="DB2"> <library name="Db2library"> <fileset dir="C:/software/db2drivers/10.5"/> </library> </jdbcDriver> <dataSource id="SQLDB" jdbcDriverRef="DB2" jndiName="jdbc/idea1-sqldb"> <properties.db2.jcc databaseName="SQLDB" password="123456" serverName="75.126.155.153" user="user03749"/> </dataSource>
"name"
以 jdbc/
为前缀。 "hostname"
"username"
"password"
"db"
db2jcc.jar
的文件夹。提供它在您环境中的位置的路径。按以下方式获取这个 JAR: <IBM Data Studio Client 安装目录>/DS4.1.0/dsdev/jar
中获取 db2cc.jar
文件。 db2cc.jar
: DSClients--jdbc_sqlj-10.5.0.5-FP005 > v10.5fp5_jdbc_sqlj.tar.gz
。 v10.5fp5_jdbc_sqlj/jdbc_sqlj/db2_db2driver_for_jdbc_sqlj/db2jcc.jar
。 /api/contacts/userid/user1
/multimessage/api/contacts/userid/user1
/api/messageservice/sendsms
/multimessage/api/messageservice/sendsms
<您的项目>/src/ com.multimessage.messageservice.nexmo.NexmoMessageSend.java
文件中的 Nexmo API 密钥。 清单 5. Nexmo 密钥
public static String sendSms(String contactNumberTo, String smsText) { Account account = EnvUtils.getcredentials("NEXMO_API_KEY", "NEXMO_API_SECRET","12345678", "12345678");
<您的项目>/src/ com.multimessage.messageservice.nexmo.NexmoMessageSend.java
文件中 Nexmo 的 smsFromNumber
。 return (smsFromNumber == null) ? "353862335871" : smsFromNumber;
<您的项目>/src/ com.multimessage.messageservice.twilio.TwilioMessageSend.java
文件中 Twilio 的 smsFromNumber
。 params.add(new BasicNameValuePair("From", (smsFromNumber == null) ? "+353861800384" : smsFromNumber));
<您的项目>/src/ com.multimessage.messageservice.twilio.TwilioMessageSend.java
文件中 Twilio 的 TWILIO_ACCOUNT_SID
和 TWILIO_AUTH_TOKEN
。 Account twilioAccountCredentials = getcredentials
("TWILIO_ACCOUNT_SID", "TWILIO_AUTH_TOKEN", "AC34567890123456789012345678901234", "1234567890123456789012345678901234");
<您的项目>/src/com.multimessage.db.DbLayer.java
中的 jndiName
字段值 ( idea1-sqldb
) 和 username
字段值 ( user03749
) 更新为您的 Bluemix Database Service 值。 清单 6. 更新 JNDI 名称
privatestatic String getDataSourceName() { String dataSourceName = EnvUtils.getDataSourceName(); if (dataSourceName == null) { return "jdbc/idea1-sqldb"; //update value after / } return dataSourceName ; } publicstatic String getSchemaName() { String schema = EnvUtils.getSchemaName(); if (schema == null) { return "user03749";//update this value } return schema; }
ClassNotFoundException
。要寻求帮助,请参阅这个dW Answers 已知问题和解决方案。这对我很有用。 在这个由两部分组成的教程系列中,我演示了如何设计和构建消息服务应用程序,我使用一个 Liberty for Java 应用程序作为示例,演示了如何集成两个外部消息服务,使用它们的 API、IBM Bluemix SQL Database Service 和 Dojo JavaScript 框架。我们还介绍了一个现有多消息应用程序的从高级设计到低级代码细节的所有方面,演示了该应用程序在 Bluemix 上的部署细节、外部消息服务 API 帐户细节,以及 IBM WebSphere Application Server V8.5 Liberty 配置文件上的本地测试。您现在拥有创建您自己的消息服务应用程序所需的所有信息。如果在阅读这些文章时跟随我执行这些步骤,那么您已经有了一个应用程序。
针对此应用程序的后续步骤包括:
如果您拥有其他改进想法,请将它们添加到文章评论部分。您甚至还可以加入我的多消息项目并更新代码!
BLUEMIX SERVICE USED IN THIS TUTORIAL: SQL Database 服务 向您的应用程序添加一个按需关系数据库。它由 DB2 提供支持,提供了一个托管数据库服务来处理严苛的 Web 和事务工作负载。
相关主题: WASdev 开发人员中心 Bluemix 消息