【问题标题】:ConnectionSpecWrapper no longer present in recent releasesConnectionSpecWrapper 在最近的版本中不再存在
【发布时间】:2020-08-11 10:04:13
【问题描述】:

为什么 activejdbc 类 ConnectionSpecWrapper 在最近的版本中消失了?

在 3.0(以及 2.3.2-j8)activejdbc jar 中,我们有:

org/javalite/activejdbc/connection_config/ConnectionJndiConfig.class
org/javalite/activejdbc/connection_config/ConnectionConfig.class
org/javalite/activejdbc/connection_config/ConnectionJdbcConfig.class
org/javalite/activejdbc/connection_config/ConnectionDataSourceConfig.class
org/javalite/activejdbc/connection_config/DBConfiguration.class

在 2.3 jar 中我们有

org/javalite/activejdbc/connection_config/ConnectionSpecWrapper.class
org/javalite/activejdbc/connection_config/DbConfiguration.class
org/javalite/activejdbc/connection_config/ConnectionJdbcSpec.class
org/javalite/activejdbc/connection_config/ConnectionSpec.class
org/javalite/activejdbc/connection_config/ConnectionDataSourceSpec.class
org/javalite/activejdbc/connection_config/ConnectionJndiSpec.class

我在过滤器中这样使用它:

@Override
public void before() {

    if(Configuration.isTesting())
        return;

    List<ConnectionSpecWrapper> connectionWrappers = getConnectionWrappers();

    if (connectionWrappers.isEmpty()) {
        throw new InitException("There are no connection specs in '" + Configuration.getEnv() + "' environment");
    }

    for (ConnectionSpecWrapper connectionWrapper : connectionWrappers) {
        DB db = new DB(connectionWrapper.getDbName());
        db.open(connectionWrapper.getConnectionSpec());
        log.debug("Opened connection: " + connectionWrapper.getDbName() + " envname " + connectionWrapper.getEnvironment());
        if(manageTransaction){
            db.openTransaction();
        }
    }
}

@Override
public void after() {
    if(Configuration.isTesting())
        return;

    List<ConnectionSpecWrapper> connectionWrappers = getConnectionWrappers();
    if (connectionWrappers != null && !connectionWrappers.isEmpty()) {
        for (ConnectionSpecWrapper connectionWrapper : connectionWrappers) {
            DB db = new DB(connectionWrapper.getDbName());
            if(manageTransaction){
                db.commitTransaction();
            }
            db.close();
            log.debug("Closed connection: " + connectionWrapper.getDbName() + " envname " + connectionWrapper.getEnvironment());
        }
    }
}

我正在考虑升级 Gazzetta dello Sport 的梦幻足球网站,该网站已经运行了大约 8 年并且运行良好。它位于 Java 7/Activeweb 1.10/Activejdbc 1.4.9

【问题讨论】:

    标签: activejdbc javalite activeweb


    【解决方案1】:

    正如您正确注意到的,“包装”类已重命名为“规范”类。通常不使用这些类。如果您想继续使用它们,当然可以(相应地重命名)。但是,更好的方法是在文件中定义您的连接:

    https://javalite.io/database_configuration#property-file-configuration 只需使用https://javalite.io/controller_filters#dbconnectionfilter

    我假设您编写了一个自定义控制器过滤器并且正在使用ActiveWeb

    更新:

    既然我们确定您使用 ActivewWeb,请考虑删除您的代码并简单地使用 DBConnectionFilter,这是一个完美的示例:https://github.com/javalite/javalite-examples/blob/master/activeweb-simple/src/main/java/app/config/AppControllerConfig.java#L31

    【讨论】:

    • 是的,它是一个自定义控制器过滤器,我正在使用活动网络。
    • 但是我需要在没有这些类的最新版本上做同样的事情。
    • 这些是最新版本中的类:
    • org/javalite/activejdbc/connection_config/ConnectionJndiConfig.class org/javalite/activejdbc/connection_config/ConnectionConfig.class org/javalite/activejdbc/connection_config/ConnectionJdbcConfig.class org/javalite/activejdbc/connection_config/ConnectionDataSourceConfig .class org/javalite/activejdbc/connection_config/DBConfiguration.class
    • 您可以在您的自定义控制器中重命名这些类。其余的应该像以前一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2020-07-26
    • 2021-03-08
    • 2017-01-24
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多