2011-10-11 5 views
1

私は上に構築している他のいくつかのプロジェクトで再利用できるように永続プロジェクトを作成しようとしています。私は、Webサービス/ spring mvcプロジェクトやファイル処理を行うスタンドアロンのjarファイルで使用されます。私は前に、決してスタンドアロンの実行可能ファイルのJava JARとして春のMVCで休止状態を使用しましたspring/hibernateを使って持続層を作成する

はので、私はすべてのセットアップと作業(アプリケーション・コンテキストを)持っている:私はメインクラスのすべてのものから、それをテスト

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 

    <!-- Enable annotation style of managing transactions --> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <!-- Root Context: defines shared resources visible to all other web components --> 

    <!-- HIBERNATE --> 
    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="classpath:spring.properties" /> 
    </bean> 

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="${jdbc.driverClassName}" /> 
    <property name="jdbcUrl" value="${jdbc.databaseurl}" /> 
    <property name="user" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <property name="acquireIncrement" value="5" /> 
    <property name="idleConnectionTestPeriod" value="60"/> 
    <property name="maxPoolSize" value="100"/> 
    <property name="maxStatements" value="50"/> 
    <property name="minPoolSize" value="10"/> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="mappingResources"> 
      <list>  <value>com/project/utility/persistence/mapping/TestProp.hbm.xml</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 


    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

    <!-- END HIBERNATE --> 
</beans> 

OKに見えますマッピング/依存関係を持つ:

public static void main(String[] args) { 
     ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("appCtx.xml"); 
    } 

私は次に何をしたいどのようないくつかのデータを取得し、それがWebサービスと処理の両方で再利用することができますので、私はその上で、いくつかのインターフェイスを構築したいいくつかのDAOクラスを構築することですjar(maven依存関係)としてのツール。

ダオのクラスを構築するためには、私はsessionFactoryを!= nullにする必要があります。これはどうすればいいですか?

答えて

1

これには多くのアプローチがあります。私が使用する1つの解決策は、javax.persistence.PersistenceContext注釈を使用することです。 Springはこのアノテーションを尊重し、ローカルのスレッドEntityManagerにプロキシを注入します。あなたのDAOがSpringによって作成されていれば、DAOの中からエンティティマネージャにアクセスできます。

public class DAO { 

    private EntityManager entityManager; 
    @PersistenceContext 
    public void setEntityManager(EntityManager entityManager) { 
    this.entityManager = entityManager; 
    } 

} 
1
@Repository 
public class MyDAO { 

    @Autowired 
    private SessionFactory sessionFactory; 

    // ... 
} 

、コンテキストXMLファイルにMyDAO Beanを追加するか、または単にこのファイルに次の行を追加します

<context:annotation-config /> 
<context:component-scan base-package="one.of.the.parent.packages.of.your.dao" /> 
関連する問題