Java EE 6 เทียบกับ Spring 3 stack [ปิด]


90

ฉันกำลังเริ่มโปรเจ็กต์ใหม่ตอนนี้ ฉันต้องเลือกเทคโนโลยี ฉันต้องการอะไรบางอย่างที่เบาดังนั้นจึงไม่มี EJB หรือ Seam ในทางกลับกันฉันต้องการ JPA (Hibernate หรือทางเลือกอื่น) และ JSF พร้อม IceFaces

คุณคิดว่าสแต็กใน Spring 3 ที่ติดตั้งบน Tomcat เป็นตัวเลือกที่ดีหรือไม่? หรือเว็บแอปพลิเคชัน Java EE 6 น่าจะดีกว่านี้? ฉันกลัวว่า Java EE 6 เป็นเทคโนโลยีใหม่ยังไม่ได้รับการจัดทำเป็นเอกสารอย่างดี Tomcat ดูเหมือนจะดูแลรักษาง่ายกว่า Glassfish 3

ความคิดเห็นของคุณคืออะไร? คุณมีประสบการณ์หรือไม่?


8
ฉันจะไปที่primefaces.orgแทน IceFaces ถ้าคุณต้องการแสง เร็วกว่ามากและ API ที่บางกว่า
Shervin Asgari

1
มีเพียง Glassfish เท่านั้นที่ให้บริการ JEE6 ในขณะนี้ Resin กำลังใช้งานโปรไฟล์เว็บ JEE6 อย่างช้าๆซึ่งอาจเพียงพอสำหรับคุณขึ้นอยู่กับสิ่งที่คุณต้องการ
Thorbjørn Ravn Andersen

3
@ Thorbjørnคุณสามารถใช้โปรไฟล์เว็บ GlassFish v3 ได้หากคุณต้องการเฉพาะโปรไฟล์เว็บ
Pascal Thivent

@Pascal มีรายละเอียดว่าในไม่ช้าจะมีทางเลือกอื่นสำหรับ Glassfish เพื่อรับ JEE6 หากคุณสามารถอยู่กับโปรไฟล์เว็บได้ (ฉันทำได้) ไม่ใช่เพื่อบอกว่า Glassfish ทำไม่ได้
Thorbjørn Ravn Andersen

@ Thorbjørnฉันลืมลบ @ Thorbjørn :) ความคิดเห็นนี้มีไว้สำหรับ OP ซึ่งดูเหมือนว่าจะใช้ GFv3 "เต็มสแต็ก" เป็นทางเลือกเดียว
Pascal Thivent

คำตอบ:


101

ฉันต้องการอะไรบางอย่างที่เบาดังนั้นจึงไม่มี EJB หรือ Seam

คุณช่วยอธิบายได้ไหมว่าอะไรทำให้ EJB หนักตั้งแต่ EJB3 คุณรู้หรือไม่ว่าเราไม่ได้อยู่ในปี 2004 อีกต่อไป? ที่ผมต้องการที่จะอ่านของคุณความหมายของแสงและข้อโต้แย้งของคุณ (และฉันจะปรับปรุงคำตอบของฉันมีความสุขเพราะผมค่อนข้างมั่นใจว่าผมจะมีสิ่งที่เป็นของแข็งไม่กี่ที่จะพูด)

ในทางกลับกันฉันต้องการ JPA (Hibernate หรือทางเลือกอื่น) และ JSF พร้อม IceFaces

Java EE 6 Web Profile ซึ่งรวมถึง JSF 2.0, JPA 2.0, Bean Validation, EJB 3.1 Lite, CDI, ... จะเหมาะสำหรับสิ่งนี้และคุณสามารถใช้GlassFish v3 Web Profileเพื่อเรียกใช้แอปพลิเคชันที่สร้างขึ้นด้วย Java EE 6 Web Profile .

คุณคิดว่าสแต็คใน Spring 3 ที่ติดตั้งบน Tomcat เป็นตัวเลือกที่ดีหรือไม่? หรือเว็บแอปพลิเคชัน Java EE 6 น่าจะดีกว่านี้?

ดีผมชอบความคิดที่จะเรียกใช้รหัสของฉันในที่ไม่เป็นกรรมสิทธิ์แพลตฟอร์ม (Java EE) มากกว่าในภาชนะที่เป็นกรรมสิทธิ์ (ฤดูใบไม้ผลิ) และฉันคิดว่า Java EE 6 นั้นดีพอ (และนี่คือคำสละสลวย, EJB 3.1 (Lite), JPA 2.0, JSF 2.0, CDI kick ass) โปรดทราบว่าฉันเป็นคนขี้ระแวง JSF แต่ฉันลองดูครั้งที่สองและ JSF 2.0 กับ CDI นั้นแตกต่างกันมากจนฉันไม่สามารถเปรียบเทียบได้ และถ้าคุณไม่ได้ดู CDI ขอบอกเลยว่ามันเป็นเรื่องที่น่าสนใจ

ฉันกลัวว่า Java EE 6 เป็นเทคโนโลยีใหม่ยังไม่ได้รับการจัดทำเป็นเอกสารอย่างดี

Java EE ดูเป็นเอกสารที่ดีสำหรับฉัน ฟังดูเหมือนอ้างสิทธิ์ฟรี และเชื่อฉันหรือไม่ว่าฉันเริ่มพบว่า Spring เริ่มซับซ้อนในขณะที่ Java EE เริ่มง่ายขึ้น

Tomcat ดูเหมือนจะดูแลรักษาง่ายกว่า Glassfish 3

คุณลองอะไรหรือเปล่า? คุณประสบปัญหาใดเป็นพิเศษหรือไม่? อีกครั้งดูเหมือนการอ้างสิทธิ์ฟรี


