【问题标题】:How to configure the dynamic database for the formbuilder如何为formbuilder配置动态数据库
【发布时间】:2015-09-09 13:56:12
【问题描述】:

如何处理表单生成器的动态数据库。我需要以哪种方式在tomcat的“context.xml”中配置数据库源名称,而“Orbeon表单”存储在单个“orbeon”静态数据库中。

到目前为止,我在 context.xml 中使用以下上下文,它访问静态数据库,然后创建/更新/删除表单。

<Resource name="jdbc/postgres" auth="Container" type="javax.sql.DataSource" 
initialSize="3" maxActive="10" maxIdle="20" maxWait="30000" 
driverClassName="org.postgresql.Driver" 
poolPreparedStatements="true" 
validationQuery="select 1 " 
testOnBorrow="true" 
username="orbeon" 
password="orbeon" 
url="jdbc:postgresql://localhost:3306/orbeon?useUnicode=true&amp;characterEncoding=UTF8"/>  

这里的“orbeon”是静态数据库。

我需要提供一个动态数据库,而不是静态数据库。在用户打开表单生成器“URL”之前,我给出了登录页面。如果身份验证成功,则基于用户 ID 用户只能访问他的数据库的表单。

【问题讨论】:

    标签: postgresql tomcat jndi orbeon


    【解决方案1】:

    您不能为单个连接动态更改数据库 - 无论如何您都不应该为来自池的连接这样做。

    在 Postgres 中,最好在一个单个数据库中拥有多个模式 - 每个用户一个模式。

    然后从连接池中获取连接后,您可以使用以下方法更改会话的默认架构:

    set search_path = user_specific_schema;
    

    不要忘记提交此更改,否则会话中的第一次回滚会还原此更改。您可以通过在启用自动提交的情况下运行该语句或在您的 Connection 对象上调用 commit() 来做到这一点。

    您可以通过为您的连接池使用interceptor 来自动实现这一点。

    【讨论】:

    • 感谢您的回复,但我仍然不知道如何根据不同的用户动态更改架构。请您提前描述一下。谢谢。
    • @Prathyush 您在我的回答中使用 SQL 语句更改了架构。没有什么了
    • 你能告诉我我需要在 orbeon 表单构建器源代码中执行架构的位置吗?
    • @Prathyush:抱歉,我不知道那个 orbeon 是什么。
    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多