fix postgresql deployment (fix #350)

This commit is contained in:
Athou
2013-06-27 23:30:16 +02:00
parent f4e726a9de
commit 97f3efbf7c
4 changed files with 49 additions and 8 deletions

View File

@@ -13,9 +13,11 @@ import javax.sql.DataSource;
import liquibase.Liquibase; import liquibase.Liquibase;
import liquibase.database.Database; import liquibase.database.Database;
import liquibase.database.DatabaseFactory; import liquibase.database.DatabaseFactory;
import liquibase.database.core.PostgresDatabase;
import liquibase.database.jvm.JdbcConnection; import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor; import liquibase.resource.ClassLoaderResourceAccessor;
import liquibase.resource.ResourceAccessor; import liquibase.resource.ResourceAccessor;
import liquibase.structure.DatabaseObject;
@Stateless @Stateless
@TransactionManagement(TransactionManagementType.BEAN) @TransactionManagement(TransactionManagementType.BEAN)
@@ -37,10 +39,21 @@ public class DatabaseUpdater {
DataSource dataSource = (DataSource) context DataSource dataSource = (DataSource) context
.lookup(datasourceName); .lookup(datasourceName);
connection = dataSource.getConnection(); connection = dataSource.getConnection();
JdbcConnection jdbcConnection = new JdbcConnection(connection);
Database database = DatabaseFactory.getInstance() Database database = DatabaseFactory.getInstance()
.findCorrectDatabaseImplementation( .findCorrectDatabaseImplementation(
new JdbcConnection(connection)); jdbcConnection);
if (database instanceof PostgresDatabase) {
database = new PostgresDatabase() {
@Override
public String escapeObjectName(String objectName, Class<? extends DatabaseObject> objectType) {
return objectName;
}
};
database.setConnection(jdbcConnection);
}
Liquibase liq = new Liquibase( Liquibase liq = new Liquibase(
"changelogs/db.changelog-master.xml", accessor, "changelogs/db.changelog-master.xml", accessor,

View File

@@ -5,6 +5,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.persistence.NoResultException; import javax.persistence.NoResultException;
import javax.persistence.Query; import javax.persistence.Query;
import javax.persistence.Tuple; import javax.persistence.Tuple;
@@ -36,6 +37,7 @@ import com.commafeed.backend.model.FeedSubscription_;
import com.commafeed.backend.model.Feed_; import com.commafeed.backend.model.Feed_;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserSettings.ReadingOrder; import com.commafeed.backend.model.UserSettings.ReadingOrder;
import com.commafeed.backend.services.ApplicationSettingsService;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@@ -47,6 +49,9 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
protected static Logger log = LoggerFactory protected static Logger log = LoggerFactory
.getLogger(FeedEntryStatusDAO.class); .getLogger(FeedEntryStatusDAO.class);
@Inject
ApplicationSettingsService applicationSettingsService;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public FeedEntryStatus findById(User user, Long id) { public FeedEntryStatus findById(User user, Long id) {
@@ -522,7 +527,10 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
} }
private void setTimeout(Query query) { private void setTimeout(Query query) {
query.setHint("javax.persistence.query.timeout", 20000); int queryTimeout = applicationSettingsService.get().getQueryTimeout();
if (queryTimeout > 0) {
query.setHint("javax.persistence.query.timeout", queryTimeout);
}
} }
public void markSubscriptionEntries(FeedSubscription subscription, public void markSubscriptionEntries(FeedSubscription subscription,

View File

@@ -33,6 +33,7 @@ public class ApplicationSettings extends AbstractModel {
private boolean feedbackButton = true; private boolean feedbackButton = true;
private String logLevel = Level.INFO.toString(); private String logLevel = Level.INFO.toString();
private boolean imageProxyEnabled; private boolean imageProxyEnabled;
private int queryTimeout;
@Column(length = 255) @Column(length = 255)
private String announcement; private String announcement;
@@ -182,4 +183,12 @@ public class ApplicationSettings extends AbstractModel {
this.imageProxyEnabled = imageProxyEnabled; this.imageProxyEnabled = imageProxyEnabled;
} }
public int getQueryTimeout() {
return queryTimeout;
}
public void setQueryTimeout(int queryTimeout) {
this.queryTimeout = queryTimeout;
}
} }

View File

@@ -218,17 +218,28 @@
</changeSet> </changeSet>
<changeSet author="athou" id="add-user-created"> <changeSet author="athou" id="add-user-created">
<validCheckSum>3:b1bbf8d559ac25b785751704f2d24a91</validCheckSum>
<addColumn tableName="USERS"> <addColumn tableName="USERS">
<column name="created" type="DATETIME" /> <column name="created" type="DATETIME" />
</addColumn> </addColumn>
<sql>update USERS set created = lastLogin</sql>
</changeSet> </changeSet>
<changeSet author="athou" id="add-proxy-setting"> <changeSet author="athou" id="add-proxy-setting">
<addColumn tableName="APPLICATIONSETTINGS"> <addColumn tableName="APPLICATIONSETTINGS">
<column name="imageProxyEnabled" type="BIT" /> <column name="imageProxyEnabled" type="BIT" />
</addColumn> </addColumn>
<sql>update APPLICATIONSETTINGS set imageProxyEnabled=false</sql> <update tableName="APPLICATIONSETTINGS">
<column name="imageProxyEnabled" valueBoolean="false"></column>
</update>
</changeSet>
<changeSet author="athou" id="add-query-timeout-setting">
<addColumn tableName="APPLICATIONSETTINGS">
<column name="queryTimeout" type="INT" />
</addColumn>
<update tableName="APPLICATIONSETTINGS">
<column name="queryTimeout" valueNumeric="0"></column>
</update>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>