2
ฉันเพิ่งทำโปรเจ็กต์ใหญ่ที่พัฒนาด้วย EJB3.0 + Seam บน JBoss พร้อม Drools, GraniteDS และอื่น ๆ อีกมากมาย ฉันเห็นด้วย Seam Rocks! แต่ฉันใช้เวลา 50% ของการพัฒนาในการปรับใช้งานใหม่รีสตาร์ทเซิร์ฟเวอร์ข้อผิดพลาดในการปรับใช้การทำความสะอาดไดเร็กทอรี temp ฯลฯ ในทางกลับกันประสิทธิภาพของ JBoss Tools นั้นแย่มาก (ฉันหมายถึงจริงๆ - ctrl + space และ 10s hang) ความจริงนี้ทำให้ฉันไม่สามารถใช้ JEE6 ซึ่งดูเหมือนว่ายืมมาจาก Seam framework สำหรับเซิร์ฟเวอร์ฉันไม่ต้องการคิดถึง conecion pool, jndi, jms, jmx, ear deplyment ฉันต้องการบางสิ่งที่จะทำให้ WAR และทำงานในไม่กี่วินาที
Piotr Gwiazda

6
@peperg Gaving King เป็นผู้นำข้อมูลจำเพาะของ CDI (Weld being the RI) ดังนั้นคุณจะพบความคล้ายคลึงกันระหว่าง Seam และ CDI แต่ CDI! = Seam, Java EE 6! = ตะเข็บการรับรู้ของคุณผิด อาจลองใช้โปรไฟล์เว็บ GlassFish v3 คุณจะประหลาดใจ (และเมื่อกำหนดพูลการเชื่อมต่อแล้วก็ไม่ต้องกังวลมากนัก)
Pascal Thivent

8
คนที่พูดว่า EJB หนักคืออะไร?. ฉันใช้ EJB v3.1 และเป็นเพียงคำอธิบายประกอบ pojos เมื่อพวกเขาพูดว่าหนักพวกเขาหมายถึงประสิทธิภาพหรืออะไร?
arg20

13
@ arg20 - นั่นเป็นคำถามใหญ่จริงๆและ Pascal ก็ขอให้อธิบายว่าคำว่า "heavy" (หรือ "light") หมายถึงอะไรในบริบทนี้ เป็นไปได้มากว่ามันเป็นความบาดหมางเก่าที่เหลืออยู่ระหว่าง Spring และ EJB ในช่วงแรก ๆ EJB1 & 2 มีแนวคิดที่หนักหน่วง การเน้นย้ำมากเกินไปเกี่ยวกับการรีบูตและถั่วที่มีสถานะเป็นตัวบ่งชี้การปรับใช้ XML ที่ละเอียดอย่างน่าขันและอินเทอร์เฟซที่จำเป็นในการใช้งานจำนวนมากทำให้พวกเขามีชื่อเสียงที่ไม่ดี ด้วย EJB3 (2006) สิ่งนี้ได้เปลี่ยนไปอย่างสิ้นเชิง แต่คนที่ออกจาก EJB ในปี 2004 ในฤดูใบไม้ผลิบางครั้งก็ยังคิดว่าปี 2004 และ EJB2 เป็นรุ่นล่าสุด
Arjan Tijms

7
โปรดทราบว่าในหน้าเกี่ยวกับ Spring มีข้อความว่า "เราเชื่อว่า: J2EE น่าจะใช้งานง่ายกว่า" โปรดทราบว่าพวกเขาใช้คำว่า "J2EE" ไม่ใช่ "Java EE" ซึ่งเป็นชื่อที่ถูกต้องตั้งแต่เปิดตัว Java EE 5 (ฉันคิดว่า) สิ่งนี้บอกได้มากเกี่ยวกับพวกเขา ...
Vítor E.Silva Souza

32

ฉันไม่ได้ใช้ JavaEE6

อย่างไรก็ตามฉันได้รับความเสียหายอย่างมากจาก JavaEE และ EJB เวอร์ชันก่อนหน้าทั้งหมดที่ฉันจะไม่ไว้วางใจจนกว่ามันจะสร้างตัวเองเป็นมาตรฐานโดยพฤตินัยไม่ใช่แค่มาตรฐานทางนิตินัย ตอนนี้สปริงยังคงเป็นมาตรฐานโดยพฤตินัย

หลอกฉันครั้งเดียวทำให้คุณอับอาย หลอกฉันสองครั้งทำให้ฉันอับอาย หลอกฉันสามครั้ง EJB

บางคนจะอ้างว่า Spring เป็นกรรมสิทธิ์ ฉันจะโต้แย้งว่าการใช้งานข้อกำหนด JavaEE ของผู้ขายนั้นเป็นกรรมสิทธิ์ของผู้ขายหากไม่เป็นเช่นนั้น

เมื่อเร็ว ๆ นี้ฉันได้ทำการแปลงครั้งใหญ่ในการย้ายแอปพลิเคชัน Java จำนวนมากจาก JBoss ไปยัง Weblogic แอป Spring / Hibernate ทั้งหมดมีการปรับเปลี่ยนเป็นศูนย์เนื่องจากมีไลบรารีทั้งหมดที่ต้องการในตัวแอปทั้งหมดที่ใช้ JPA และ EJB และ JSF เป็นภัยพิบัติในการพอร์ต ความแตกต่างเล็กน้อยในการตีความ JPA, EJB และ JSF ระหว่างแอปเซิร์ฟเวอร์ทำให้เกิดข้อบกพร่องที่น่ารังเกียจทุกประเภทซึ่งต้องใช้เวลาแก้ไขตลอดไป แม้แต่บางสิ่งที่เรียบง่ายอย่างการตั้งชื่อ JNDI ก็แตกต่างกันอย่างสิ้นเชิงระหว่าง AppServers

