2012-10-05 36 views
17

Tôi có một ứng dụng với khoảng 3000 thực thể (tôi biết nó rất nhiều nhưng tôi không thể thay đổi nó). Khi ứng dụng tải nó mất Hibernate một phút để làm tất cả các thiết bị đo đạc và các công cụ thiết lập SessionFactory.
Tôi đã tự hỏi nếu tôi có thể cấu hình Hibernate để làm các thiết bị đo đạc trên các lớp học ban đầu trong thời gian xây dựng.
Bằng cách này tôi có thể tránh 3000 lớp proxy được tạo bổ sung và chi phí khổng lồ khi khởi động ứng dụng.
Tôi đã tìm thấy một số thông tin về thiết bị thời gian xây dựng Hibernate (org.hibernate.tool.instrument.javassist.InstrumentTask) nhưng không rõ liệu điều này có thay thế hoàn toàn công cụ thời gian chạy hay chỉ xử lý cơ chế tìm nạp tài sản lười biếng Hibernate.
Bất kỳ thông tin nào về cách di chuyển thế hệ proxy để tạo thời gian sẽ được đánh giá cao.Di chuyển thiết bị Hibernate để xây dựng thời gian

+1

Sau khi kích hoạt thời gian xây dựng thiết bị đo đạc Tôi không nhận thấy bất kỳ thay đổi nào trong thời gian tải/bộ nhớ tiêu thụ. –

Trả lời

12

Có, bạn có thể. Có một tác vụ Ant trong mã Hibernate: 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> 

Tôi cũng đã thấy một số biểu tượng dựa trên Maven.

+2

Tôi đã nhìn thấy các đoạn mã plugin nhưng câu hỏi đặt ra là liệu nó có thay thế thiết bị chạy theo thời gian (và sẽ giảm thời gian tải) không? –

3

Tìm thấy giải pháp trên internet. Đã thử nó nhanh chóng, và nó có vẻ làm việc. Hy vọng tôi không đến muộn ..

Ý tưởng là sử dụng maven-antrun-plugin. Bạn cần phải có điều này trong tệp pom.xml của bạn trong phần xây dựng/bổ trợ.

Trong ví dụ dưới đây, đừng quên: - để thay thế $ {hibernate.version} và $ {javassist.version} bằng phiên bản bạn đang sử dụng. - để sửa đổi các quy tắc bao gồm có InstrumentTask chỉ chạy trên thực thể của bạn

<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

Đây có phải là phiên bản maven của câu trả lời khác không? – sharakan

+0

Không theo nghĩa đen, tôi tìm thấy trang này: http://tricksdev.blogspot.fr/2009/03/hibernate-bytecode-instrumentation.html. Nhưng tôi thích nghi nó để sử dụng phiên bản cuối cùng của InstrumentTask và ghi lại nó. – Samuel

4

Kể từ Hibernate 4.2.8 bạn có thể sử dụng hibernate-nâng cao-maven-plugin:

<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> 
Các vấn đề liên quan