问题标签 [objectdb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1023 浏览

spring-boot - 带有 Spring Boot 的 ObjectDB

我想将 Spring Boot 应用程序配置为使用 ObjectDB 持久性而不是默认的 Hibernate,但我无法这样做。由于 ObjectDB 已经是 JPA 提供者,我需要排除任何涉及 DataSource、JDBC 或 Hibernate 的自动配置。

到目前为止,我在 Application.java 中有以下内容:

和 build.gradle:

但是,当使用以下异常提取启动应用程序时,这会失败:

似乎 Spring Boot 尝试创建一个包含有关数据源信息的“PublicMetrics”bean,然后无法创建 DataSource,因为 ObjectDB 是面向对象的数据库,而不是 SQL 数据库,因此它不提供任何 DataSource。

如何完全禁用 PublicMetrics?

我已经尝试过http://www.objectdb.com/database/forum/860没有成功,如果我从依赖项中排除“spring-boot-starter-jdbc”,那么我的 Spring Data 存储库由于某种原因没有实例化.

0 投票
1 回答
1989 浏览

sql - 哪个是更好的 SQL 数据库或 json 文件?

我正在创建一个应用程序,其中大量数据将存储在服务器中。例如待办事项清单。

一个用户来了,写下他的待办事项清单,就像每天 100 项任务的清单一样。因此,所有任务都将像列表(100 个字符串)一样显示给他。

哪个更好地存储数据:

  1. 一个 SQL 表

    /li>
  2. 一个 JSON 文件

    对于每个用户,都会有一个文件夹和一个日文件夹,例如 -

    abc_user(文件夹)

    ..对于其他用户也是如此。

    每个 json 文件都会有一个对象数组,例如

    /li>

请告诉我在延迟、效率和安全性方面哪种方法更好。

SQL能在一个表中处理这么多的数据吗?请记住,每个用户每天最多可以输入 100 个条目,如果有 1000 个用户这样做,那么每天的总条目将是 100,000 个。

0 投票
1 回答
114 浏览

java - Java:JPA:ObjectDB:预分离加载:为什么通过“导航和访问”进行检索有时在 if 语句中不起作用

这个问题是从这个 ObjectDB 论坛帖子中产生的,希望更广泛的 JPA 社区能够提供一些见解。某些方面可能特定于 JPA 的 ObjectDB 实现

objectdb-2.6.3_04 JDK1.7 VM 运行时选项:-javaagent:lib/objectdb.jar

这个问题似乎只发生在特定的大型 Web 应用程序中。我有一个与大型 Web 应用程序平行的较小的测试 Web 应用程序,但问题不会发生在较小的 Web 应用程序中(正如我将在下面演示的那样),因此在这里提供它没有意义。我一直无法找到差异点。我从下面显示了选定的代码部分。

我在 em.find(id) 之后使用预分离加载,因为仅仅依靠 JPA 注释,这是一种“一刀切”的方法,并不能满足我对所有情况的需求。我可以使用特定的加载器配置实体查询@EJB - 在执行 em.find(id) 之后 - 执行选定的操作(同时“访问”加载的托管实体)以加载和获取所需的值。

除了持久性字段之外,我的实体还具有瞬态计算方法,并且在预分离加载期间调用这些方法应该(并且通常会)加载计算瞬态专家系统值所需的所有内容,然后一旦分离和在 JSF Web 界面中使用(此处未进一步显示)。

关于实体类我不会给出太多细节,我将首先演示我遇到的问题,但您需要了解以下内容:

  • LightingZone 是实体 Block 的子类

  • Block 有一个属性“present”,它是一个“深”的布尔值包装器 BooleanValue 实体。这是带有显式 LAZY 提取的 @OneToOne。

  • BooleanValue 实体包装了一个简单的布尔属性“值”。

  • LightingZone 有一个属性“v_NLA”,它是一个“深度”浮点值包装器 FloatQuantity 实体。这是带有显式 LAZY 提取的 @OneToOne。

  • FloatQuantity 实体包装了一个简单的 Float 属性“值”。

  • (另外,下面的 getL_LightingZone() 是一个通用的 List 包装实体,LightingZone 的列表通过 getL_LightingZone().getEls() 访问。这对遇到的问题没有任何作用。)

Block 实体的 @OneToOne 实体变量 'present' 是一个 BooleanValue,具有:

(我不会在这里详细说明为什么要使用这种值包装器,但我们有很好的理由,包括能够轻松引用专家系统中的“深度”值。)

Block 实体具有:

它不一定是 fetch = FetchType.LAZY (如果您将其设置为默认 fetch = FetchType.EAGER,则此处报告的问题将消失),但出于性能原因(并且为了演示此处描述的问题),它是 fetch = FetchType.LAZY(暗示 ObjectDB 尊重)。

我的真实网络中的以下内容无法预先分离加载,它无法在指示的 if 语句中加载测试:

但奇怪的是(至少对我而言)这是可行的,将测试存储在一个临时变量中:

如果在 if (lz.getPresent().getValue() != null && lz.getPresent().getValue()) 测试之前使用,还有一些其他的东西也可以工作:

  • 记录 lz.getPresent().getValue() 的值(或将其发送到 System.out)。

  • 否则,在 if 语句之前对 lz.getPresent().getValue() 进行一些人为的使用 - 编译器不会删除。

这在 if 语句测试之前不起作用(还不够):

  • 只是在某处调用 lz.getPresent().getValue() ,但不以某种方式使用结果(编译器只是将其删除,为了触发加载,它必须以某种方式存储在最终使用或仅用于记录的变量中或输出,使用 javap -c 确认)。

  • 在 if 语句测试之前用 lz.getPresent().getId() “触摸” id。

它必须是包装的布尔值,并且必须在 if 语句测试指示的外部和之前。

我已经非常仔细地(此处未显示)还在有问题的 if 语句之前和之后使用 Persistence.persistenceUtil() 调查了 ObjectDB 负载状态,这与上面给出的一致。'lz.present.value' 和 'lz.v_NLA.value' 为 null 且未在有问题的 if 语句之前加载,并且在通过if 语句(因为,例如,使用了临时的“测试”持有者)。

我尝试使用具有完全相同的预分离加载策略的更简单的测试 Web 应用程序来隔离它,但无法重现该问题。以下工作无需将测试存储在临时变量中

}