ฤดูใบไม้ผลิเป็นการนำไปใช้ JavaEE เป็นข้อมูลจำเพาะ นั่นคือความแตกต่างอย่างมาก ฉันต้องการใช้ข้อมูลจำเพาะหากข้อมูลจำเพาะมีอากาศแน่น 100% และไม่มีพื้นที่กระดิกอย่างแน่นอนในวิธีที่ผู้ขายใช้ข้อกำหนดนั้น แต่ข้อมูลจำเพาะ JavaEE ไม่เคยเป็นเช่นนั้น บางที JavaEE6 จะแน่นกว่า? ฉันไม่รู้ ยิ่งคุณสามารถจัดแพคเกจใน WAR ของคุณได้มากเท่าไหร่และคุณก็ต้องพึ่งพาไลบรารี AppServer น้อยลงแอปพลิเคชันของคุณก็จะพกพาได้มากขึ้นและนั่นคือเหตุผลที่ฉันใช้ Java ไม่ใช่ Dot-NET

แม้ว่าข้อมูลจำเพาะจะแน่นมาก แต่ก็เป็นการดีที่จะสามารถอัปเกรดเซิร์ฟเวอร์แอปได้โดยไม่ต้องอัปเกรดสแต็คเทคโนโลยีทั้งหมดในแอปพลิเคชันทั้งหมดของฉันควบคู่ไปด้วย หากฉันต้องการอัปเกรดจาก JBoss 4.2 เป็น JBoss 7.0 ฉันต้องพิจารณาผลกระทบของ JSF เวอร์ชันใหม่ที่มีต่อแอปพลิเคชันทั้งหมดของฉัน ฉันไม่ต้องพิจารณาผลกระทบต่อแอปพลิเคชัน Spring-MVC (หรือ Struts) ของฉัน


1
ตรงนี้เป็นเหตุผลที่ดี
Palesz

1
ฉันเห็นด้วยกับเหตุผลนี้ปัญหามากมายที่ฉันประสบมาจากการพึ่งพาการใช้งานข้อกำหนดของคอนเทนเนอร์ ความเจ็บปวดน้อยลงอย่างมีนัยสำคัญจากไลบรารีแบบฝัง ยากที่จะโต้แย้งนอกเหนือจากความชอบเชิงปรัชญาของข้อมูลจำเพาะ
Peter Porter

เหตุผลที่ยอดเยี่ยม อย่างไรก็ตามนี่เป็นประสบการณ์ของคุณหลังจาก JEE 6 หรือไม่? ฉันเข้าใจว่าการใช้งานข้อมูลจำเพาะของ App Server ยังคงเป็นเรื่องที่เจ็บปวดดังนั้นข้อกำหนดเดียวกันที่ App Server 1 ใช้อาจจะง่ายและมีประสิทธิภาพในขณะที่ไม่ใช่สำหรับ App Server 2
Soumya

1
+1. นอกจากนี้แอ็พพลิเคชันเซิร์ฟเวอร์ยังเปลี่ยนแปลงตามกำหนดการของการดำเนินงานโดยที่สปริง / ไฮเบอร์เนตอยู่ภายใต้การควบคุมของนักพัฒนา ในสภาพแวดล้อมของ บริษัท ขนาดใหญ่การอัปเกรดเซิร์ฟเวอร์แอปเป็นเรื่องใหญ่กว่ามาก
Nathan Hughes

ฉันไม่ค่อยเข้าใจประเด็นเกี่ยวกับ Dot-Net เป็นกรรมสิทธิ์มากพอ ๆ กับ Spring และได้รับการพัฒนาโดยผู้จำหน่ายรายเดียวซึ่งก็คือ Microsoft ช่วยอธิบายหน่อยได้ไหม?
user1339260

23

มันไม่สำคัญหรอก Java EE 6 ดีพอและเนื่องจากโปรไฟล์ที่นั่นจึงไม่ "หนัก" - คุณแค่ใช้โปรไฟล์เว็บ

โดยส่วนตัวแล้วฉันชอบฤดูใบไม้ผลิมากกว่า แต่ฉันไม่มีข้อโต้แย้งที่เป็นเหตุเป็นผลกับ Java EE 6 :)

(ตามที่ฉันได้รับการเตือนจากความคิดเห็นคุณอาจต้องการลองใช้RichFacesเช่นเดียวกับICEfacesและ / หรือPrimeFacesขึ้นอยู่กับส่วนประกอบที่คุณต้องการ)


1
คำถามก็คือ: "การใช้ Glassfish Application Server แบบเต็มสแต็กนั้นสมเหตุสมผลหรือไม่เพียงแค่ใช้โปรไฟล์เว็บมากเกินไป"
Piotr Gwiazda

1
@peperg ใช้โปรไฟล์เว็บ GlassFish v3 หากคุณต้องการเพียงแค่โปรไฟล์เว็บดูคำตอบของฉัน
Pascal Thivent

ฉันได้โพสต์ข้อโต้แย้งไว้ที่นี่stackoverflow.com/questions/2822812/spring-3-0-vs-j2ee-6-0/…แทนที่จะนำมาจากจุดยืน "วิธีการนำไปสู่การผลิต" นั่นอาจจะเติมเต็มอ่างเก็บน้ำของคุณเล็กน้อย
Oliver Drotbohm

@peperq, JBoss 6 เปิดตัวในช่วงวันหยุด
Thorbjørn Ravn Andersen

17

