第Ⅰ部分 EJB体系结构和概念 3
第1章 Enterprise JavaBeans概述 3
1.1 服务器端组件的体系结构 3
目录 3
1.1.1 背景 4
1.2 为什么使用EJB 5
1.2.1 对象分布 5
1.2.2 可移植的面向组件的体系结构 5
1.2.5 事务管理 6
1.2.6 多数据源的事务功能 6
1.2.4 独立于数据库模式 6
1.2.3 对象持久性 6
1.2.7 中间层体系结构 7
1.2.8 多种客户端类型访问共享数据 7
1.2.9 并发读取和更新共享数据访问 7
1.2.10 方法级别的对象安全性 7
1.2.11 使用多服务器解决吞吐量和可用性问题 8
1.2.12 与CORBA集成 8
1.3.1 J2EE服务概要 9
1.2.13 开发角色 9
1.3 J2EE 9
1.3.2 Java servlet和JavaServer Page(JSP) 10
1.3.3 Enterprise JavaBeans(EJB) 10
1.3.4 JDBC 10
1.3.8 Java Mail 11
1.3.10 Java事务API(JTA)和Java事务服务(JTS) 11
1.3.9 Java Activation Framework(JAF) 11
1.3.7 Java消息服务(JMS) 11
1.3.6 Java命名和目录接口(JNDI) 11
1.3.5 Java远程方法调用与RMI-IIOP 11
1.3.11 Java IDL 12
1.3.12 J2EE体系结构概述 12
1.3.13 IBM产品和J2EE 13
1.4 EJB规范 13
1.4.1 EJB 1.0 14
1.4.2 EJB 1.1 15
1.4.3 EJB 2.0 16
1.5.1 本地接口 17
1.4.4 EJB的限制概要 17
1.5 EJB 2.0概览 17
1.5.2 容器管理的持久性(CMP) 18
1.5.3 容器管理的关系(CMR) 18
1.5.4 EJB查询语言 19
1.5.5 EJB home方法 19
1.5.6 消息驱动bean 19
1.6.2 CORBA概览 20
1.6.1 分布式面向组件应用程序 20
1.6 对历史的简短回顾 20
1.5.7 依赖性值类(Dependent value class) 20
1.6.3 RMI概览 21
1.6.4 RMI over IIOP 21
1.6.5 从CORBA到EJB 21
1.6.6 Enterprise JavaBeans 22
1.6.7 EJB与CORBA协同工作 23
1.8.4 部署 24
1.8.3 开发 24
1.8.2 重用或开发 24
1.8.1 应用服务器市场分析 24
1.8 端到端企业应用开发 24
1.7 采用EJB技术 24
1.9 小结 25
第2章 EJB体系结构及概念 26
2.1 简介 26
2.2 EJB角色 27
2.3 EJB框架组件 28
2.3.1 EJB服务器 28
2.3.2 EJB容器 29
2.3.3 EJB组件(真正的EJB) 31
2.3.4 EJB接口以及EJB bean 32
2.3.5 EJB部署描述符 41
2.3.6 EJB客户端视图 42
2.3.7 客户端EJB交互 44
2.4 远程和本地接口的比较 45
2.5 回顾bean-container contract 46
2.6 EJB框架小结 47
2.7.1 Bean类型分类回顾 48
2.7.2 EJB类型的附加细目 48
2.7 Enterprise bean的类型:回顾 48
2.8 EJB开发和部署过程 49
2.8.1 EJB开发 49
2.8.2 EJB部署 49
2.9 开发一个EJB:示例应用程序 50
2.9.1 为EJB建模 50
2.9.2 寻找候选EJB 50
2.9.3 应用程序概念 51
2.9.4 ITSO银行模型 52
2.10 小结 53
第3章 Entity Bean 54
3.1 简介 54
3.2 Entity bean的概念 55
3.2.1 Entity bean类型 55
3.2.2 容器管理的持久性(CMP) 55
3.2.3 Bean管理持久性entity bean 57
3.2.4 选择CMP或BMP 57
3.2.5 bean之选择与否 58
3.2.6 Bean识别——主键 58
3.2.7 Entity bean结构 59
3.3 Bean-container contract 60
3.3.1 实例池 60
3.3.2 Entity bean的状态 60
3.4 Entity bean的生命周期 62
3.4.1 生命周期——创建entity bean 63
3.4.2 生命周期——查找存在的entity bean 66
3.4.3 生命周期——使用entity bean 68
3.4.4 生命周期——删除entity bean 71
3.5.1 持久性字段 73
3.5 抽象持久性模式映射 73
3.5.2 创建持久性代码 74
3.6 开发entity bean:Customer 75
3.6.1 构建entity bean 75
3.6.2 扩展的customer entity需求 75
3.6.3 构建本地组件接口 76
3.6.4 主键类 76
3.6.5 构建本地home接口 77
3.6.6 构建bean类 77
3.6.7 构建BMP entity bean 78
3.6.8 部署描述符 80
3.7 Entity bean设计和构造的最佳实践 81
3.8 Entity bean的客户端视图 82
3.8.1 查找bean home 82
3.8.2 Bean生命周期的客户端视图 82
3.9 小结 84
第4章 高级Entity bean:关系、继承、定制查询 85
4.1 介绍 85
4.2.1 重新介绍银行模型 86
4.2 EJB容器管理关系(CMR) 86
4.2.2 EJB 2.0与CMR 88
4.2.3 关系术语 88
4.2.4 关系类型 89
4.2.5 EJB 2.0关系 90
4.2.6 在部署描述符中声明关系 92
4.2.7 CMR编程模型 96
4.2.8 在关系中EJB的角色和责任 97
4.2.9 EJB 2.0关系问题 98
4.3 EJB继承 98
4.3.2 继承概览 99
4.3.1 银行示例 99
4.3.3 对于继承模型的映射模式 100
4.3.4 实现EJB继承 101
4.3.5 继承的部署描述符 103
4.4 EJB定制查询方法 104
4.4.1 定制查询方法的定义 104
4.4.2 CMP entity bean finder方法和select方法的定义 105
4.4.3 生命周期序列——查询方法 108
4.4.4 添加查询方法到bean类 109
4.5.1 抽象持久性模式 110
4.5 EJB查询语言(EJB QL) 110
4.5.2 Bean和部署描述符映射 111
4.5.3 EJB QL语法 113
4.5.4 WebSphere的EJB QL扩展 117
4.5.5 WebSphere企业扩展 120
4.5.6 动态查询简介 122
4.6 Entity bean开发的高级概念 123
4.6.1 关系数据库映射 123
4.6.2 扩展banking entity需求 123
4.6.3 Entity bean结构 125
4.6.4 部署描述符更新 130
4.6.5 查询语言示例 131
4.6.6 Home方法 132
4.7 Entity bean最佳设计和构造实践 133
4.8 高级entity bean概念的客户端视图 133
4.8.1 关系编程 133
4.8.2 继承编程 134
4.8.3 使用客户finder方法 135
4.9 小结 136
第5章 Session bean 137
5.1 简介 137
5.2 Session bean的概念 137
5.2.1 Session bean的类型 138
5.2.2 Stateless session bean 138
5.2.3 Stateful session bean 139
5.2.4 选择stateful session bean或stateless session bean 141
5.2.5 Session bean类型结构 143
5.3.1 Session bean的状态 144
5.3 Bean-container合同 144
5.4 Session bean的生命周期顺序 147
5.4.1 Stateless session bean的生命周期 147
5.4.2 Stateful session bean生命周期 149
5.5 开发session bean 153
5.5.1 创建session bean 153
5.5.2 扩展在线银行的需求 153
5.5.3 构建远程组件接口 155
5.5.4 创建远程home接口 156
5.5.5 创建bean类 157
5.5.6 部署描述符 161
5.6 设计和构建Session bean的最佳实践 162
5.7 Session bean的客户端视图 163
5.7.1 查找bean home 163
5.7.2 Session bean生命周期的客户端视图 163
5.8 小结 166
第6章 Message-driven bean 167
6.1 简介 167
6.1.1 异步消息 167
6.1.3 Message-driven bean简介 168
6.1.2 JMS和JMS提供者的角色 168
6.2 Java消息服务的概念 169
6.2.1 JMS消息模型 169
6.2.2 Message-driven bean和消息模型 169
6.2.3 JMS组件 170
6.2.4 JMS管理对象 170
6.2.5 JMS交互的示例 171
6.2.6 消息 173
6.3.2 Message-driven bean的结构 174
6.3 Message-driven bean的概念 174
6.3.1 扩展JMS模型到MDB 174
6.3.3 无home或组件接口 175
6.3.4 回调方法 175
6.3.5 Bean-container contract 176
6.4 开发message-driven bean 178
6.4.1 构建message-driven bean 178
6.4.2 扩展在线银行的需求 178
6.4.3 设计消息的有效载荷 179
6.4.5 构建MDB bean类 180
6.4.4 什么是应答 180
6.4.6 部署描述符 181
6.5 MDB客户端编程 182
6.5.1 相关性标识(Correlation ID) 182
6.5.2 消息类型 183
6.5.3 超时 183
6.6 Message-driven bean交互模式 183
6.6.1 消息交互 183
6.6.2 即发即弃(Fire-and-forget) 183
6.6.5 异步请求/应答(Asynchronous request/reply) 184
6.6.6 发布和订阅模式 184
6.6.3 即发即行(Fire-and-forward) 184
6.6.4 准同步请求/应答(pseudo-synchronous request/reply) 184
6.7 message-driven bean最佳实践 185
6.8 小结 186
第7章 EJB客户端 187
7.1 客户端类型 187
7.1.1 Session bean 187
7.1.2 Servlet 187
7.1.3 应用程序客户端 189
7.2.1 Home接口 190
7.2 如何访问EJB 190
7.2.2 基本编程规则 191
7.2.3 获得一个初始命名上下文 191
7.2.4 从初始上下文中查找EJB home 192
7.2.5 使用EJB home 192
7.2.6 操作EJB引用 193
7.2.7 跟踪关系 193
7.2.8 Finder方法 194
7.2.9 继承 194
7.2.10 EJB客户端应用程序示例 195
7.2.11 编程限制 196
7.3 使用access bean 197
7.4 对entity bean使用session facade 197
7.4.1 Facade session bean 197
7.4.2 Facade session设计 198
7.4.3 为session facade使用access bean 199
7.5 客户端比较 199
7.5.1 直接访问 199
7.5.3 Facade bean 200
7.5.2 Access bean 200
7.5.4 方法的摘要说明 201
7.5.5 选择哪一类客户端 202
7.6 Home工厂模式 202
7.6.1 结构 203
7.6.2 实现 204
7.6.3 应用程序示例:现代home工厂 207
7.7 小结 208
8.2 事务 209
8.1 简介 209
第8章 补充概念:事务、异常、安全 209
8.2.1 事务示例:银行转账 210
8.2.2 事务的ACID特性 211
8.2.3 Java事务服务(JTS) 211
8.2.4 J2EE中的事务支持 212
8.2.5 EJB事务划分 213
8.2.6 Bean管理事务(BMT) 213
8.2.7 容器管理事务(CMT) 214
8.2.8 在事务中管理数据访问 217
8.2.10 隔离级别 218
8.2.9 数据库锁策略 218
8.2.11 JDBC中的隔离级别 219
8.2.12 资源访问意向 220
8.2.13 事务性编程考虑因素 224
8.2.14 事务与message-driven bean 224
8.2.15 会话同步接口 226
8.2.16 使用事务的指导方针 226
8.2.17 关于应用程序事务编程的指导方针 227
8.3 EJB异常处理 228
8.3.1 Checked和unchecked异常 229
8.3.2 异常与EJB 229
8.3.3 程序异常 230
8.3.4 EJB标准程序异常 230
8.3.5 Bean处理程序异常 231
8.3.6 标准EJB程序异常的增强 232
8.3.7 系统异常 232
8.3.8 EJB系统异常的解释 233
8.3.9 Bean对系统异常的处理 235
8.3.11 Message-bean的异常处理 236
8.3.10 异常的客户端视图 236
8.4 安全性 237
8.4.1 EJB安全性的目标 238
8.4.2 安全性体系结构概述 238
8.4.3 WebSphere安全层 238
8.4.4 EJB安全性细节 243
8.4.5 最佳实践:授权策略矩阵 247
8.4.6 联系一切 247
8.5 小结 248
9.2 WebSphere Studio Workbench 251
9.1 WebSphere Studio Application Developer 251
第Ⅱ部分 使用Application Developer开发测试EJB第9章 WebSphere Studio Appli-cationDeve loper 251
9.2.1 工作区 252
9.2.2 用户接口 252
9.3 Workbench窗口 253
9.4 透视图和视图 253
9.4.1 透视图基础 254
9.4.2 视图和编辑器 254
9.4.3 定制透视图 256
9.4.4 New图标 257
9.4.5 Web透视图 258
9.4.6 Java透视图 259
9.4.7 J2EE透视图 260
9.4.8 Data透视图 261
9.4.9 XML透视图 261
9.4.10 Server透视图 263
9.4.11 Debug透视图 263
9.4.12 CVS Repository Exploring透视图 264
9.4.13 帮助信息 265
9.4.14 内存考虑事项 265
9.5.1 Java项目 266
9.5 项目 266
9.5.2 EAR项目 268
9.5.3 Web项目 270
9.5.4 Struts 271
9.5.5 EJB项目 272
9.5.6 服务器项目 273
9.6 服务器 274
9.6.1 服务器配置 275
9.6.2 启动和停止服务器 277
9.7 EJB开发环境 278
9.6.3 远程服务器 278
9.6.4 Agent Controller 278
第10章 应用程序示例的介绍和准备 280
10.1 Bank模型 280
10.2 Bank数据库 281
10.2.1 表 281
10.2.2 触发器 285
10.2.3 数据库定义DDL 286
10.2.4 数据库内容 289
10.3.1 工作区 291
10.2.5 创建EJBBANK数据库和表 291
10.3 准备Application Developer 291
10.3.2 准备J2EE1.3企业应用程序 292
10.3.3 命名规则 292
10.3.4 创建企业应用程序 292
10.3.5 模块相关性 294
10.3.6 准备WebSphere测试环境 294
10.3.9 给服务器添加企业应用程序 295
10.3.8 服务器 295
10.3.7 服务器项目 295
10.3.10 使用数据源来配置服务器 296
10.3.11 Utility项目 299
10.3.12 实现home工厂 301
10.3.13 模块相关性 302
10.4 小结 302
第11章 容器管理entity bean的开发 303
11.1 开发account CMP entity bean 303
11.1.1 使用Enterprise Bean Creation向导开发CMP 303
11.1.2 创建CMP entity bean 304
11.1.3 生成的类 307
11.1.4 生成的部署描述符 310
11.1.5 修整创建方法 312
11.1.6 向enterprise bean中添加业务逻辑 313
11.1.7 部署 315
11.1.8 把entity bean映射到表 315
11.1.9 生成部署代码 319
11.1.10 完成部署描述符 320
11.2.1 通用测试客户端 321
11.2 测试enterprise bean 321
11.3 开发用户和事务记录EJB 326
11.3.1 客户EJB 326
11.3.2 为地址信息实现JavaBean 327
11.3.3 实现客户EJB 328
11.3.4 事务记录EJB 329
11.3.5 实现事务记录EJB 329
11.3.6 客户与事务记录bean的映射 331
11.3.7 生成部署代码 331
11.3.8 在通用测试客户端中测试EJB 332
11.4 开发关系 333
11.4.1 Application Developer中对于关系的支持 333
11.4.2 把账户定义到事务记录关系中 335
11.4.3 为事务记录进行代码定制 336
11.4.4 定义customer与account关系 337
11.4.5 顾客对账户的代码定制 338
11.4.6 创建远程方法 339
11.4.7 JNDI名称和引用 339
11.4.8 映射关系 341
11.4.10 在通用测试客户端中测试关系 342
11.4.9 为关系生成部署代码 342
11.5 开发继承结构 343
11.5.1 Application Developer对继承的支持 343
11.5.2 定义继承结构 343
11.5.3 完善生成的代码 344
11.5.4 继承bean的关系 346
11.5.5 关于继承的映射方法 346
11.5.6 映射账户继承结构 347
11.5.8 在通用测试客户端测试继承 348
11.5.7 为继承生成部署代码 348
11.6 清除模型 349
11.7 部署custom finder 349
11.7.1 创建一个简单的custom finder方法 350
11.7.2 使用关系和继承创建finder方法 353
11.7.3 在bean类中创建select方法 354
11.8 开发home方法 356
11.9 为finder和select方法生成代码 357
12.1 映射策略 359
12.1.1 自顶向下(Top-down) 359
第12章 CMP的映射策略 359
12.1.2 自底向上(Bottom-up) 361
12.1.3 中间匹配(Meet-in the-middle) 362
12.2 映射示例 363
12.2.1 EJBBANK数据库的自底向上映射 363
12.2.2 Bank模型的自顶向下映射 366
12.2.3 将CMP映射到多个表 368
12.2.4 映射关系 368
12.2.6 映射相关值类 369
12.2.5 映射继承 369
12.3 转换器和组合器 370
12.3.1 使用组合器 370
12.3.2 使用转换器 375
第13章 Bean-管理entity bean的开发 376
13.1 Bean管理的持久性 376
13.2 为什么需要BMP 376
13.3 建议 377
13.3.1 BMP作为CMP的子类(subclass) 377
13.4 开发BMP entity bean 377
13.4.3 创建超类CMP entity bean 378
13.4.2 为BMP entity bean创建EJB项目 378
13.4.1 包含用户信息的表格 378
13.4.4 键类 379
13.4.5 创建BMP entity bean 380
13.4.6 抽象方法 382
13.4.7 定义持久性字段 383
13.4.8 创建带有参数的方法 383
13.4.9 查看bean中的方法 383
13.4.10 实现bean方法 385
13.4.11 完成BMP entity bean 387
13.4.13 完成部署描述符 388
13.4.12 提升业务方法 388
13.4.14 实现持久类 390
13.5 生成部署代码 395
13.6 创建数据库表 395
13.6.1 生成DDL 395
13.6.2 运行DDL 396
13.6.3 加载示例数据 397
13.7 测试BMP entity bean 397
13.8 只读方法 398
13.9 小结 399
13.9.1 BMP entity bean的优缺点 400
13.9.2 访问意向 400
第14章 开发session bean 401
14.1 设计 401
14.1.1 Home生成器 402
14.1.2 Session bean异常 402
14.2 开发stateless session bean 402
14.2.1 为session bean创建EJB项目 402
14.2.2 为banking事务创建session bean 403
14.2.3 访问CMP entity home 404
14.2.4 实现业务逻辑 407
14.2.5 设置部署属性 413
14.2.6 生成部署代码 414
14.2.7 在通用测试客户端中测试业务逻辑 414
14.3 开发一个stateful session bean 416
14.3.1 设计问题 416
14.3.2 创建一个stateful session bean 416
14.3.3 处理Home引用 418
14.3.4 实现业务逻辑 419
14.3.5 测试stateful session bean 425
14.4 由session bean创建Web Service 426
14.4.1 创建Web service 426
14.4.2 用生成的测试客户端来测试Web service 427
14.4.3 用通用测试客户端测试Web service 428
14.4.4 分析生成的代码 428
14.5 小结 428
第15章 EJB access bean 429
15.1 什么是access bean 429
15.1.1 EJB生成器 429
15.1.2 数据类 430
15.1.3 JavaBean封装 431
15.1.4 Copy helper 432
15.1.5 Access bean和关系 433
15.2 开发access bean 433
15.2.1 开发数据类 433
15.2.2 生成access bean 434
15.2.3 生成部署代码 435
15.2.4 生成JavaBean封装 435
15.2.5 测试access bean 436
15.3 小结 437
第16章 开发message-driven bean 438
16.1 设计 438
16.1.1 命名约定 439
16.2 开发message-driven bean 439
16.2.1 创建数据传输对象 439
16.2.2 创建message-driven bean 440
16.2.3 实现MDB 442
16.2.4 设置部署信息 445
16.3.1 服务器配置 447
16.3 设置服务器 447
16.4 Message-driven bean客户端 450
16.4.1 Servlet客户端 450
16.4.2 J2EE应用程序客户端 454
16.5 测试MDB 455
16.6 事物类型 455
16.7 小结 456
第17章 客户端开发 457
17.1 客户端类型 457
17.2.2 资源和资源环境引用 458
17.2 引用 458
17.2.1 EJB引用 458
17.2.3 在客户端代码中使用引用 459
17.3 开发servlet客户端 459
17.3.1 运行示例 460
17.3.2 Web项目 461
17.3.3 创建servlet 461
17.3.4 创建HTML页面 462
17.3.5 完成servlet 464
17.3.6 创建JSP 470
17.3.8 测试Web客户端 475
17.3.7 Web应用程序部署描述符 475
17.4 开发基于Struts的Web客户端 476
17.4.1 什么是Struts 476
17.4.2 使用MVC框架的Struts 476
17.4.3 Application Developer对Struts的支持 477
17.4.4 创建Struts Web项目 478
17.4.5 创建Struts Web图 479
17.4.6 定义应用程序资源 480
17.4.8 实现表单bean 481
17.4.7 实现Web应用程序 481
17.4.9 实现输入JSP 483
17.4.10 实现action 484
17.4.11 实现输出JSP 487
17.4.12 完成Web图连接 487
17.4.13 Struts配置文件 488
17.4.14 Web应用程序部署描述符 488
17.4.15 测试Struts客户端 488
17.6.1 创建应用程序客户端项目 489
17.6 开发message-driven bean客户端 489
17.5 J2EE客户端容器 489
17.6.2 创建MDB客户端类 490
17.6.3 部署描述符 492
17.6.4 在Application Developer中运行应用程序客户端 494
17.6.5 在Application Developer外运行客户端 496
17.6.6 应用程序客户端资源配置工具 497
17.6.7 部署WebSphere 499
17.7 使用access bean的GUI客户端 499
17.7.1 创建GUI应用程序客户端 499
17.7.2 完成代码 500
17.7.4 测试GUI客户端 503
17.7.3 配置启动器 503
17.8 使用Web service的客户端 504
17.9 外部化字符串 505
17.9.1 查找需要外部化的字符串 505
17.9.2 外部化的结果文件 507
17.10 小结 508
18.1.1 使用Application Developer管理部署描述符 509
18.1.2 EJB模块 509
18.1 企业应用程序 509
第18章 企业应用程序的部署 509
18.1.3 Web模块 510
18.1.4 应用程序客户端模块 510
18.2 配置WebSphere Application Server 510
18.2.1 启动服务器和管理控制台 510
18.2.2 配置服务器 511
18.2.3 配置JDBC驱动和数据源 511
18.2.4 为MDB配置一个消息监听程序 514
18.2.5 配置connection factory和队列 515
18.2.6 激活JMS服务器 516
18.2.7 保存配置 516
18.2.8 停止和启动服务器 517
18.3 安装企业应用程序 517
18.3.1 创建EAR文件 517
18.3.2 安装EAR文件 517
18.4.2 消息驱动bean 522
18.4.1 Web应用程序 522
18.4 测试ITSO banking应用程序 522
18.3.3 启动服务器和应用程序 522
18.5 应用程序装配工具 523
18.6 命令行工具 524
18.6.1 批处理命令 524
18.6.2 脚本工具 524
18.7 小结 526
第19章 Application Developer的团队开发环境 527
19.1 简介 527
19.1.1 工作区 527
19.1.3 本地历史 528
19.1.2 项目 528
19.1.4 导出 529
19.1.5 乐观并发 529
19.1.6 悲观同步 530
19.2 设置一个团队资源库 530
19.3 并行版本系统 530
19.3.1 CVS安装和配置 531
19.3.2 Application Developer 5.0中的新特性 531
19.3.3 哪些改动会影响您的工作 532
19.4 单独用户的开发场景 533
19.3.4 从版本控制中忽略资源 533
19.4.1 连接到一个CVS资源库 534
19.4.2 向CVS控制添加一个项目 535
19.4.3 创建版本 536
19.4.4 修改和同步 536
19.4.5 CVS控制台 538
19.4.6 资源历史 538
19.4.7 文件比较 538
19.4.8 断开项目 539
19.4.9 关键字扩展 540
19.5 团队开发场景 542
第Ⅲ部分 附录 545
附录A 环境设置 545
A.1 安装计划 545
A.1.1 硬件 545
A.1.2 软件 545
A.2 安装DB2 UDB 546
A.3 安装IBM WebSphere应用服务器 546
A.3.1 安装过程 547
A.4 WebSphere Studio Application Developer的安装 548
A.3.2 验证安装 548
A.5 安装EJBBANK数据库 549
附录B 附加资料 550
B.1 定位Web资料 550
B.2 使用Web资源 550
B.2.1 下载Web资源的系统需求 550
B.2.2 如何使用Web资源 551
B.2.3 安装ItsoBank5EAR.ear文件 551
B.2.4 安装服务器 552
附录C 作者信息 554