这个测试版本没有遇到同样的问题,它运行良好,没有任何“负载接触”技巧,尽管相关的 if 语句显然是相同的。

因此,对这个问题/问题的完整答案将解释为什么在一种情况下可能需要在 if 语句之前预加载和存储 lz.present.value 的技巧,但在另一种情况下可能不需要(换句话说,这有什么意义不同之处可能是我应该测试)。

理想情况下,我想在测试应用程序中重现问题以完全理解它。

我花了很长时间才最终找到/识别这个问题,因为我没想到在 if 语句中执行加载访问会产生影响(毕竟,这不会在迷你测试应用程序中造成问题)。我徒劳地试图找到真正的网络应用程序和迷你测试应用程序之间的任何区别,我现在真的被迷惑了(因此这个详细的论坛帖子)。

对于勇敢的人,请注意,对于这种类型的问题,使用调试器不是答案(至少,使用 NetBeans 调试器遍历并没有帮助我,因为每次检查变量时都会触发加载它,从而阻止发现真正的问题。)同样,使用调试日志也可以触发加载。这是 JPA 的薛定谔猫。

0 投票
1 回答
921 浏览

glassfish-4.1 - Glassfish/Payara:为什么将大型 Web 应用程序部署到 Glassfish-4.1.1(或 Payara Server 4.1.1.163)所需的时间是 Glassfish-4.1 的 5 倍

直到最近我一直在使用:

我最近使用以下方法进行了调查:

对于一个非常大的 JSF Web 应用程序(使用 ObjectDB 作为 JPA 持久性提供程序),我体验到 Glassfish4.1.1 的部署时间(超过 10 分钟)比 Glassfish4.1 的部署时间(大约 2 分钟)要长得多。这大约慢了 5 倍。

[编辑:2016-09-13 尝试使用 Payara 163 Full (Payara Server 4.1.1.163),它花了 20 多分钟,甚至比 Glassfish4.1.1 慢,设置几乎相同]

我不可能在这里重现或提供大型网络应用程序的示例。

Q1:有没有人经历过 Glassfish-4.1 和 Glassfish-4.1.1 [编辑:OR Payara Server 4.1.1.163]之间的任何类似差异,我可以在哪里寻找差异点?

(我已经在尝试使用 NetBeans Profiler 进行调查,但要找到原因并不是那么容易。)


[编辑:2016-09-15 计时测试]

我使用截屏录像进行了仔细的并排比较,并与日志中的时间进行了比较。

在 Payara41 (4.1.1.163) 和 Glassfish4.1.1 中,它被“卡住”了大约 10 分钟,如下所示,我还没有找到任何日志设置在出现问题的地方提供单行输出,并在其中运行服务器DEBUG 模式似乎也没有提供任何额外的信息。

...通过所有步骤运行正常,然后通过数十个 EJB JNDI 名称声明:

给出此 WELD 版本消息:

...然后在此消息之前大约需要 8 秒 ..

...然后在恢复这些原本无害的警告之前需要几分钟(通常大约 10 分钟) ..

]]

Glassfish4.1 日志中会出现类似的警告消息,但不会出现长时间的暂停/阻塞。

Q2:我还能做些什么来找出为什么它会在那里暂停/停滞很久?

0 投票
0 回答
205 浏览

java - OrientDB 中@Edge 和@Vertex 注释的目的是什么?

我在Spring Data Orientdb项目上看到了这些注释,我想知道是否可以在 java pojo 对象上使用它来创建顶点和关系。

场景将是这样的:

它不起作用,因为 addEdge 方法需要 2 个 Vertex 类和 Edge 类。也许注释不适合这个。

我使用 orientdb Studio,创建从 V(Vertex) 和 E(Edge) 类继承并相互链接的对象似乎非常简单。我想知道java代码中的类似内容。

有没有人有相同的用例场景?可能的解决方案或方法?谢谢

0 投票
2 回答
76 浏览