เมื่อเร็ว ๆ นี้หนึ่งในงานมอบหมายไคลเอ็นต์ของฉันเกี่ยวข้องกับการประเมิน Spring Stack Vs Custom framework stack เทียบกับ Java EE Standards หลังจากผ่านไปหนึ่งเดือนของการประเมินผลและการสร้างต้นแบบฉันไม่เพียงแค่มีความสุข แต่ประทับใจกับชุดคุณสมบัติ Java EE 6 สำหรับสถาปัตยกรรมโครงการ "องค์กร" ใหม่ ๆ ในปี 2554 และในอนาคตฉันจะใช้ Java EE 6 และส่วนขยายที่เป็นไปได้เช่น Seam 3 หรือโครงการส่วนขยาย Apache JSR299 ที่กำลังจะมีขึ้น สถาปัตยกรรม Java EE 6 มีความคล่องตัวและรวมเอาแนวคิดโอเพ่นซอร์สที่ดีที่สุดจำนวนมากที่พัฒนาขึ้นในช่วงหลายปีที่ผ่านมา

พิจารณาคุณลักษณะต่อไปนี้นอกกรอบ: Event Management, Contexts and DI, Interceptors, Decorators, RESTful webservices, Integrated testing with embeddable container, Security และอื่น ๆ อีกมากมาย

ผลลัพธ์ส่วนใหญ่ของฉันได้รับการเผยแพร่ในบล็อกของฉันเพื่ออธิบายแนวคิดหลักของ Java EE 6 ที่คุณอาจพบว่ามีประโยชน์

แน่นอนว่าไม่มีกฎที่ยากและรวดเร็วในการเลือกกรอบงาน Java EE 6 อาจใช้งานได้ดีสำหรับ "เว็บไซต์" ที่เรียบง่ายซึ่งไม่ต้องการสถานะเซสชันการสนทนาที่สมบูรณ์ คุณอาจเลือก Grails หรือ Play ก็ได้! กรอบ. แต่สำหรับเว็บแอปพลิเคชันการสนทนาฉันไม่เห็นข้อโต้แย้งที่ดีกว่าว่าทำไม Java EE 6 จึงไม่เหมาะสม


Java EE 6 นั้นช้ามากเพียงแค่โปรไฟล์เว็บของ Glassfish และ Glassfish นั้นช้ามากที่จะเริ่มเปรียบเทียบกับท่าเทียบเรือ / แมวตัวผู้ / อะไรก็ตาม การทดสอบคอนเทนเนอร์แบบฝังก็ทำได้ช้าเช่นกัน
Palesz

15

หลังจากนั้นไม่นานฉันมีประสบการณ์กับสแต็ค:

  • Java EE 5 + ตะเข็บ + หินแกรนิต DS + Flex
  • ฤดูใบไม้ผลิ 3 + Vaadin (บน GWT)
  • สปริง 3 + JSF 2.0 (PrimeFaces)

colclusions ของฉันคือ:

  • Spring 3 นั้นง่ายกว่า Seam (เกือบจะเป็น Java EE 6) และวิ่งบน Tomcat และ Jetty! (ท่าเทียบเรือสำหรับการพัฒนาด้วยปลั๊กอิน maven เป็นสิ่งที่น่าเชื่อถือ)
  • ฉันรัก Flex (จริงๆแล้วฉันเป็นนักพัฒนา Flex มานานแล้วดังนั้นฉันจึงลำเอียง) และหากคุณต้องการอินเทอร์เฟซที่หลากหลายและสามารถซื้อ FlashBuilder ให้ใช้สิ่งนี้ แต่ใช้แบ็กเอนด์ Spring + GraniteDS หรือ BlazeDs หากคุณไม่สามารถซื้อ FlashBuilder ได้อย่าเสียเวลา
  • Vaadin ยอดเยี่ยมมาก!. ขั้นตอนการพัฒนานั้นง่ายกว่า Flex แต่คุณสามารถสร้างแอปพลิเคชันที่สมบูรณ์ได้อย่างง่ายดายโดยไม่ต้องใช้ HTML คุณจะไม่เขียนบรรทัด singe JS คุณแค่ต้องมี CSS (ใน Flex คุณก็ต้องการเช่นกัน) ดังนั้นหากอินเทอร์เฟซแอปพลิเคชันของคุณทำงานเหมือนแอปพลิเคชันบนเดสก์ท็อปและคุณไม่สามารถ (หรือไม่ต้องการ) ใช้ Flex ให้ใช้ Vaadin คำเตือน! Vaadin มีค่าใช้จ่าย JS ขนาดใหญ่สำหรับเบราว์เซอร์
  • หากคุณสร้างแอปพลิเคชันเหมือนเว็บไซต์ที่ง่ายขึ้นให้ใช้ JSF2.0 (พร้อมสปริงแบ็กเอนด์ตามด้านบน) คุณจะต้องต่อสู้กับ HTML (ฉันเกลียดมัน) และการสร้างอินเทอร์เฟซที่สมบูรณ์จะยากกว่า Vaadin (โดยเฉพาะเลย์เอาต์) คุณจะได้รับ HTML ที่มีน้ำหนักเบาสำหรับเบราว์เซอร์ / คอมพิวเตอร์ที่ช้าลง ฉันชอบ PrimeFaces - มันง่ายและมีเอกสารที่ดี อันดับที่สองคือ IceFaces
  • หากคุณสร้างเว็บไซต์ (ไม่ใช่เว็บแอปพลิเคชัน) ที่คุณต้องใส่ชีวิตลงใน HTML (แทนที่จะสร้างแอปพลิเคชันระดับองค์กรที่เหมาะกับเบราว์เซอร์) ให้ใช้ Wicket (หากคุณต้องการใช้องค์ประกอบตามทัศนคติแบบดึง) หรือ SpringMVC (หากคุณต้องการใช้เทมเพลตตาม ผลักดันทัศนคติ) หรือใช้แค่เล่น! กรอบ. โปรดจำไว้ว่าการสร้างส่วนประกอบจากข้อมูลที่สมบูรณ์จะยากกว่ามาก แต่คุณจะสามารถควบคุมแท็ก html แต่ละแท็กได้ (นักออกแบบ HTML / กราฟิกของคุณจะชอบมัน)

