10 changed files with 7 additions and 465 deletions
@ -1,139 +0,0 @@
@@ -1,139 +0,0 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed 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 |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.metrics.writer; |
||||
|
||||
import java.util.concurrent.ConcurrentHashMap; |
||||
import java.util.concurrent.ConcurrentMap; |
||||
import java.util.concurrent.TimeUnit; |
||||
|
||||
import com.codahale.metrics.Counter; |
||||
import com.codahale.metrics.Gauge; |
||||
import com.codahale.metrics.Histogram; |
||||
import com.codahale.metrics.Meter; |
||||
import com.codahale.metrics.MetricRegistry; |
||||
import com.codahale.metrics.Timer; |
||||
|
||||
import org.springframework.boot.actuate.metrics.Metric; |
||||
import org.springframework.boot.actuate.metrics.dropwizard.DropwizardMetricServices; |
||||
|
||||
/** |
||||
* A {@link MetricWriter} that send data to a Dropwizard {@link MetricRegistry} based on a |
||||
* naming convention. |
||||
* |
||||
* <ul> |
||||
* <li>Updates to {@link #increment(Delta)} with names in "meter.*" are treated as |
||||
* {@link Meter} events</li> |
||||
* <li>Other deltas are treated as simple {@link Counter} values</li> |
||||
* <li>Inputs to {@link #set(Metric)} with names in "histogram.*" are treated as |
||||
* {@link Histogram} updates</li> |
||||
* <li>Inputs to {@link #set(Metric)} with names in "timer.*" are treated as {@link Timer} |
||||
* updates</li> |
||||
* <li>Other metrics are treated as simple {@link Gauge} values (single valued |
||||
* measurements of type double)</li> |
||||
* </ul> |
||||
* |
||||
* @author Dave Syer |
||||
* @deprecated Since 1.3 in favor of {@link DropwizardMetricServices} |
||||
*/ |
||||
@Deprecated |
||||
public class DropwizardMetricWriter implements MetricWriter { |
||||
|
||||
private final MetricRegistry registry; |
||||
|
||||
private final ConcurrentMap<String, Object> gaugeLocks = new ConcurrentHashMap<String, Object>(); |
||||
|
||||
/** |
||||
* Create a new {@link DropwizardMetricWriter} instance. |
||||
* @param registry the underlying metric registry |
||||
*/ |
||||
public DropwizardMetricWriter(MetricRegistry registry) { |
||||
this.registry = registry; |
||||
} |
||||
|
||||
@Override |
||||
public void increment(Delta<?> delta) { |
||||
String name = delta.getName(); |
||||
long value = delta.getValue().longValue(); |
||||
if (name.startsWith("meter")) { |
||||
Meter meter = this.registry.meter(name); |
||||
meter.mark(value); |
||||
} |
||||
else { |
||||
Counter counter = this.registry.counter(name); |
||||
counter.inc(value); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void set(Metric<?> value) { |
||||
String name = value.getName(); |
||||
if (name.startsWith("histogram")) { |
||||
long longValue = value.getValue().longValue(); |
||||
Histogram metric = this.registry.histogram(name); |
||||
metric.update(longValue); |
||||
} |
||||
else if (name.startsWith("timer")) { |
||||
long longValue = value.getValue().longValue(); |
||||
Timer metric = this.registry.timer(name); |
||||
metric.update(longValue, TimeUnit.MILLISECONDS); |
||||
} |
||||
else { |
||||
final double gauge = value.getValue().doubleValue(); |
||||
// Ensure we synchronize to avoid another thread pre-empting this thread after
|
||||
// remove causing an error in Dropwizard Metrics
|
||||
// NOTE: Dropwizard Metrics provides no way to do this atomically
|
||||
synchronized (getGaugeLock(name)) { |
||||
this.registry.remove(name); |
||||
this.registry.register(name, new SimpleGauge(gauge)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private Object getGaugeLock(String name) { |
||||
Object lock = this.gaugeLocks.get(name); |
||||
if (lock == null) { |
||||
Object newLock = new Object(); |
||||
lock = this.gaugeLocks.putIfAbsent(name, newLock); |
||||
lock = (lock == null ? newLock : lock); |
||||
} |
||||
return lock; |
||||
} |
||||
|
||||
@Override |
||||
public void reset(String metricName) { |
||||
this.registry.remove(metricName); |
||||
} |
||||
|
||||
/** |
||||
* Simple {@link Gauge} implementation to {@literal double} value. |
||||
*/ |
||||
private final static class SimpleGauge implements Gauge<Double> { |
||||
|
||||
private final double value; |
||||
|
||||
private SimpleGauge(double value) { |
||||
this.value = value; |
||||
} |
||||
|
||||
@Override |
||||
public Double getValue() { |
||||
return this.value; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -1,182 +0,0 @@
@@ -1,182 +0,0 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed 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 |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.autoconfigure.orm.jpa; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import javax.sql.DataSource; |
||||
|
||||
import org.springframework.orm.jpa.JpaVendorAdapter; |
||||
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; |
||||
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager; |
||||
|
||||
/** |
||||
* Convenient builder for JPA EntityManagerFactory instances. Collects common |
||||
* configuration when constructed and then allows you to create one or more |
||||
* {@link LocalContainerEntityManagerFactoryBean} through a fluent builder pattern. The |
||||
* most common options are covered in the builder, but you can always manipulate the |
||||
* product of the builder if you need more control, before returning it from a |
||||
* {@code @Bean} definition. |
||||
* |
||||
* @author Dave Syer |
||||
* @since 1.1.0 |
||||
* @deprecated since 1.3.0 in favor of |
||||
* {@link org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder} |
||||
*/ |
||||
@Deprecated |
||||
public class EntityManagerFactoryBuilder { |
||||
|
||||
private final Delegate delegate; |
||||
|
||||
/** |
||||
* Create a new instance passing in the common pieces that will be shared if multiple |
||||
* EntityManagerFactory instances are created. |
||||
* @param jpaVendorAdapter a vendor adapter |
||||
* @param properties common configuration options, including generic map for JPA |
||||
* vendor properties |
||||
* @param persistenceUnitManager optional source of persistence unit information (can |
||||
* be null) |
||||
*/ |
||||
public EntityManagerFactoryBuilder(JpaVendorAdapter jpaVendorAdapter, |
||||
JpaProperties properties, PersistenceUnitManager persistenceUnitManager) { |
||||
this.delegate = new Delegate(jpaVendorAdapter, properties.getProperties(), |
||||
persistenceUnitManager); |
||||
} |
||||
|
||||
public Builder dataSource(DataSource dataSource) { |
||||
return new Builder(this.delegate.dataSource(dataSource)); |
||||
} |
||||
|
||||
/** |
||||
* An optional callback for new entity manager factory beans. |
||||
* @param callback the entity manager factory bean callback |
||||
*/ |
||||
public void setCallback(final EntityManagerFactoryBeanCallback callback) { |
||||
this.delegate.setCallback( |
||||
new org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder.EntityManagerFactoryBeanCallback() { |
||||
|
||||
@Override |
||||
public void execute(LocalContainerEntityManagerFactoryBean factory) { |
||||
callback.execute(factory); |
||||
} |
||||
|
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* A fluent builder for a LocalContainerEntityManagerFactoryBean. |
||||
* @deprecated since 1.3.0 in favor of |
||||
* {@link org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder} |
||||
*/ |
||||
@Deprecated |
||||
public final class Builder { |
||||
|
||||
private final org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder.Builder delegate; |
||||
|
||||
private Builder( |
||||
org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder.Builder delegate) { |
||||
this.delegate = delegate; |
||||
} |
||||
|
||||
/** |
||||
* The names of packages to scan for {@code @Entity} annotations. |
||||
* @param packagesToScan packages to scan |
||||
* @return the builder for fluent usage |
||||
*/ |
||||
public Builder packages(String... packagesToScan) { |
||||
this.delegate.packages(packagesToScan); |
||||
return this; |
||||
} |
||||
|
||||
/** |
||||
* The classes whose packages should be scanned for {@code @Entity} annotations. |
||||
* @param basePackageClasses the classes to use |
||||
* @return the builder for fluent usage |
||||
*/ |
||||
public Builder packages(Class<?>... basePackageClasses) { |
||||
this.delegate.packages(basePackageClasses); |
||||
return this; |
||||
} |
||||
|
||||
/** |
||||
* The name of the persistence unit. If only building one EntityManagerFactory you |
||||
* can omit this, but if there are more than one in the same application you |
||||
* should give them distinct names. |
||||
* @param persistenceUnit the name of the persistence unit |
||||
* @return the builder for fluent usage |
||||
*/ |
||||
public Builder persistenceUnit(String persistenceUnit) { |
||||
this.delegate.persistenceUnit(persistenceUnit); |
||||
return this; |
||||
} |
||||
|
||||
/** |
||||
* Generic properties for standard JPA or vendor-specific configuration. These |
||||
* properties override any values provided in the {@link JpaProperties} used to |
||||
* create the builder. |
||||
* @param properties the properties to use |
||||
* @return the builder for fluent usage |
||||
*/ |
||||
public Builder properties(Map<String, ?> properties) { |
||||
this.delegate.properties(properties); |
||||
return this; |
||||
} |
||||
|
||||
/** |
||||
* Configure if using a JTA {@link DataSource}, i.e. if |
||||
* {@link LocalContainerEntityManagerFactoryBean#setDataSource(DataSource) |
||||
* setDataSource} or |
||||
* {@link LocalContainerEntityManagerFactoryBean#setJtaDataSource(DataSource) |
||||
* setJtaDataSource} should be called on the |
||||
* {@link LocalContainerEntityManagerFactoryBean}. |
||||
* @param jta if the data source is JTA |
||||
* @return the builder for fluent usage |
||||
*/ |
||||
public Builder jta(boolean jta) { |
||||
this.delegate.jta(jta); |
||||
return this; |
||||
} |
||||
|
||||
public LocalContainerEntityManagerFactoryBean build() { |
||||
return this.delegate.build(); |
||||
} |
||||
|
||||
} |
||||
|
||||
/** |
||||
* A callback for new entity manager factory beans created by a Builder. |
||||
* @deprecated since 1.3.0 in favor of |
||||
* {@link org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder} |
||||
*/ |
||||
@Deprecated |
||||
public interface EntityManagerFactoryBeanCallback { |
||||
|
||||
void execute(LocalContainerEntityManagerFactoryBean factory); |
||||
|
||||
} |
||||
|
||||
private static class Delegate |
||||
extends org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder { |
||||
|
||||
Delegate(JpaVendorAdapter jpaVendorAdapter, Map<String, ?> jpaProperties, |
||||
PersistenceUnitManager persistenceUnitManager) { |
||||
super(jpaVendorAdapter, jpaProperties, persistenceUnitManager); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -1,70 +0,0 @@
@@ -1,70 +0,0 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed 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 |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.autoconfigure.orm.jpa; |
||||
|
||||
import java.util.Collections; |
||||
|
||||
import javax.sql.DataSource; |
||||
|
||||
import org.junit.Test; |
||||
|
||||
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; |
||||
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; |
||||
|
||||
import static org.junit.Assert.assertFalse; |
||||
import static org.junit.Assert.assertTrue; |
||||
import static org.mockito.Mockito.mock; |
||||
|
||||
/** |
||||
* Tests for {@link EntityManagerFactoryBuilder}. |
||||
* |
||||
* @author Dave Syer |
||||
*/ |
||||
@Deprecated |
||||
public class EntityManagerFactoryBuilderTests { |
||||
|
||||
private JpaProperties properties = new JpaProperties(); |
||||
|
||||
private DataSource dataSource1 = mock(DataSource.class); |
||||
|
||||
private DataSource dataSource2 = mock(DataSource.class); |
||||
|
||||
@Test |
||||
public void entityManagerFactoryPropertiesNotOverwritingDefaults() { |
||||
EntityManagerFactoryBuilder factory = new EntityManagerFactoryBuilder( |
||||
new HibernateJpaVendorAdapter(), this.properties, null); |
||||
LocalContainerEntityManagerFactoryBean result1 = factory |
||||
.dataSource(this.dataSource1) |
||||
.properties(Collections.singletonMap("foo", "spam")).build(); |
||||
assertFalse(result1.getJpaPropertyMap().isEmpty()); |
||||
assertTrue(this.properties.getProperties().isEmpty()); |
||||
} |
||||
|
||||
@Test |
||||
public void multipleEntityManagerFactoriesDoNotOverwriteEachOther() { |
||||
EntityManagerFactoryBuilder factory = new EntityManagerFactoryBuilder( |
||||
new HibernateJpaVendorAdapter(), this.properties, null); |
||||
LocalContainerEntityManagerFactoryBean result1 = factory |
||||
.dataSource(this.dataSource1) |
||||
.properties(Collections.singletonMap("foo", "spam")).build(); |
||||
assertFalse(result1.getJpaPropertyMap().isEmpty()); |
||||
LocalContainerEntityManagerFactoryBean result2 = factory |
||||
.dataSource(this.dataSource2).build(); |
||||
assertTrue(result2.getJpaPropertyMap().isEmpty()); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue