在 DSpace 中如何处理任何查询以及如何在前端和 PostgreSQL 之间管理数据
2 回答
与在 Tomcat 等 Servlet 容器中运行的所有其他 webapp 一样,文件 WEB-INF/web.xml 控制查询的处理方式。如果是 DSpace 的 JSPUI,您可以在 [dspace-install]/webapps/jspui/WEB-INF/web.xml 中找到该文件。JSPUI 定义了几个过滤器、侦听器和 servlet 来处理请求。
过滤器用于报告 JSPUI 正在运行、经过身份验证的用户或什至只有经过身份验证的管理员可以看到受限区域以及处理内容协商。
侦听器确保 DSpace 已正确启动。在它启动期间,DSpace 加载配置,打开它在连接池中使用的数据库连接,让 Spring 发挥它的 IoC 魔法等等。
首先,了解如何处理查询的最重要部分是 servlet 和 servlet-mappings。servlet-mapping 定义了哪个 servlet 用于处理具有特定请求路径的请求:例如,对 example.com/dspace-jspui/handle/* 的所有请求都将由 org.dspace.app.webui.servlet.HandleServlet 处理,所有对 example.com/dspace-jspui/submit 的请求都将由 org.dspace.app.webui.servlet.SubmissionController 处理。
servlet 使用它们的 Java 代码 ;-) 和 DSpace Java API 来处理请求。您会在 dspace-api 模块中找到大部分内容(参见 [dspace-source]/dspace-api/src/main/java/...),在 dspace-services 模块中找到一些较小的部分([dspace-source] dspace-services/src/main/java/...)。如果您对与数据库的通信感兴趣,它们是 DSpace Java API 中的两个重要类:
- 一个是 org.dspace.core.Context。上下文包含是否登录以及哪个用户登录的信息、一个初始化和连接的数据库连接(如果一切顺利)和一个缓存。Context.abort()、Context.commit() 和 Context.complete() 方法用于管理数据库事务。这就是为什么几乎所有操作数据库的方法都请求一个 Context 作为方法参数的原因:它控制数据库连接和数据库事务。
- 另一个是 org.dspace.storage.rdbms.DatabaseManager。DatabaseManager 用于处理数据库查询、更新、删除等。所有 DSpaceObjects 都包含一个对象 TableRow,其中包含存储在数据库中的对象的信息。在 DSpaceObject 类(例如 org.dspace.content.Item、org.dspace.content.Collection、...)中,可以使用 DatabaseManager.update(Context, DSpaceObject) 操作 TableRow 并将更改存储回数据库。DatabaseManager 提供了几种方法来向数据库发送 SQL 查询,在数据库中更新、删除、插入甚至创建数据。只需查看它的 API 或在 DSpace 源中查找“SELECT”以获取示例。
在 JSPUI 中,如果要提交数据库状态,使用 Context.commit() 很重要。如果处理了一个请求并且没有调用 Context.commit(),那么事务将被中止并且更改会丢失。如果您调用 Context.complete() 事务将被提交,数据库连接将被释放并且上下文被标记为已完成。调用 Context.complete() 后,上下文不能再用于数据库连接。
DSpace是一个相当大的项目,他们可以写更多关于它的ORM,数据库的初始化等等。但这应该已经帮助您开始为 DSpace 进行开发。我建议您阅读 DSpace 手册中的“架构”部分:https ://wiki.duraspace.org/display/DSDOC5x/Architecture
如果您有更具体的问题,我们总是邀请您在 stackoverflow 或我们的邮件列表 ( http://sourceforge.net/p/dspace/mailman/ ) dspace-tech(关于 DSpace 的任何问题)和 dspace- 上提问devel(关于 DSpace 开发的问题)。
这取决于您运行的 DSpace 版本以及您的配置。
在 DSpace 4.0 或更高版本中,默认情况下,DSpace JSPUI 使用Apache Solr进行所有搜索和浏览。DSpace 通过其Discovery 模块执行 Solr 的所有索引和查询。基于 Discovery (Solr) 的搜索/索引类在“ org.dspace.discovery ”包下可用。
在 DSpace 的早期版本(3.x 或以下)中,默认情况下,DSpace JSPUI 直接使用Apache Lucene。在这些旧版本中,DSpace 直接调用 Lucene 进行所有索引和搜索。基于 Lucene 的搜索/索引类在“ org.dspace.search ”包下可用。
在这两种情况下,查询都直接传递给 Solr 或 Lucene(同样取决于 DSpace 的版本)。结果被解析并显示在 DSpace UI 中。