如何在DSpace中处理任何查询,并在前端和PostgreSQL之间管理数据
答案 0 :(得分: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的服务/ src目录/主/ JAVA / ...)。在DSpace Java API中,如果您对与数据库的通信感兴趣,则它们是两个重要的类:
在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)。
答案 1 :(得分:1)
这取决于您运行的DSpace的版本以及您的配置。
在DSpace 4.0或更高版本中,默认情况下,DSpace JSPUI使用Apache Solr进行所有搜索和浏览。 DSpace通过其Discovery module执行Solr的所有索引和查询。基于Discovery(Solr)的搜索/索引类可在" org.dspace.discovery"封装
在早期版本的DSpace(3.x或更低版本)中,默认情况下,DSpace JSPUI直接使用Apache Lucene。在这些旧版本中,DSpace直接为所有indexing调用Lucene并进行搜索。基于Lucene的搜索/索引类可以在" org.dspace.search"封装
在这两种情况下,查询都会直接传递给Solr或Lucene(同样取决于DSpace的版本)。结果将在DSpace UI中进行解析和显示。