java - 如何将 ObjectDB 打包到可运行的 JAR 文件中?

我想知道是否可以.odb在可运行的 JAR 中包含 ObjectDB 数据库文件。

方法:

将字符串路径作为参数,而不是 URL。这意味着它getResource()不起作用。两者都不起作用getResource.getPath()getResource.toString()因为它们以某种方式显示了扭曲的路径名,并且在运行时数据库文件是在 jar 文件之外创建的。

所以我想知道是否可以 .odb在 JAR 中创建文件并在 JAR 中进行操作。

0 投票
1 回答
150 浏览

java - objectDB:如何检索包含 OneToMany 的类

我整天都在试图解决这个问题。我已经阅读了多个站点和文档,但我可以通过这个。我将 Java 与 ObjectDB 一起使用。

我有一个名为 Pedido 的类,它有一个对类 Cliente 的引用 ManyToOne。

Persona 类没有什么特别之处。只是几个变数。String、int 和嵌入式类。

问题是,当我尝试获取客户端列表时,出现错误。

在此方法结束时,“结果”为空。即使在查询之后。在 em.close() 我得到一个例外:

com.objectdb.o._PersistenceException:无法使用反射写入字段字段 entidades.Cliente.pedidos 的值

这有什么问题?我想我在 oneToMany - manyToOne 上的连接不好。但我无法弄清楚。

如何进行正确的连接?如何成功检索列表?

0 投票
1 回答
429 浏览

java - 从数据库 objectdb java 中删除对象

假设我有这两个类:

基本上 A 类有一个包含 B 类对象的数组列表,我想将它们插入到 objectdb 数据库中:

当我尝试从数据库中删除 b1 时,问题就来了。它被从它的类中删除,但如果我检查 A 的数组列表,它仍然保留有空值。如果我想在不手动操作的情况下将其删除,我该怎么办?我可以手动从arraylist中删除b1,然后删除b1,但我想知道是否有另一种方法可以删除它而无需手动从arraylist中删除它。

这就是我得到的:

空值图像

谢谢。

编辑:这就是我删除的方式

0 投票
1 回答
65 浏览

java - 通过 GlassFish 服务器使用 REST - 如何允许使用 HTML 输入更新列表并返回 JSON 对象?

我正在使用 GlassFish 4.1,在我的 web.xml 中使用 REST 服务(使用 JAX-RS)并在我的临时 ObjectDB 数据库上运行查询。我需要检查输入并返回一个带有我想要的信息的 JSON 对象。

我已经在服务器上测试了整个程序,它运行良好。但是,当我将它托管在本地端口 8080 上并输入有效的搜索条目时,当它尝试添加到列表时,我收到一个错误:

如果我运行 HTML 并提交将返回 0 个结果的搜索,我会得到一个空白的 JSON 文件!

但是,如果我运行将返回实际信息的有效搜索,则会收到“无持久性”错误。

当我让驱动程序更新自己的列表时,就会发生这种情况。我确定我在 web.inf 文件夹中有正确的 .jar。

知道为什么会发生这种情况吗?

我确实在No Persistence provider for EntityManager named中找到了概述类似问题的资源,但由于它不是同一个框架,因此答案并没有真正帮助我。

0 投票
1 回答
71 浏览

java - JPQL 使用 ObjectDB 对搜索结果进行排序

我面临着通过一些(子)字符串搜索实体的简单问题,它们可能包含。例如,我有 u_name 为“rags”、“mechrags”、“meragsch”的用户,我将进入搜索窗口“rags”,我使用以下查询搜索包含“rags”的字符串

我想根据字符串中首次出现的搜索字符串“rags”对上述查询返回的结果进行排序,因此结果将是 rags、meragsch、mechrags(按此顺序)。

我正在考虑对上述结果使用 LOCATE 函数,如下所示

但是结果比前一个要好但是如果有 4 个用户 "ragsch","rags","meragsch","mechrags" 答案

应该是 "rags","ragsch","meragsch","mechrags" 但输出是

"ragsch","rags","meragsch","mechrags" 即数据库顺序

我正在考虑使用子查询,我们首先按长度排序,然后在第一次出现“破布”时排序结果,结果可能会出现,但查询没有运行

在这里http://docs.oracle.com/html/E13946_04/ejb3_langref.html#ejb3_langref_subquerie

谁能建议一种获得正确输出的方法?

给出由 OBJECT_DB 建议的正确输出

现在我在以下方法中使用它时遇到问题

如果我将 str 作为“破布”,我应该得到所有具有所需条件的“u”,但它显示如下错误

为了检查,我直接给出了“破布”并获得了所需的输出,但无法理解传递参数的问题。

给出正确的输出。

任何人都可以在这里建议使用变量的正确方法

知道了!!!!!!

这给了所有带有“rags”的“u”,并且也按照“rags”的长度和第一次出现的顺序

那么我们可以像“Rags”或“RAGS”或“rags”这样不区分大小写的方法返回相同的值吗?

完毕!!!

如果我给“Rags”,它会找到“rags”、“Rags”和“RAGS”,这就是我需要的:)

谢天谢地,任何更好的方法都被接受尝试更好的方法谢谢大家