21
ฉันไม่เห็นว่าคำตอบของคุณเกี่ยวข้องกับคำถามอย่างไร ...
Pere Villega

1
-1 ดูเหมือนว่าไม่เหมาะสมอย่างยิ่งที่จะยอมรับคำตอบนี้เนื่องจากไม่ได้กล่าวถึง Java EE 6 ยิ่งไปกว่านั้นมันไม่ได้กล่าวถึงประเด็นใด ๆ ที่เพิ่มขึ้นในการคิดอย่างดีของ @Pascal Thievent (และอีกมากมายที่ได้รับการโหวตเป็นอย่างดี) ตอบ.
user359996

1
คำถามจริงใช้ไม่ได้มากกว่า ตอนนี้ JEE 6 โตมากแล้วไม่ใช่ในเดือนมีนาคม 2010 เมื่อคำถามถูกถาม
Piotr Gwiazda

@PiotrGwiazda JEE 6 เปลี่ยนไปในทางไหนตั้งแต่นั้นมา? ผู้คนกลัวมันมากขึ้นในตอนนั้น แต่โดยพื้นฐานแล้วมันก็เป็น JEE 6 คนเดิม
ymajoros

1
ฉันหมายความว่าการใช้งาน JEE6 นั้นเป็นผู้ใหญ่และพร้อมใช้งานมากขึ้น ขณะนี้ JBoss 7 มีความเสถียรและมีการใช้งานเพิ่มเติม ชุมชนมีขนาดใหญ่ขึ้นในขณะนี้ด้วย ขณะนี้เครื่องมือและ libs เพิ่มเติมรองรับ JEE 6 stack
Piotr Gwiazda

8

อ่านFuture Of Enterprise Java ของ Adam Bien ... Is Clear (Java EE ที่มี / ไม่มี Spring และ Vice Versa)รวมถึงความคิดเห็นเพื่อรับเหรียญทั้งสองด้าน ฉันจะเลือก Spring ด้วยเหตุผลหลายประการและต่อไปนี้เป็นหนึ่งในนั้น (สร้างความคิดเห็นจากโพสต์ใหม่)

'ฉันไม่แน่ใจว่าเซิร์ฟเวอร์ Java EE 6 ใดที่คุณกำลังพูดถึง มี Glassfish ได้รับการรับรองและ TMAX JEUS จะใช้เวลาสักครู่ (อ่าน: ปี) จนกว่า WebSphere, WebLogic, JBoss และเวอร์ชันที่รองรับ Java EE 6 จะอยู่ในระหว่างการผลิตและสามารถใช้สำหรับแอปพลิเคชันจริงได้ Spring 3 ต้องการ Java 1.5 และ J2EE 1.4 เพื่อให้สามารถใช้งานได้ในเกือบทุกสภาพแวดล้อม


6
ตอนนี้เราเกือบหนึ่งปีแล้วและ JBoss AS 6 ซึ่งรองรับ Java EE 6 กำลังถูกใช้ในการผลิต
Arjan Tijms

8

ความคิดเห็นของฉันขึ้นอยู่กับสิ่งที่คนอื่นไม่ได้กล่าวถึงกล่าวคือรหัสในที่ทำงานของฉันมักจะอยู่ได้หลายทศวรรษ (ตามตัวอักษร) และด้วยเหตุนี้การบำรุงรักษาจึงมีความสำคัญต่อเรา การบำรุงรักษารหัสของเราเองและไลบรารีที่เราใช้ รหัสของเราเองที่เราควบคุม แต่เพื่อประโยชน์ของเราว่าห้องสมุดที่เราใช้นั้นได้รับการดูแลโดยผู้อื่นในทศวรรษที่กล่าวมา

ในการสร้างเรื่องสั้นให้สั้นฉันได้ข้อสรุปแล้วว่าวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้คือการใช้โอเพนซอร์สของข้อกำหนดของ Sun จนถึง JVM แบบดิบ

จากการใช้งานโอเพนซอร์ส Apache Jakarta ได้พิสูจน์แล้วว่าสามารถดูแลรักษาห้องสมุดของตนได้และเมื่อเร็ว ๆ นี้ Sun ได้ทำงานมากมายในการผลิตการใช้งานที่มีคุณภาพสูงสำหรับ Glassfish v3 ไม่ว่าในกรณีใดเรายังมีแหล่งที่มาสำหรับโมดูลทั้งหมดดังนั้นหากทุกอย่างล้มเหลวเราสามารถดูแลโมดูลเหล่านั้นได้ด้วยตนเอง

ข้อมูลจำเพาะของดวงอาทิตย์มักจะมีความหมายที่เข้มงวดมากซึ่งการใช้งานที่เป็นไปตามข้อกำหนดสามารถเปลี่ยนแปลงได้อย่างง่ายดาย เพียงแค่ดูที่คอนเทนเนอร์ servlet

ในกรณีนี้ฉันขอแนะนำให้ดูที่ JavaServer Faces เพียงเพราะเป็นส่วนหนึ่งของ Java EE 6 ซึ่งหมายความว่าจะพร้อมใช้งานและคงไว้เป็นเวลานานมาก จากนั้นเราได้เลือกที่จะเพิ่มด้วย MyFaces Tomahawk เนื่องจากมีส่วนเพิ่มเติมที่เป็นประโยชน์และเป็นโครงการจาการ์ตา

ไม่มีอะไรผิดปกติกับ JBoss Seam หรืออื่น ๆ เป็นเพียงการที่พวกเขาให้ความสำคัญกับปัญหาการบำรุงรักษาที่สำคัญสำหรับเราน้อยลง


ปรากฎว่า Java ServerFaces 2 ใน Java EE 6 สามารถทำสิ่งที่เราต้องการ Tomahawk สำหรับ JSF 1 ได้ด้วยตัวเองมันเป็นเฟรมเวิร์กที่มีความสามารถมาก (แต่ XML ค่อนข้างหนัก)
Thorbjørn Ravn Andersen

จุดที่ดีน่าเสียดายที่ผู้คนมักจะลืมไปว่าซอฟต์แวร์ถูกสร้างขึ้นมาเพื่อใช้งานได้นานหลายทศวรรษและการสนับสนุนระยะยาวเป็นกุญแจสำคัญ
timmz

6

ฉันสามารถใช้ Spring ได้ถ้าคุณมีอยู่แล้ว แต่สำหรับโปรเจ็กต์ใหม่ประเด็นคืออะไร? ฉันจะใช้ Java EE 6 โดยตรง (ejb3, jsf2.0 ฯลฯ )

ถ้าลูกค้าสบายดีกับ Flex ไปได้เลย ใช้ BlazeDS หรือคล้ายกัน - ไม่มี mvc คุณอาจใช้เวลาในส่วนนั้นมากขึ้น (แลกเปลี่ยนข้อมูลระหว่างเซิร์ฟเวอร์และไคลเอนต์) แต่คุณสามารถควบคุมทั้งสองด้าน

อย่าใช้ Vaadin เว้นแต่คุณต้องการฆ่าเบราว์เซอร์ของคุณ นอกจากนี้คุณยังใช้เวลามากขึ้นในการแก้ไขโค้ดเมื่อหน้าเว็บของคุณซับซ้อนขึ้น นอกจากนี้ความคิดของคุณจะต้องเปลี่ยนไปอย่างสิ้นเชิงและสิ่งที่คุณรู้เกี่ยวกับการพัฒนาส่วนหน้ามาตรฐานจะเสียเปล่า อาร์กิวเมนต์ที่คุณไม่ต้องใช้ HTML หรือ JS นั้นไม่สมเหตุสมผลมากนัก คุณยังต้องรู้แม้ว่าคุณจะไม่ได้ใช้มันก็ตาม ในที่สุดจะแสดงผลเป็น HTML และ JS จากนั้นลองดีบัก - ตรวจสอบให้แน่ใจว่าคุณมีเวลาไม่กี่วันสำหรับสิ่งง่ายๆ นอกจากนี้ฉันนึกภาพไม่ออกว่านักพัฒนาเว็บที่ไม่รู้จัก html / js

ฉันไม่เข้าใจว่าทำไมผู้คนถึงลองใช้ abstractions ทั้งหมดแทนที่จะใช้ Java EE โดยตรง


5

เหตุใดจึงยังคงมีคำครึกโครมเกี่ยวกับ EJB ที่เป็นรุ่นหนาในปี 2010 ดูเหมือนว่าผู้คนจะไม่ได้รับการอัปเดตในเทคโนโลยี Java EE เพียงแค่ลองใช้งานคุณจะประหลาดใจอย่างมากว่าสิ่งต่าง ๆ ถูกทำให้ง่ายขึ้นใน Java EE 6 ได้อย่างไร


4

คำตอบสำหรับคำถามของคุณขึ้นอยู่กับข้อกำหนดโครงการของคุณ หากคุณไม่ต้องการคุณสมบัติ Java EE เช่นคิวข้อความคอนเทนเนอร์ที่มีการจัดการธุรกรรมส่วนกลาง ฯลฯ ให้ใช้ tomcat + spring

จากประสบการณ์ฉันพบว่าโครงการที่ต้องการการรวมบริการเว็บการตั้งเวลาคิวข้อความทำได้ดีที่สุดโดยใช้สแต็ก Java EE บางส่วน สิ่งที่ดีคือการใช้สปริงคุณยังสามารถรวมกับโมดูล Java EE ที่ทำงานในแอปพลิเคชันเซิร์ฟเวอร์ได้

Java EE 6 แตกต่างจากรุ่นก่อนหน้ามากและทำให้ทุกอย่างง่ายขึ้นมาก Java EE 6 ผสมผสานแนวคิดที่ดีที่สุดจากชุมชน Java ที่หลากหลายตัวอย่างเช่น Rod Johnson จาก Spring framework มีส่วนร่วมอย่างแข็งขันในการสร้าง Dependency Injection JSR ใน Java EE 6 ประโยชน์ของการใช้ Java EE 6 คือคุณกำลังเขียนโค้ดตาม มาตรฐานซึ่งอาจมีความสำคัญในบางองค์กรสำหรับการสนับสนุนผู้ขายเป็นต้น

GlassFish v3 รองรับ Java EE 6 และมีน้ำหนักเบาและเริ่มต้นได้เร็วมาก ฉันใช้ glassfish v3 ในการพัฒนาของฉันและมันง่ายมากที่จะกำหนดค่า มาพร้อมกับคอนโซลผู้ดูแลระบบที่ใช้งานง่ายมากซึ่งช่วยให้คุณจัดการเซิร์ฟเวอร์ของคุณแบบกราฟิก

หากคุณใช้ GlassfishV3 และ JSF 2 คุณสามารถใช้ประโยชน์จากคุณสมบัติ CDI ของ Java EE 6 ที่ช่วยให้คุณสร้างการสนทนาได้อย่างง่ายดาย (เช่นวิซาร์ดเช่นเพจ) ใน JSF

ต้องบอกว่าการใช้ Java EE 6 ทำให้คุณต้องเรียนรู้ API ใหม่ด้วย อาจไม่ใช่ทางเลือกที่ดีที่สุดสำหรับคุณทั้งนี้ขึ้นอยู่กับระยะเวลาที่มี Tomcat มีมานานแล้วและการผสมผสานระหว่าง tomcat + spring ถูกนำมาใช้โดยโครงการเว็บจำนวนมากซึ่งหมายความว่ามีเอกสาร / ฟอรัมมากมาย


ฉันไม่เห็นด้วยกับประโยคแรกของคุณตัวเลือกไม่เกี่ยวกับการใช้ JMS หรือไม่ และฉันไม่คิดว่า JSR-330 มีความสำคัญใน Java EE 6 (มีเหตุผลทางการเมืองมากกว่า) ส่วนที่สำคัญคือ JSR-299 (CDI) อย่างน้อยนี่คือความคิดเห็นของฉัน
Pascal Thivent

เห็นด้วยมีการเมืองบางอย่างที่เกี่ยวข้องกับ JSR330 - อย่างไรก็ตามมันค่อนข้างสำคัญเนื่องจากมันเป็นพื้นฐานทั่วไปสำหรับการฉีดพึ่งพาใน Java (SE หรือ EE) แทนที่จะทำให้ DI เป็นเทคโนโลยี JEE เท่านั้น นอกจากนี้ยังรองรับโดย Spring framework และ Google Guice ซึ่งหมายความว่าจะทำให้โค้ด Spring / Guice สามารถโอนไปยัง JEE6 หรือในทางกลับกันได้ง่าย JSR299 ยังได้รับการออกแบบมาเพื่อขยายคุณสมบัติใน JSR330 คุณถูกต้องสำหรับเว็บแอปพลิเคชันใน JEE6 JSR299 เป็นสิ่งสำคัญอย่างยิ่ง ด้วย JSR ทั้งสองนี้ JEE6 & Spring ทั้งสองมีรูปแบบการเขียนโปรแกรมที่คล้ายกันมาก ขอบคุณสำหรับความคิดเห็น!
Raz

3

ฉันทำงานทั้งใน Spring และ Java EE 6 สิ่งที่ฉันสามารถพูดได้จากประสบการณ์ของฉันก็คือถ้าคุณกำลังจะอายุมากขึ้น JSP หรือ Flex ที่เป็นกรรมสิทธิ์คุณจะปลอดภัยถ้าคุณอยู่กับ Spring

แต่ถ้าคุณต้องการก้าวไปข้างหน้าด้วย JSF ก็ถึงเวลาเปลี่ยนไปใช้ Java EE 6 ด้วย Java EE 6 คุณกำลังจะย้ายไปที่ Facelets และไลบรารีสคริปต์มาตรฐานและไลบรารีคอมโพเนนต์ ไม่มีความเข้ากันไม่ได้ของสคริปต์และเมทริกซ์ไลบรารีคอมโพเนนต์อีกต่อไป

เกี่ยวกับ Spring MVC เป็นสิ่งที่ดีตราบเท่าที่โครงการของคุณไม่ใหญ่เกินไป หากเป็นแอปพลิเคชันระดับองค์กรขนาดใหญ่ที่ยึดติดกับ Java EE 6 เพราะนั่นเป็นวิธีเดียวที่คุณสามารถรักษาไลบรารีคอมโพเนนต์ของคุณเองและบันเดิลทรัพยากรได้อย่างเป็นระเบียบ


1
ขอบคุณสำหรับความคิดเห็นของคุณ ทางเลือกของฉันคือ Spring + Vaadin
Piotr Gwiazda

3

หากคุณต้องการ Java EE แบบเต็มสแต็กฉันขอแนะนำให้คุณใช้ GlassFish 3.1 เริ่มต้นเร็วมากเมื่อเทียบกับคอนเทนเนอร์ Java EE อื่น ๆ ซึ่งใช้ Java EE 6 บางส่วนหรือทั้งหมด (JBoss 6, WebLogic 10.3.4) การปรับใช้ใหม่ใช้เวลาไม่กี่วินาทีและเกือบทั้งหมดสามารถทำได้โดยการประชุมผ่านการกำหนดค่ามันเป็นมิตรมาก

ฉันต้องการบางอย่าง "แสง" คุณสามารถปรับแต่ง Apache Tomcat 7.x ด้วยคุณสมบัติที่ต้องการได้ ฉันใช้จำนวนมากกับไลบรารีต่อไปนี้: Weld 1.1.0 (CDI) JPA 2.0 (Hibernate 3.6.x) - รีซอร์สเฉพาะธุรกรรมในเครื่อง JSF 2.x (Mojarra) RichFaces 4.0 BIRT runtime

เป็นนักพัฒนา Java EE ในช่วง 10 ปีที่ผ่านมา (ฉันประสบปัญหา EJB, JSF และเทคโนโลยีเว็บในช่วงต้น) Java EE 6 นั้นง่ายมากทำงานร่วมกันได้ดีและฮาร์ดแวร์ในปัจจุบันทำงานได้อย่างราบรื่นดังนั้นเหตุผลดั้งเดิมที่กระตุ้นให้ Spring ใช้ไม่ได้อีกต่อไป


1
ฉันชอบคำตอบของคุณ สมเหตุสมผลมาก ตอนที่ฉันโพสต์คำถาม JEE6 ยังเด็กมากและ Tomcat 7 ยังไม่เสร็จ "เหตุผลดั้งเดิมที่กระตุ้นให้ Spring ใช้ไม่ได้อีกต่อไป" - เป็นเรื่องจริง แต่ JEE6 ที่มี CDI ต้องใช้เวลาพอสมควร ตัวอย่างเช่น: การตรวจสอบ Javamelody พร้อมใช้งานสำหรับ Spring และ Guice (ฉันนึกภาพไม่ออกว่าจะต้องใช้แอปพลิเคชันโดยไม่มี) EHcache พร้อมใช้งานสำหรับ Spring (ฉันหมายถึงผลลัพธ์ของวิธีการแคช) หลายสิ่งหลายอย่างเช่นการเขียนโปรแกรมแง่มุมยังคงง่ายกว่าใน Spring เนื่องจากไลบรารีและเฟรมเวิร์กของบุคคลที่สามจำนวนมากรวมเข้ากับ Spring ได้อย่างง่ายดาย แต่ยังไม่รวมกับ JEE6
Piotr Gwiazda

