Frage

Ich arbeite eine Legacy-Anwendung mit Spring AOP auf Profilierung und ich möchte um eine Entscheidung, einige Datenpunkte bekommen Ich brauche zu machen.

Dies ist, was ich bisher getan haben: Ich habe den Code und Konfiguration mit Spring AOP geschaffen, die mir helfen würde, um die Bohnen zu profilieren, die durch die Feder Container verwaltet werden.

Während die dao Schicht Profilierungs finde ich, dass der Legacy-App c3p0 Framework verwendet - insbesondere die ComboPooledDataSource Klasse. Da diese Klasse eine letzte Klasse ist, bin ich zur Arbeit Arbeit mit Frühling AOP nicht in der Lage jede länger- seit cglib nicht Proxies für die endgültigen Klassen erstellen kann!

Angesichts dieser Straßensperre, ich bin der Planung bis zur Verwendung Aspekt der Kompilierung Webtechnik. Ich möchte wissen, ob dies die richtige Entscheidung ist, oder gibt es andere Möglichkeiten, dieses Problem mit Spring AOP selbst zu überwinden. Bitte lassen Sie mich wissen.

Konfiguration Info:

<bean id="sample_dao" class="com.foo.SampleDaoImpl">
  <property name="dataSource" ref="sample_data_source"/>
  ..
  <property name="sampleProperty" ref="sample_bean"/>
</bean>

   <bean id="sample_data_source" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" depends-on="some_sample">
  <property name="driverClass" value="${driverClassName}"/>
  <property name="jdbcUrl" value="${url}"/>
  <property name="user" value="${username}"/>
  <property name="password" value="${password}"/>
  <property name="initialPoolSize" value="1"/>
  <property name="maxPoolSize" value="4"/>
  <property name="acquireIncrement" value="1"/>
  <property name="preferredTestQuery" value="select 1 from sample_table"/>
  <property name="idleConnectionTestPeriod" value="30"/>
  <property name="testConnectionOnCheckin" value="true"/>
  <property name="acquireRetryAttempts" value="3"/>
  <property name="connectionCustomizerClassName" value="com.foo.SampleConnectionCustomizer"/>

War es hilfreich?

Lösung

Abhängig davon, ob oder nicht Sie bereits in Ihrem Projekt verwenden AspectJ, könnten Sie die folgende Vorgehensweise einfacher finden:

Wickeln Sie Ihre ComboPooledDataSource Instanz in einer nicht-final Dekorateur Klasseninstanz; cglib sollte den Dekorateur ohne zu sein klüger zu Proxy-fähig sein.

Unter der Annahme - im Interesse des Beispiels - dass das dataSource Attribut aus SampleDaoImpl Klasse vom Typ javax.sql.DataSource ist:

public class ComboPooledDataSourceDecorator implements javax.sql.DataSource {

   private ComboPooledDataSource delegate;

   public void setDelegate(ComboPooledDataSource delegate) {
      this.delegate = delegate;
   }

   public Connection getConnection() {
      return delegate.getConnection();
   }

   // other methods of javax.sql.DataSource

}

Draht es in den Frühling wie folgt aus:

<bean id="sample_data_source" class="mystuff.ComboPooledDataSourceDecorator">
   <property name="delegate">
      <bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
         ...
      </bean>
   </property>
</bean>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top