[转载]如何在 WebSphere Studio 中保留引用的同时将数据库表的更改导入到 EJB 模块中...

本文介绍如何在WebSphere Studio Application Developer中将数据库表的更改导入EJB模块,同时保留引用完整性和避免文档损坏。文章还讨论了如何通过使用基于名称的ID解决映射文件和其他数据库文件的引用问题。

如何在 WebSphere Studio 中保留引用的同时将数据库表的更改导入到 EJB 模块中


本文探索了如何在 Application Developer 中将更改从数据库传播回 EJB 模块。本文还说明了一些可能在导入数据库的更改时会发生的缺陷,并描述了一项清除这些缺陷的新功能。

©Copyright International Business Machines Corporation 2003. All rights reserved.

引言

IBM® WebSphere® Studio Application Developer(以下称为 Application Developer)使您能够通过几种不同的映射技术(包括自顶向下映射、自底向上映射以及中间会合映射)将容器管理的实体 bean 映射到关系数据库。不管您使用的是哪种方法,最后您都要将容器管理的实体 bean 映射到数据库表。在开发过程中,数据库管理员(DBA)往往需要更新表定义,您需要将这些更改导入到 EJB 模块中。本文探讨了如何在 Application Developer 中将更改从数据库传播回 EJB 模块。本文还说明了一些在导入数据库的更改时可能会出现的缺陷,并描述了一个清除这些缺陷的新功能部件。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


建立一个简单的 EJB 项目

说 明该问题及其解决方案的最好办法是使用一个简单的示例,如果使用较大的示例会使问题变得更复杂。请不要在这个示例中使用您现有的 EJB 项目,因为那样您会发现毁坏文件是多么容易,并且此时这些文件只能手工修复。如果您已经明白了如何将数据库表的更改导入到 EJB 模块中,并且您只想学习如何修正这些缺陷,那么请参阅下面的 避免无效引用

让我们从创建一个 EJB 项目开始:

  1. 从 J2EE 透视图的菜单栏选择 File => New => EJB Project以启动 EJB 项目向导。
  2. 选择 Create 2.0 EJB Project并单击 Next
  3. 为 Project name 输入 SimpleEJB ,并为 Enterprise application project name 输入 SimpleEAR 。
  4. 单击 Finish

有了这个新建的 EJB 项目,您就想通过执行自底向上映射来创建并映射一些容器管理的实体 bean。在做这项工作之前,您将需要创建一个定义本示例中所用表的简单表 DDL,并将其导出到数据库:

  1. 在 EJB 项目中的任意一个地方创建一个新的简单文件:选择 New => Simple => File并将其命名为 Table.ddl 。
  2. 请将下列内容粘贴到这个文件中:
    CREATE SCHEMA SIMPLE;
    CREATE TABLE SIMPLE.PERSON
    (SSN VARCHAR(250) NOT NULL,
    NAME VARCHAR(250),
    ADDRESS VARCHAR(250),
    PHONE VARCHAR(250));
    ALTER TABLE SIMPLE.PERSON
    ADD CONSTRAINT PK_PERSON PRIMARY KEY (SSN);

  3. 保存这个文件。
  4. 从 J2EE Navigator 选择这个新文件并选择 Run on Database Server...以打开 Run Script向导。
  5. 输入必要的连接信息或使用现有的连接,然后单击 Finish以执行这个脚本。

既然已经将表导出到了数据库中,那么现在您就可以创建自底向上映射了:

  1. 从 J2EE Hierarchy 视图右键单击 SimpleEJB 模块并选择 Generate => EJB to RDB Mapping。EJB-to-RDB Mapping 向导打开,缺省选择 Create a new backend folder,因为这个模块没有当前后端。单击 Next
  2. 在这个向导的第二张页面上可以只选择 Bottom up选项,因为这个模块中没有定义容器管理的实体。单击 Next
  3. 在第三张页面上,输入将被用来连接到您的数据库的必需的连接信息(或者使用现有的连接亦可)。单击 Next
  4. 在下面所示的第四张页面中,有一个树形视图,它包含所有的数据库模式以及您的数据库中定义的这些模式的表。选择表 SIMPLE.PERSON并单击 Finish

bottomUp4.jpg

EJB 模块现在包含一个容器管理的实体 Person,它被映射到刚刚导入的表 PERSON。请注意您刚刚导入的文件的位置。这些文件被导入到新建的后端文件夹 DB2UDBNT_V72_1 中,如下图所示。EJB 2.0 模块的所有数据库定义都是在一个特定的后端文件夹中定义的(EJB 1.1 模块只有一个数据库定义,定义在 META-INF/Schema 目录下)。这些文件都通过一些超级链接互相关联在一起,这些超级链接使用一个 ID 指向另一个文档中的特定对象。这些 ID 是由系统生成以确保唯一性的。更仔细地看一下这些引用将会帮助您理解这些文档是如何互相关联的。


backendfolder.jpg

blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


理解数据库文档引用

首先,我们看一下 Con1_SAMPLE_SIMPLE_PERONS.tblxmi 文档的一段摘录(如果您输入的是另一个连接名称, Con1 可能会有所不同)。蓝色的 ID 针对的是该文档中定义的表,红色部分是对 SAMPLE.dbxmi 文档中数据库的引用。

        xmlns:RDBSchema="RDBSchema.xmi" xmi:id="

RDBTable_1050981749525"
name="PERSON" primaryKey="SQLReference_1050981749525">






现在请看一下 SAMPLE.dbxmi 。蓝色部分是与上面超级链接的 RDBDatabase ID 相匹配的数据库 ID。红色部分是对上面的 RDBTable 的引用。这个引用是指向被引用文档中的相应 ID 的指针,这个 ID 是镑(#)符号后面的全部内容。

        xmlns:RDBSchema="RDBSchema.xmi" xmlns:RLogic="RLogic.xmi"
xmi:id="

RDBDatabase_1050981748023" name="SAMPLE">


href="

META-INF/backends/DB2UDBNT_V72_1/Con1_SAMPLE_SIMPLE_PERSON.tblxmi#RDBTable_1050981749525"/>






这些引用和 ID 必须保持同步以便文件能够正确装入。Map.mapxmi 将与数据库文档遵循相同的引用规则。下面 Map.mapxmi 文件的一段摘录(除去了 commandStack 值)表明这个文件还有基于数据库文档中 ID 的引用,这些引用和 ID 必须同步以便正确装入映射。它包含对数据库、对表和对列的引用,如下面红色突出显示部分所示。数据库文件间关系的概述将会帮助您理解把更改导入到 PERSON 表时出现的问题。正常情况下,您不必检查这些文本格式的文件,但准确显示它们之间的关系还是会有所帮助的。

         xmlns:ejbrdbmapping="ejbrdbmapping.xmi" xmlns:RDBSchema="RDBSchema.xmi" xmlns:ejb="ejb.xmi"
xmlns:Mapping="Mapping.xmi" xmi:id="EjbRdbDocumentRoot_1050981754162"
outputReadOnly="false" topToBottom="false">
primitivesDocument="DB2UDBNT_V72"/>





href="

META-INF/backends/DB2UDBNT_V72_1/Con1_SAMPLE_SIMPLE_PERSON.tblxmi#RDBColumn_1050981749525"/>


...
href="

META-INF/backends/DB2UDBNT_V72_1/SAMPLE.dbxmi#RDBDatabase_1050981748023"/>

href="JavatoDB2UDBNT_V72TypeMaps.xmi#Java_to_DB2UDBNT_V72_TypeMaps"/>





blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


导入数据库表的更改

现在我们看一下将数据库表的更改导入到 EJB 项目中需要些什么。下面是一个更新过的表 DDL,我们应当使用上述 Run on Database Server操 作(这个操作将模拟 DBA 对数据库进行更改)将它导入数据库中。现在您要将这些对表的更改导入到 EJB 模块中。如果知道需要做哪些具体的更改,只需使用 Application Developer 中的表编辑器来更新表即可。实际上,您可能不知道已经做了哪些具体的更改,所以需要将表导入,以使最新的更改生效。下面的步骤对于将表导入一个现有的 EJB 项目来说是正确的,但是如果不实现 避免无效引用这一部分的解决方案,数据库文档可能会被毁坏。所以,目前我们只对这里描述的样本 EJB 项目或另一个已经存在的一次性 EJB 项目执行这个操作。

DROP TABLE SIMPLE.PERSON;
CREATE TABLE SIMPLE.PERSON
(SSN VARCHAR(250) NOT NULL,
NAME VARCHAR(250),
ADDRESS VARCHAR(250),
PHONE VARCHAR(250),
AGE INTEGER);
ALTER TABLE SIMPLE.PERSON
ADD CONSTRAINT PK_PERSON PRIMARY KEY (SSN);

要将一个或多个数据库表导回 EJB 模块现有的后端文件夹,最容易的方法是使用 J2EE 透视图中的 DB Servers 视图,如下所示:


dbservers.jpg

您可以从这个视图选择一个连接,并根据这个连接当前处于连接状态还是断开状态选择 RefreshReconnect上下文菜单。这样可以确保 DB Servers 视图将显示数据库中当前的更改。接下来,沿目录展开到表 PERSON,右键单击并选择 Import to Folder,如下所示。这个操作启动了一个将选中的对象导入到特定的文件夹中的向导。


importToFolderAction.jpg

在这里,事情变得有点棘手。所启动的向导(如下所示)有一个 Folder 域,它允许您转到要将文件导入的文件夹。缺省状态下选择的 Use default schema folder for EJB project选项允许您在使用 Browse按 钮搜索文件夹时选择一个 EJB 项目,并且它还将自动选择这个 EJB 项目中合适的后端文件夹。如果您正在将一些表导入到一个没有定义数据库表的新 EJB 项目中,这样就很好,但是如果您已经为 EJB 项目定义了一个后端,那么就会有一个新的后端文件夹被创建。即使您转到现有的后端文件夹 ...backends/DB2UDBNT_V72_1 ,被选择的文件夹也会更改为 ...backends/DB2UDBNT_V72_2 ,后者并不是您选择的现有文件夹。出现这种情况是因为选中了 Use default schema folder for EJB project 复选框。这个选项会为 EJB 项目自动选择一个有效的空后端文件夹。因此,要导入现有的后端文件夹,需要清除这个复选框选项。现在您可以选择当前后端文件夹了,如下所示:


importToFolderWiz.jpg

单击 Finish后,您将会被提示覆盖 PERSON 表文件。单击 Yes以创建一个新的表文件。下面是这个新文件的一段简短摘录。虽然它与前面的 PERSON 表文件相似,但是 RDBTable 的 ID 已经更改了,而对数据库和模式的引用却没变(请参考前面的表文件摘录)。 SAMPLE.dbxmi 文件和模式文件也已被更新,以指向这个新的表 ID。如果您当时使用的是小组资源库并且没有检入数据库文件和模式文件,而是检入了已更新的表文件,那么被检入的数据库文件和模式文件将指向一个不存在的 表对象。这基本上就可以导致数据库文件集被毁坏或不正确,并导致 Application Developer 中出现问题。

        xmi:id="

RDBTable_1051063196380" name="PERSON" primaryKey="SQLReference_1051063196380">





既然您明白了导入现有数据库表时的问题,那么就可以避免导致这些文件被毁坏的情况。但是,您将无法避免这样的事实: Map.mapxmi 文件仍在引用已被修改的旧的表 ID。因此,如果打开 EJB to RDB Mapping 编辑器,那么所有已创建的映射都会被映射编辑器除去,因为这些映射不再有效(原因是对现在不存在的表 ID 进行了引用)。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


避免无效引用

既 然知道了如何将数据库表导入现有的后端文件夹,您可能就会问自己如何避开这些问题。解决方案是根据元素的名称更改数据库文件中的 ID 而不使用系统生成的 ID。如果切换到基于名称的 ID,只要表及其列的名称在数据库中没有改变, 在导入时您就会获得它们原来的 ID。如果这些名称改变了,那么实际上它便是另一个对象了,ID 也应不同。您可以 从下面下载一个新功能部件,它可以使这个解决方案成为可能。

在使用这个新功能部件之前,请删除并重新创建 SimpleEJB 项目并对 PERSON 表进行自底向上映射,如同上面一样。这样将使您第二次回到导入数据库表之前的状态(不考虑表已在数据库中被修改这个事实)。这正好发生在文件被毁坏之前。

可下载的 data.ids.feature.zip 文件包含一个新功能部件,您可以将其应用到 Application Developer V5.0 或 V5.0.1 中。安装这个功能部件的步骤为:

  1. 将 data.ids.feature.zip 解压缩到 Application Developer 的安装目录。
  2. 启动 Application Developer。
  3. 一个对话框打开,指出您有尚未执行的更改。单击 Yes以继续进行安装。
  4. 选择 Data Tools ID Feature以进行安装并单击 Finish
  5. 选择 Yes以重新启动,从而更改生效。

在将数据库表的更改导入 EJB 项目的现有后端文件夹之前,您首先要迁移所有数据库文件和 Map.mapxmi 文件的 ID 和引用。为此,请右键单击 J2EE Navigator 中的 SimpleEJB 项目,然后选择 Migrate Database IDs。您可以选择多个 EJB 项目,并迁移每个 EJB 项目中的每个后端文件夹。下面是来自我们的简单示例的已迁移数据库表文件的一段摘录。蓝色的 ID 与名称相同,红色的引用使用其他文档中的基于新名称的 ID。

        xmi:id="

PERSON" name="PERSON" primaryKey="PK_PERSON">



xmi:id="SQLCharacterStringType_1051066499780" characterSet="800" length="250">
href="DB2UDBNT_V72_Primitives.xmi#SQLCharacterStringType_3"/>





为 EJB 项目迁移过数据库 ID 后,您就可以导入表更改了,无需担心丢失映射文件或其他数据库文件的引用。现有的 EJB 项目只需要进行一次导入操作。所有的新数据库文件现在都将使用基于新名称的 ID。另外,这个功能部件还会转换对于 XML ID 无效的名称中的字符,以便文档可以被解析。这种转换每次都使用相同的算法,因此,ID 每次都可以重新创建。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


结束语

您 已经学习了如何将数据库表的更改导入到 EJB 项目的一个现有的后端文件夹。但是您也了解到了数据库文档间的引用以及映射文件可能会被毁坏,这样会导致 Application Developer 中出现问题,并要求您每次将更改从数据库导入到 EJB 项目时都要花时间映射数据库表。Application Developer 的一个新功能部件可以通过切换数据库文档以使用基于名称的 ID 来消除这些问题,这样在第一次导入数据库表之后再次导入时还会使用原来的 ID。映射文件中的引用保持有效,避免了数据库文档被毁坏。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130617/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130617/

内容概要:本文档系统整合了基于MATLAB/Simulink的风力涡轮机雷达信号仿真、电力系统优化、新能源调控及多领域智能算法应用资源,涵盖风电功率平抑、混合储能协同调频、综合能源系统调度、无人机三维路径规划、电动汽车参与调度、电氢氨耦合系统优化等前沿科研方向。资源包提供大量可复现的Matlab代码、Simulink仿真模型、数据集及配套论文,涉及GWO、PSO、WOA、HHO等多种智能优化算法,以及LSTM、CNN、GRU等深度学习模型在负荷预测、故障诊断、信号处理中的应用,尤其聚焦于风电与雷达信号交互、储能功率分配、虚拟电厂运行、微电网多时间尺度优化等关键技术的仿真实现。; 适合人群:具备一定MATLAB编程基础,从事电力系统、新能源、智能优化、信号处理、雷达仿真、综合能源管理等相关领域的科研人员及研究生;工作1-3年相关方向的工程师。; 使用场景及目标:①开展风力发电系统与雷达信号交互仿真研究;②复现高水平期刊论文中的优化调度、故障诊断、功率预测模型;③进行无人机路径规划、储能系统设计、综合能源系统优化等课题研究与论文撰写;④借助成熟的代码框架快速搭建仿真模型,提升科研效率与工程实践能力。; 阅读建议:建议按主题分类浏览资源列,优先选择标注“复现”“顶刊”“EI”等高价值项目,结合提供的网盘链接下载完整代码与数据,配合Simulink仿真模型与说明文档进行调试与二次开发,注重算法实现与实际工程问题的深度融合。
日常处理文本内容时,你是否也常常被这些琐碎又烦人的操作消耗大量时间:从网页复制来的文章满是空行和多余空格,要一段段手动清理;从不同渠道收集的文档繁简混杂,格式五花八门,想统一规范却只能逐篇调整;面对数千行的数据,想按行排序、去重、添加行号,却找不到一个趁手的小工具;更别提Base64编解码、URL转义这些开发中高频使用的操作,每次都得打开在线网站反复折腾——这些看似零散的文本处理需求,单独去搜工具费时费力,用Word又杀鸡用牛刀,始终缺少一款能把这些功能聚合在一起、打开即用的桌面工具。而 大飞哥软件自习室——文本批量整理工具 v2.0正是为整合这些高频文本处理需求而生的专业效率工具,它集文件管理、文本清洗、格式转换、查找替换、批量插入、排序打乱、编码解码、实时统计等近三十项实用功能于一身,采用多标签页设计支持同时编辑多个文档,所有操作均支持撤销与重做,让你在写代码、整理素材、编辑文案时再也不用东拼西凑找工具,一个软件搞定全部文本处理需求。 软件的核心功能模块围绕文本处理的完整工作流展开,覆盖了从“粗加工”到“精处理”的各个环节。文本清洗模块提供了行首尾去空格、清除所有空格、删除空行、合并多余空格、去除重复行、清除HTML标签等六项功能,一键将脏乱差的原始文本快速规整为干净可用的素材。文本转换模块则涵盖了繁简互转、标点中英文互转、全半角互转、全部大写/小写/首字母大写等选项,尤其适合需要批量处理多语言或不同格式规范的文本内容。查找替换模块不仅支持普通文本替换,更提供了正则达式和区分大小写选项,查找、替换、全部替换、选区替换四种模式灵活应对不同场景。批量插入文本模块更是独树一帜——用户可预设两组插入内容,选择插入到当前段首/段尾或所有段首/段尾,四个单选按钮搭配两个输入框,实现八种插入组合,为批量处理结构化文本提供了极大的便利。
随着云原生技术的快速发展,分布式微服务架构已成为企业IT基础设施的主流部署模式,然而传统负载均衡调度算法(如加权最小连接数WLC)采用静态权重配置,难以适应生产环境中流量峰谷波动带来的挑战。本文针对分布式微服务系统的负载均衡调度算法优化这一课题,提出融合历史负载时序预测与实时资源数据计算实例权重的动态权重分配策略(简称DWA),并基于Go语言+Kubernetes技术栈构建了完整系统。在研究方法上,本文首先分析了现有加权最小连接数调度算法的局限性,引入资源预测模块基于ARIMA或LSTM时序预测模型预判流量高峰;随后设计动态权重分配(DWA)策略,融合历史负载时序预测与实时资源数据计算实例权重;最终实现负载感知调度(Latency-aware Load Balancing),融合最小连接数与实时负载双重因素。技术实现采用Go语言作为开发主体,利用gRPC框架实现微服务间高效通信,通过Prometheus监控系统采集Pod节点级别的实时资源指标,并结合Kubernetes容器编排平台完成系统的容器化部署。主要研究成果包括三个方面:第一,提出DWA动态权重分配算法,通过实测验证系统吞吐量提升42%,有效提高了集群资源利用率;第二,实现基于时序预测的调度策略,请求响应时间标准差降低67%,显著改善了流量高峰期的系统稳定性;第三,设计多维度负载指标采集架构,节点负载均衡度达到0.91,实现了更精细化的请求分发。测试场景覆盖4G弱网、WiFi抖动及跨网传输等多种网络条件,验证了系统在复杂网络环境下的适应性。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计与实现 第6章 系统测试与分析 第7章 总结与展望 参考文献 附件-实现指南
内容概要:本文系统研究了基于去噪概率扩散模型(DDPM)在光伏场景生成中的应用,结合Python代码实现,详细阐述了如何利用扩散模型生成具有高度真实感的光伏发电时间序列数据。该方法通过前向加噪与反向去噪的马尔可夫过程,学习光伏出力的复杂时空特征,有效应对新能源出力的强波动性与不确定性。文中深入解析了DDPM的核心数学原理、基于U-Net的网络架构设计、时间步嵌入机制、损失函数构建及训练优化策略,并展示了其在电力系统规划、优化调度、风险评估等场景下的应用潜力,突出了其在生成高质量、多样化光伏场景方面的显著优势。; 适合人群:具备一定机器学习与深度学习基础,从事新能源电力系统、智能电网、可再生能源预测、场景生成与概率建模等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决光伏功率固有的间歇性与不确定性导致的建模困难;②为微电网能量管理、储能系统优化配置、电力市场仿真及日前-实时调度提供高保真的输入场景;③提升高比例可再生能源接入下电力系统规划与运行决策的鲁棒性与可靠性; 阅读建议:学习者应结合所提供的完整Python代码,动手实践并深入理解扩散模型的正向扩散与反向生成全过程,重点关注时间步条件输入、U-Net特征提取与跳跃连接、以及噪声预测网络的训练细节,并尝试在真实的光伏历史数据集上进行模型训练与生成效果评估,以充分掌握其技术精髓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值