1

ฉันยังคงชอบฤดูใบไม้ผลิมากกว่า

และฉันจะส่งต่อ JSF ฉันคิดว่ามันเป็นเทคโนโลยีที่ตายแล้ว Spring MVC น่าจะเป็นทางเลือกที่ดีกว่า ก็ดิ้นเช่นกัน คิดในแง่ของสัญญาบริการ XML แรกและคุณสามารถแยกส่วนหลังออกจาก UI ได้อย่างสมบูรณ์


1
ฉันได้สร้างแอพพลิเคชั่นบางตัวด้วย Java + Flex และ PHP + Flex และฉันยอมรับว่านี่เป็นทางออกที่ดีที่สุดสำหรับอินเทอร์เฟซที่หลากหลาย แต่ในแอปพลิเคชันนี้ฉันไม่สามารถใช้ Flex ได้ :( ฉันต้องการอินเทอร์เฟซระดับสูงดังนั้น Spring MVC จึงไม่ใช่วิธีแก้ปัญหาฉันต้องการคิดเกี่ยวกับการจัดเรียงข้อมูลที่สามารถจัดเรียงได้มากกว่า <tr> <td> แบบวนซ้ำ
Piotr Gwiazda

1
@duffymo - ฉันสามารถโต้แย้งได้ว่าการดิ้นเป็นทางเลือกที่ดีหรือไม่ JSF ยังไม่ตายโดยเฉพาะอย่างยิ่งกับไลบรารีเช่น richfaces, primefaces, icefaces และอื่น ๆ
Bozho

1
ใน IceFaces ฉันสร้างเมนูต้นไม้ดาต้ากริดใช้การกระทำเหตุการณ์และฉันไม่คิดว่าหน้าจะโหลดซ้ำหรือเป็นคำขอ ajax ดาต้ากริดที่จัดเรียงได้หรือต้นไม้ที่โหลด ajax เป็นส่วนประกอบของบิลอิน ใน Spring MVC ฉันทำงานบน HTML - ตารางรายการและอื่น ๆ ฉันจำเป็นต้องใช้กรอบจาวาสคริปต์ของบุคคลที่สามและสร้างเวทมนตร์ AJAX ด้วยมือ ฉันต้องการทำแบบ Flex แต่เป็นการตัดสินใจทางการเมือง / ธุรกิจไม่ใช่ของฉัน
Piotr Gwiazda

1
โครงการ JSF สองโครงการในปัจจุบันของฉันยังไม่ตายอย่างแน่นอน) และฉันพอใจกับวิธีการสร้าง RIA ของ JSF ("rich" ใน "richfaces" สำหรับสิ่งนั้น) มากกว่าการใช้ Flex แม้จะเผยแพร่ต่อสาธารณะในสัปดาห์หน้า
Bozho

2
ฉันอยากรู้ว่าทำไมคุณถึงยังชอบ Spring เพราะ Java EE 6 นั้นดีมาก คุณไม่คิดว่าการทำงานบนแพลตฟอร์มแบบเปิดมีความสำคัญต่ออนาคตของ Java หรือไม่?
Pascal Thivent

0

ฉันขอแนะนำ Spring + Tomcat เว้นแต่คุณจะรอเวลาให้ glassfish v3 และ Weld เป็นผู้ใหญ่มากขึ้น ขณะนี้มีปัญหาเล็กน้อยเกี่ยวกับการใช้หน่วยความจำ / การโหลด cpu เมื่อเรียกใช้ glassfish ด้วยแอปพลิเคชันที่เปิดใช้งาน CDI


0

ไม่ได้อ่านทุกอย่าง แต่เพียงเพื่อบอกว่าตอนนี้คุณสามารถใช้ EJB3 ในสงครามบน Java EE 6 เพื่อให้คุณสามารถใช้ EJB3 บน Tomcat ได้ (ฉันคิดว่า)


ได้คุณสามารถทำแพ็คเกจ EJB ใน WAR ใน Java EE 6 ได้ แต่ไม่ได้หมายความว่าคุณสามารถปรับใช้ WAR ดังกล่าวบน Tomcat ได้ คุณต้องมีคอนเทนเนอร์ที่ใช้โปรไฟล์เว็บและ Tomcat ไม่มีและจริงๆแล้วไม่มีแผนในชุมชน Tomcat ที่จะใช้งานได้ (ดูold.nabble.com/Java-EE-6-Web-Profile-td27715793.html ) แต่มีโปรไฟล์เว็บ GlassFish v3 จะมี Resin ...
Pascal Thivent

2
อัปเดต: ดูโครงการTomEE
gpilotino

-3

ฉันแนะนำให้คุณ Tomcat กับ Spring เนื่องจาก:

  1. สปริงสามารถสร้างถั่วสำรองสำหรับ JSP
  2. คุณจะใช้ Spring เพื่อคงวัตถุผ่าน JPA

เป็นทางเลือกที่ดีในการเลือก Tomcat เนื่องจากคุณไม่ต้องการการประมวลผลที่มีน้ำหนักมาก


1
"การประมวลผลรุ่นเฮฟวี่เวท"? คุณช่วยอธิบายได้ไหม? ฉันอยากรู้.
Pascal Thivent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.