2012-01-09 14 views
6

Tôi đang làm ứng dụng web Java EE đầu tiên của mình bằng thủy tinh và netbeans. Khi tôi tạo một bài kiểm tra đơn vị yêu cầu Container EJB được nhúng, nó có thể mất khoảng 30 giây để tải. Tôi nghĩ rằng đó là hoàn toàn dễ hiểu vì nó "bắt chước" máy chủ glassfish. Nhưng sau đó tôi đã xem qua bài viết này từ Adam Biên nơi nó nói:Có cách nào để làm cho thùng chứa EJB được nhúng có khởi động nhanh hơn không?

Toàn bộ kiểm tra, với khởi động các container, mất trên máy tính của tôi về 5 giây.

http://www.adam-bien.com/roller/abien/entry/embedding_ejb_3_1_container

Vì vậy, tôi phải thừa nhận một cái gì đó không được cấu hình đúng. Tôi đang chạy Linux Mint 12, dự án của tôi đang sử dụng cơ sở dữ liệu MySQL và máy tính của tôi là lõi kép 2Ghz, RAM 4 GB. Hầu hết mọi thứ đều sử dụng các thiết lập mặc định từ cài đặt netbeans. (Tôi đã yêu cầu một bộ xử lý mới sẽ di chuyển Điểm chuẩn CPU từ 1700 đến 7800 theo cpubenchmark.net)

Tôi có thể làm gì để cải thiện tốc độ khởi động Vùng chứa EJB được nhúng?

trong khi nhìn vào sản lượng, culprate chính có vẻ là:

org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA 

Dưới đây là toàn bộ sản lượng:

Jan 9, 2012 5:01:57 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default. 
Jan 9, 2012 5:01:59 PM org.glassfish.ha.store.spi.BackingStoreFactoryRegistry register INFO: Registered org.glassfish.ha.store.adapter.cache.ShoalBackingStoreProxy for persistence-type = replicated in BackingStoreFactoryRegistry 
Jan 9, 2012 5:02:00 PM com.sun.enterprise.v3.server.AppServerStartup run INFO: GlassFish Server Open Source Edition 3.1.1 (12) startup time : Embedded (1,476ms), startup services(2,053ms), total(3,529ms) 
Jan 9, 2012 5:02:00 PM org.glassfish.admin.mbeanserver.JMXStartupService$JMXConnectorsStarterThread run INFO: JMXStartupService: JMXConnector system is disabled, skipping. 
Jan 9, 2012 5:02:02 PM org.glassfish.admin.mbeanserver.JMXStartupService shutdown INFO: JMXStartupService and JMXConnectors have been shut down. 
Jan 9, 2012 5:02:02 PM com.sun.enterprise.v3.server.AppServerStartup stop INFO: Shutdown procedure finished 
Jan 9, 2012 5:02:02 PM AppServerStartup run INFO: [Thread[GlassFish Kernel Main Thread,5,main]] exiting 
Jan 9, 2012 5:02:02 PM org.glassfish.ha.store.spi.BackingStoreFactoryRegistry register INFO: Registered org.glassfish.ha.store.adapter.cache.ShoalBackingStoreProxy for persistence-type = replicated in BackingStoreFactoryRegistry 
Jan 9, 2012 5:02:02 PM com.sun.enterprise.v3.server.AppServerStartup run INFO: GlassFish Server Open Source Edition 3.1.1 (12) startup time : Embedded (5,874ms), startup services(150ms), total(6,024ms) 
Jan 9, 2012 5:02:02 PM org.glassfish.admin.mbeanserver.JMXStartupService$JMXConnectorsStarterThread run INFO: JMXStartupService: JMXConnector system is disabled, skipping. 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.EJBContainerProviderImpl skipJar INFO: ... skipping entry with a Manifest file with a special attribute: glassfish-embedded-static-shell.jar 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding EJB module to ScatteredArchive classes 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive mysql-connector-java-5.1.13-bin.jar 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive commons-codec-1.6.jar 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive commons-codec-1.6-bin.zip 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive ant.jar 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive primefaces-3.0.RC2.jar 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive ant-junit.jar 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive log4j-1.2.15.jar 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive classes 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.DeploymentElement getOrCreateApplication INFO: [DeploymentElement] adding library to ScatteredArchive junit-4.8.2.jar 
Jan 9, 2012 5:02:03 PM org.glassfish.ejb.embedded.EJBContainerImpl deploy INFO: [EJBContainerImpl] Deploying app: [email protected] 
Jan 9, 2012 5:02:08 PM org.hibernate.validator.util.Version <clinit> INFO: Hibernate Validator 4.1.0.Final 
Jan 9, 2012 5:02:09 PM org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver. 
Jan 9, 2012 5:02:15 PM com.sun.enterprise.security.SecurityLifecycle <init> INFO: SEC1002: Security Manager is OFF. 
Jan 9, 2012 5:02:15 PM com.sun.enterprise.security.SecurityLifecycle onInitialization INFO: SEC1010: Entering Security Startup Service 
Jan 9, 2012 5:02:15 PM com.sun.enterprise.security.PolicyLoader loadPolicy INFO: SEC1143: Loading policy provider com.sun.enterprise.security.provider.PolicyWrapper. 
Jan 9, 2012 5:02:15 PM com.sun.enterprise.security.auth.realm.Realm doInstantiate INFO: SEC1115: Realm [admin-realm] of classtype [com.sun.enterprise.security.auth.realm.file.FileRealm] successfully created. 
Jan 9, 2012 5:02:15 PM com.sun.enterprise.security.auth.realm.Realm doInstantiate INFO: SEC1115: Realm [file] of classtype [com.sun.enterprise.security.auth.realm.file.FileRealm] successfully created. 
Jan 9, 2012 5:02:15 PM com.sun.enterprise.security.auth.realm.Realm doInstantiate INFO: SEC1115: Realm [certificate] of classtype [com.sun.enterprise.security.auth.realm.certificate.CertificateRealm] successfully created. 
Jan 9, 2012 5:02:15 PM com.sun.enterprise.security.SecurityLifecycle onInitialization INFO: SEC1011: Security Service(s) Started Successfully 
Jan 9, 2012 5:02:17 PM org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver. 
Jan 9, 2012 5:02:26 PM org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver. 
Jan 9, 2012 5:02:26 PM org.eclipse.persistence.session.file:/tmp/gfembed2576733372934037196tmp/applications/classes/_REMPU INFO: EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504 
Jan 9, 2012 5:02:29 PM org.eclipse.persistence.session.file:/tmp/gfembed2576733372934037196tmp/applications/classes/_REMPU INFO: file:/tmp/gfembed2576733372934037196tmp/applications/classes/_REMPU login successful 
... 

Cảm ơn

+0

đồng ý. Đối với tôi phải mất 30 giây không phải là 5 giây mà AB đang nói về –

+0

2014 là ở đây, chiến lược có thay đổi không? làm thế nào bạn đang làm thử nghiệm ejb trong junit –

+0

Câu trả lời ngắn gọn, tôi không. Nó trở nên quá lộn xộn và trung thực không thực tế. Thay vào đó, tôi sẽ bắt đầu một bài kiểm tra đơn vị/tích hợp từ điểm vào. Trong một thế giới lý tưởng, tôi sẽ kiểm tra toàn bộ ngăn xếp nhưng tôi có thời hạn để đánh! –

Trả lời

2

Bạn có thể thử một impl EJBContainer.

Thời gian thử nghiệm của EJBContainer được nhúng OpenEJB nằm trong phạm vi 1 giây. Nó hỗ trợ các bộ mô tả GlassFish - chúng ta sử dụng chúng thay vì của chúng ta khi chúng ta chạy TCK Java EE vì chúng ta quá lười để viết vài nghìn descriptors chúng ta sẽ cần và TCK đã đi kèm với các mô tả hoàn chỉnh GlassFish.

Hoặc, có thể thử một cách tiếp cận hoàn toàn khác.

Để có phong cách thử nghiệm đơn vị hơn, hãy kiểm tra điều này: https://stackoverflow.com/a/8716630/190816 I.e. xây dựng ứng dụng trong trường hợp thử nghiệm và ném vào một số chế nhạo khi cần thiết.

+0

Vâng, đó là những gì tôi nhận được khi đọc các bài viết của Adam Bien. Tôi sẽ phải chơi một chút nhưng có vẻ như có một vài lựa chọn. Nhưng bây giờ tôi biết Thùng chứa EJB được nhúng do Netbeans thiết lập không phải là những gì tôi nên sử dụng cho các bài kiểm tra đơn vị. –

1

Dưới đây là những gì tôi đã làm cho đến nay và chu kỳ kiểm tra của tôi giảm xuống còn 13 giây.

1) Nâng cấp bộ vi xử lý của tôi. Tôi chuyển từ một 2Ghz lõi kép sang hai lõi tứ 2,5Ghz, cạo hết 5 vòng.

2) Định cấu hình tệp xây dựng theo cách thủ công, thành thật mà nói, tôi hoàn toàn không hiểu tại sao nó tạo ra sự khác biệt như vậy nhưng nó đã giảm gần 10 giây. http://netbeans.org/kb/docs/javaee/javaee-entapp-junit.html#Exercise_1d

Map<String, Object> properties = new HashMap<String, Object>(); 
// Use the MODULES property to specify the set of modules to be initialized, 
// in this case a java.io.File 
properties.put(EJBContainer.MODULES, new File("build/jar")); 

3) Đã sửa đổi persistence.xml để KHÔNG tạo bảng cơ sở dữ liệu. Tôi sẽ chỉ phải bật lại khi thực hiện thay đổi đối với cấu trúc thực thể.

Nhưng các con số hơi thất thường và tha thứ cho tôi nếu tôi không dành thời gian để thực hiện phân tích thống kê phù hợp. Khi tôi bật bảng "tạo" trong trạng thái kiên trì và quay trở lại cấu hình tự động cơ bản, nó chạy trong 16 giây. Nhưng trước khi các nhà chế biến đến, tôi đã giảm xuống mức 18. Vì vậy, các con số không hoàn toàn tăng lên.

Tôi cũng rất vui khi nhận được đề xuất từ ​​Adam Bien. Tôi hỏi anh ta liệu anh ấy có sẵn lòng viết một bài viết về chủ đề này không. Ông nói nó miêu tả đặc trưng trong this bài viết và biết thêm chi tiết có thể được tìm thấy trong cuốn sách của ông và các bài viết khác:

+0

Cho rằng toàn bộ JBoss 7 bắt đầu trong một giây, điều này vẫn có vẻ như một thời gian dài! –

+0

Đồng ý. Tuy nhiên khi tôi đọc các bài báo từ Adam Bien tôi nghĩ rằng tôi đã tiếp cận vấn đề sai, gây nhầm lẫn thử nghiệm đơn vị với thử nghiệm tích hợp. Những gì ông đưa ra có vẻ thực tế hơn nhiều. –

Các vấn đề liên quan