killbill-aplcache
Changes
profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java 26(+22 -4)
profiles/killbill/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java 21(+4 -17)
Details
diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java b/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
index a692fc5..20a023a 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/modules/KillbillServerModule.java
@@ -19,6 +19,7 @@
package org.killbill.billing.server.modules;
import javax.servlet.ServletContext;
+import javax.sql.DataSource;
import org.killbill.billing.account.glue.DefaultAccountModule;
import org.killbill.billing.beatrix.glue.BeatrixModule;
@@ -51,6 +52,7 @@ import org.killbill.billing.junction.glue.DefaultJunctionModule;
import org.killbill.billing.overdue.glue.DefaultOverdueModule;
import org.killbill.billing.payment.glue.PaymentModule;
import org.killbill.billing.platform.api.KillbillConfigSource;
+import org.killbill.billing.platform.glue.ReferenceableDataSourceSpyProvider;
import org.killbill.billing.server.DefaultServerService;
import org.killbill.billing.server.ServerService;
import org.killbill.billing.server.config.KillbillServerConfig;
@@ -76,12 +78,22 @@ import org.killbill.billing.util.glue.NonEntityDaoModule;
import org.killbill.billing.util.glue.RecordIdModule;
import org.killbill.billing.util.glue.SecurityModule;
import org.killbill.billing.util.glue.TagStoreModule;
+import org.killbill.billing.util.security.shiro.dao.SessionModelDao;
import org.killbill.clock.Clock;
import org.killbill.clock.ClockMock;
import org.killbill.commons.embeddeddb.EmbeddedDB;
+import org.killbill.commons.jdbi.mapper.LowerToCamelBeanMapperFactory;
+import org.skife.jdbi.v2.ResultSetMapperFactory;
+import org.skife.jdbi.v2.tweak.ResultSetMapper;
+
+import com.google.inject.Provider;
+import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Names;
public class KillbillServerModule extends KillbillPlatformModule {
+ public static final String SHIRO_DATA_SOURCE_ID = "shiro";
+
public KillbillServerModule(final ServletContext servletContext, final KillbillServerConfig serverConfig, final KillbillConfigSource configSource) {
super(servletContext, serverConfig, configSource);
}
@@ -101,10 +113,16 @@ public class KillbillServerModule extends KillbillPlatformModule {
protected void configureDao() {
super.configureDao();
- dbi.registerMapper(new AuditLogModelDaoMapper());
- dbi.registerMapper(new RecordIdIdMappingsMapper());
- queueDbi.registerMapper(new AuditLogModelDaoMapper());
- queueDbi.registerMapper(new RecordIdIdMappingsMapper());
+ final Provider<DataSource> dataSourceSpyProvider = new ReferenceableDataSourceSpyProvider(daoConfig, SHIRO_DATA_SOURCE_ID);
+ requestInjection(dataSourceSpyProvider);
+ bind(DataSource.class).annotatedWith(Names.named(SHIRO_DATA_SOURCE_ID)).toProvider(dataSourceSpyProvider).asEagerSingleton();
+
+ final Multibinder<ResultSetMapperFactory> resultSetMapperFactorySetBinder = Multibinder.newSetBinder(binder(), ResultSetMapperFactory.class);
+ resultSetMapperFactorySetBinder.addBinding().toInstance(new LowerToCamelBeanMapperFactory(SessionModelDao.class));
+
+ final Multibinder<ResultSetMapper> resultSetMapperSetBinder = Multibinder.newSetBinder(binder(), ResultSetMapper.class);
+ resultSetMapperSetBinder.addBinding().to(AuditLogModelDaoMapper.class).asEagerSingleton();
+ resultSetMapperSetBinder.addBinding().to(RecordIdIdMappingsMapper.class).asEagerSingleton();
}
@Override
diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java b/profiles/killbill/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java
index 5f2da5a..df87dcc 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/security/KillbillJdbcRealm.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -27,10 +27,7 @@ import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.realm.jdbc.JdbcRealm;
import org.apache.shiro.util.ByteSource;
-import org.killbill.billing.platform.jndi.ReferenceableDataSourceSpy;
import org.killbill.billing.tenant.security.KillbillCredentialsMatcher;
-import org.killbill.commons.jdbi.guice.DaoConfig;
-import org.killbill.commons.jdbi.guice.DataSourceProvider;
/**
* @see {shiro.ini}
@@ -38,18 +35,14 @@ import org.killbill.commons.jdbi.guice.DataSourceProvider;
public class KillbillJdbcRealm extends JdbcRealm {
private static final String KILLBILL_AUTHENTICATION_QUERY = "select api_secret, api_salt from tenants where api_key = ?";
- private static final String SHIRO_DATA_SOURCE_ID = "shiro";
- private final DaoConfig config;
-
- public KillbillJdbcRealm(final DaoConfig config) {
+ public KillbillJdbcRealm(final DataSource dataSource) {
super();
- this.config = config;
+ setDataSource(dataSource);
configureSecurity();
configureQueries();
- configureDataSource();
}
@Override
@@ -71,10 +64,4 @@ public class KillbillJdbcRealm extends JdbcRealm {
private void configureQueries() {
setAuthenticationQuery(KILLBILL_AUTHENTICATION_QUERY);
}
-
- private void configureDataSource() {
- final DataSource realDataSource = new DataSourceProvider(config, SHIRO_DATA_SOURCE_ID).get();
- final DataSource dataSource = new ReferenceableDataSourceSpy(realDataSource, SHIRO_DATA_SOURCE_ID);
- setDataSource(dataSource);
- }
}
diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/security/TenantFilter.java b/profiles/killbill/src/main/java/org/killbill/billing/server/security/TenantFilter.java
index 00b7b49..242de3c 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/security/TenantFilter.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/security/TenantFilter.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -21,6 +21,7 @@ package org.killbill.billing.server.security;
import java.io.IOException;
import javax.inject.Inject;
+import javax.inject.Named;
import javax.inject.Singleton;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -30,6 +31,7 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.sql.DataSource;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationToken;
@@ -38,10 +40,10 @@ import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
import org.apache.shiro.realm.Realm;
import org.killbill.billing.jaxrs.resources.JaxrsResource;
import org.killbill.billing.server.listeners.KillbillGuiceListener;
+import org.killbill.billing.server.modules.KillbillServerModule;
import org.killbill.billing.tenant.api.Tenant;
import org.killbill.billing.tenant.api.TenantApiException;
import org.killbill.billing.tenant.api.TenantUserApi;
-import org.killbill.commons.jdbi.guice.DaoConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,13 +61,14 @@ public class TenantFilter implements Filter {
protected TenantUserApi tenantUserApi;
@Inject
- protected DaoConfig daoConfig;
+ @Named(KillbillServerModule.SHIRO_DATA_SOURCE_ID)
+ protected DataSource dataSource;
private ModularRealmAuthenticator modularRealmAuthenticator;
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
- final Realm killbillJdbcRealm = new KillbillJdbcRealm(daoConfig);
+ final Realm killbillJdbcRealm = new KillbillJdbcRealm(dataSource);
// We use Shiro to verify the api credentials - but the Shiro Subject is only used for RBAC
modularRealmAuthenticator = new ModularRealmAuthenticator();
modularRealmAuthenticator.setRealms(ImmutableList.<Realm>of(killbillJdbcRealm));
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
index d1dfa5d..bdfaa5d 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestJaxrsBase.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -24,8 +24,10 @@ import java.util.List;
import java.util.Map;
import javax.inject.Inject;
+import javax.inject.Named;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
+import javax.sql.DataSource;
import org.apache.shiro.web.servlet.ShiroFilter;
import org.eclipse.jetty.servlet.FilterHolder;
@@ -90,6 +92,10 @@ public class TestJaxrsBase extends KillbillClient {
@Inject
protected TestApiListener busHandler;
+ @Inject
+ @Named(KillbillServerModule.SHIRO_DATA_SOURCE_ID)
+ protected DataSource shiroDataSource;
+
protected DaoConfig daoConfig;
protected KillbillServerConfig serverConfig;
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/server/security/TestKillbillJdbcRealm.java b/profiles/killbill/src/test/java/org/killbill/billing/server/security/TestKillbillJdbcRealm.java
index e2fd295..b9a1c36 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/server/security/TestKillbillJdbcRealm.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/server/security/TestKillbillJdbcRealm.java
@@ -61,7 +61,7 @@ public class TestKillbillJdbcRealm extends TestJaxrsBase {
dbConfig.setPassword(helper.getPassword());
final KillbillJdbcRealm jdbcRealm;
- jdbcRealm = new KillbillJdbcRealm(daoConfig);
+ jdbcRealm = new KillbillJdbcRealm(shiroDataSource);
jdbcRealm.setDataSource(new HikariDataSource(dbConfig));
securityManager = new DefaultSecurityManager(jdbcRealm);
diff --git a/util/src/main/java/org/killbill/billing/util/security/shiro/dao/JDBCSessionDao.java b/util/src/main/java/org/killbill/billing/util/security/shiro/dao/JDBCSessionDao.java
index c389bd7..7620280 100644
--- a/util/src/main/java/org/killbill/billing/util/security/shiro/dao/JDBCSessionDao.java
+++ b/util/src/main/java/org/killbill/billing/util/security/shiro/dao/JDBCSessionDao.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -23,8 +25,6 @@ import javax.inject.Inject;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.eis.CachingSessionDAO;
-import org.killbill.commons.jdbi.mapper.LowerToCamelBeanMapperFactory;
-import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.IDBI;
import org.skife.jdbi.v2.Transaction;
import org.skife.jdbi.v2.TransactionStatus;
@@ -35,14 +35,10 @@ public class JDBCSessionDao extends CachingSessionDAO {
private static final Logger log = LoggerFactory.getLogger(JDBCSessionDao.class);
- private JDBCSessionSqlDao jdbcSessionSqlDao;
+ private final JDBCSessionSqlDao jdbcSessionSqlDao;
@Inject
public JDBCSessionDao(final IDBI dbi) {
- if (dbi instanceof DBI) {
- // TODO PIERRE Move to DBIProvider, once it's in util
- ((DBI) dbi).registerMapper(new LowerToCamelBeanMapperFactory(SessionModelDao.class));
- }
this.jdbcSessionSqlDao = dbi.onDemand(JDBCSessionSqlDao.class);
}
diff --git a/util/src/test/java/org/killbill/billing/DBTestingHelper.java b/util/src/test/java/org/killbill/billing/DBTestingHelper.java
index d61feee..40a5e4e 100644
--- a/util/src/test/java/org/killbill/billing/DBTestingHelper.java
+++ b/util/src/test/java/org/killbill/billing/DBTestingHelper.java
@@ -24,6 +24,8 @@ import org.killbill.billing.platform.test.PlatformDBTestingHelper;
import org.killbill.billing.util.dao.AuditLogModelDaoMapper;
import org.killbill.billing.util.dao.RecordIdIdMappingsMapper;
import org.killbill.billing.util.io.IOUtils;
+import org.killbill.billing.util.security.shiro.dao.SessionModelDao;
+import org.killbill.commons.jdbi.mapper.LowerToCamelBeanMapperFactory;
import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.IDBI;
@@ -49,6 +51,7 @@ public class DBTestingHelper extends PlatformDBTestingHelper {
final DBI dbi = (DBI) super.getDBI();
dbi.registerMapper(new AuditLogModelDaoMapper());
dbi.registerMapper(new RecordIdIdMappingsMapper());
+ dbi.registerMapper(new LowerToCamelBeanMapperFactory(SessionModelDao.class));
return dbi;
}