2012-10-05 13 views
17

मेरे पास 3000 इकाइयों के साथ एक आवेदन है (मुझे पता है कि यह बहुत है लेकिन मैं इसे बदल नहीं सकता)। जब एप्लिकेशन लोड होता है तो यह सभी उपकरण और सत्र फैक्टरी सेटअप सामग्री करने के लिए एक मिनट में हाइबरनेट लेता है।
मैं सोच रहा था कि क्या मैं निर्माण समय के दौरान मूल कक्षाओं पर उपकरण करने के लिए हाइबरनेट को कॉन्फ़िगर कर सकता हूं।
इस तरह से मैं 3000 अतिरिक्त जेनरेट प्रॉक्सी कक्षाओं और एप्लिकेशन स्टार्ट-अप पर भारी ओवरहेड से बच सकता हूं।
मुझे हाइबरनेट बिल्ड टाइम इंस्ट्रूमेंटेशन (org.hibernate.tool.instrument.javassist.InstrumentTask) पर कुछ जानकारी मिली है, लेकिन यह स्पष्ट नहीं है कि यह पूरी तरह से रन-टाइम इंस्ट्रूमेंटेशन को प्रतिस्थापित करता है या केवल हाइबरनेट आलसी संपत्ति को तंत्र लाने के लिए संभालता है।
प्रॉक्सी पीढ़ी को समय बनाने के लिए कैसे स्थानांतरित करने के बारे में कोई जानकारी की सराहना की जाएगी।समय बनाने के लिए हाइबरनेट उपकरण को स्थानांतरित करना

+1

निर्माण समय सक्रिय करने के बाद उपकरण मैंने लोड समय/स्मृति खपत में कोई बदलाव नहीं देखा। –

उत्तर

12

हाँ, आप कर सकते हैं। हाइबरनेट कोड में एक चींटी कार्य है: org.hibernate.tool.instrument.javassist.InstrumentTask

<target name="instrument" depends="compile"> 
    <taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask"> 
     <classpath refid="<some-ant-path-including-hibernate-core-jar>"/> 
     <classpath path="<your-classes-path>"/> 
    </taskdef> 

    <instrument verbose="true"> 
     <fileset dir="<your-classes>"> 
      <include name="*.class"/> 
     </fileset> 
    </instrument> 
</target> 

मैंने कुछ मेवेन आधारित लोगों को भी देखा है।

+2

मैंने पहले ही प्लगइन स्निपेट देखे हैं लेकिन सवाल यह है कि क्या यह रन-टाइम इंस्ट्रूमेंटेशन को प्रतिस्थापित करता है (और लोड समय कम करेगा)? –

3

इंटरनेट पर समाधान मिला। इसे तेजी से कोशिश की, और ऐसा लगता है। उम्मीद है कि मैं देर से नहीं हूं ..

विचार maven-antrun-plugin का उपयोग करना है। आपको इसे अपने pom.xml में बिल्ड/प्लगइन्स सेक्शन में रखना होगा।

उदाहरण के लिए, - $ {hibernate.version} और $ {javassist.version} को आपके द्वारा उपयोग किए जा रहे संस्करण के साथ प्रतिस्थापित करने के लिए मत भूलना। - InstrumentTask अपने इकाई पर ही चलाता है करने के लिए शामिल नियमों को संशोधित करने के

<plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>Instrument domain classes</id> 
        <configuration> 
         <tasks> 
          <taskdef name="instrument" 
            classname="org.hibernate.tool.instrument.javassist.InstrumentTask"> 
           <classpath> 
            <path refid="maven.dependency.classpath"/> 
            <path refid="maven.plugin.classpath"/> 
           </classpath> 
          </taskdef> 
          <instrument verbose="true"> 
           <fileset dir="${project.build.outputDirectory}"> 
            <include name="**/model/**/*.class"/> 
           </fileset> 
          </instrument> 
         </tasks> 
        </configuration> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-core</artifactId> 
        <version>${hibernate.version}</version> 
       </dependency> 

       <dependency> 
        <groupId>javassist</groupId> 
        <artifactId>javassist</artifactId> 
        <version>${javassist.version}</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
+0

क्या यह अन्य उत्तर का एक मुखौटा संस्करण है? – sharakan

+0

साहित्यिक नहीं, मुझे यह पृष्ठ मिला: http://tricksdev.blogspot.fr/2009/03/hibernate-bytecode-instrumentation.html। लेकिन मैं इसे InstrumentTask के अंतिम संस्करण का उपयोग करने और इसे दस्तावेज करने के लिए अनुकूलित करता हूं। – Samuel

4

के बाद से हाइबरनेट 4.2.8 आप हाइबरनेट-बढ़ाने-Maven-प्लगइन का उपयोग कर सकते हैं:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.hibernate.orm.tooling</groupId> 
      <artifactId>hibernate-enhance-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>process-test-resources</phase> 
        <goals> 
         <goal>enhance</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build>