ณ วันนี้คุณจะใช้ JBoss หรือ Glassfish (หรืออื่น ๆ ) เป็นเซิร์ฟเวอร์ Java EE สำหรับโครงการใหม่หรือไม่? [ปิด]


136

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

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

คำตอบ:


181

ฉันใช้ WebLogic, WebSphere, JBoss, GlassFish, Resin, Jetty, Tomcat และอีกไม่กี่สิบปีที่ผ่านมา ดังนั้นถ้าฉันกำลังพิจารณาโครงการใหม่ฉันจะถามตัวเองคำถามสองสามข้อก่อน สิ่งหนึ่งที่ฉันจะไม่ถามอีกต่อไปคือฉันจะแบนปฏิเสธที่จะใช้ JSP ยกเว้นว่าฉันถูกทรมานจนกว่าฉันจะร้องไห้เพื่อแม่ของฉัน

ฉันจะต้องเข้ากันได้ / ปรับใช้กับผลิตภัณฑ์เฉพาะเพราะได้รับคำสั่งจากใครบางคน? ไม่มีวิธีเพิกเฉยหรือโน้มน้าวพวกเขาเป็นอย่างอื่นหรือไม่? ถ้ามีคำตอบของคุณคือ

ฉันต้องใช้ EJB หรือไม่ จริงๆ? หลีกเลี่ยงหากเป็นไปได้ - เป็นสิ่งจำเป็นสำหรับระบบขนาดใหญ่ระดับองค์กรเท่านั้น โปรดจำไว้ว่าพวกเขาเป็นเพียงเครื่องมือและที่ยิ่งใหญ่ในที่นั้น (ใครสามารถพูดว่า "Golden Sledgehammer"?) พวกมันมีการใช้มากเกินไปดังนั้นจริง ๆ จริง ๆ ถามว่าคุณต้องการ หากคุณต้องการพวกเขานั่นจะลบตัวเลือกหลายตัวรวมถึง Jetty ที่ฉันโปรดปราน

คุณต้องใช้เทคโนโลยี J2EE ที่สำคัญอื่น ๆ เช่น JMS, ESB และอื่น ๆ หรือไม่? ถ้าเป็นเช่นนั้นและคุณทำไม่ได้จริงๆคุณจะถูก จำกัด ให้คอนเทนเนอร์ J2EE เต็มรูปแบบอีกครั้ง คิดอย่างรอบคอบและตรวจสอบก่อนที่คุณจะยอมรับกับ BPM และหลีกเลี่ยง AquaLogic BPM ที่ (เกือบ) ค่าใช้จ่ายทั้งหมด - มันน่าเกลียดในที่สุด

หากคุณต้องใช้คอนเทนเนอร์ J2EE แบบเต็มรูปแบบให้พิจารณาโอเพนซอร์สก่อนเนื่องจากมีความทนทานสนับสนุนและดีกว่าและคุ้มค่ากว่า พวกเขามีฐานลูกค้าที่ใหญ่ขึ้นและมีการสนับสนุนที่เปิดกว้างมากขึ้นดังนั้นพวกเขาจึงมีแนวโน้มที่จะได้รับการแก้ไขที่ดีขึ้นเร็วขึ้น อย่างไรก็ตามเรซิ่นยังไม่บรรลุนิติภาวะและฉันจะหลีกเลี่ยงมันเมื่อเทียบกับ GlassFish หรือ JBoss - ฉันพบว่ามีปัญหาในการปรับใช้และสนับสนุน ฉันต้องการ JBoss เพราะฐานลูกค้าที่กว้างขึ้นวุฒิภาวะและอื่น ๆ GlassFish ยากที่จะรวมเข้ากับกระบวนการสร้าง / ปรับใช้แบบอัตโนมัติ แต่อาจจะดีกว่าสำหรับคุณสมบัติเฉพาะบางอย่างของมัน (ถ้าคุณต้องการ)

ฉันมีเหตุผลพิเศษที่ต้องการ Apache หรือไม่ จากนั้นเอนตัวเข้าหา Tomcat อาจบวกบางสิ่ง

ฉันสามารถทำอะไรกับ servlets ได้ไหม จากนั้นฉันจะใช้ท่าเทียบเรือ - มันเป็นทางออกที่เบาที่สุดเร็วที่สุดง่ายที่สุดและยืดหยุ่นที่สุด หากฉันพิงกับความสามารถในการใช้ท่าเทียบเรือฉันจะถามคำถามทั้งหมดของฉันว่าทำไม ใช้ YAGNI

ดีที่สุดคือการใช้ StringTemplate / WebStringTemplate บน Jetty: โซลูชั่นที่สะอาดแข็งแกร่งและรวดเร็วและบำรุงรักษาได้โดยไม่เสียค่าธรรมเนียมใบอนุญาตชื่อเสียงและการสนับสนุนที่แข็งแกร่ง ฯลฯ นั่นคือสิ่งที่ฉันเริ่มต้นในปัจจุบัน

แอปพลิเคชัน / ระบบส่วนใหญ่เลือกคุณสมบัติ J2EE แฟนซีมากมายเมื่อสิ่งที่พวกเขาต้องการคือ servlets และ JDBC ด้วยสถาปัตยกรรม / การออกแบบที่เหมาะสม คำถามที่ว่าทำไมคุณคิดว่าคุณต้องการมากกว่านี้

ของคอนเทนเนอร์เต็มเป่าฉันจะหลีกเลี่ยง WebLogic และ WebSphere เว้นแต่คุณจะสนับสนุนเว็บไซต์สาธารณะ MAJOR (เว็บไซต์ของนายจ้างปัจจุบันของฉันถูกปรับใช้บน WebLogic และได้รับ 11 + ล้านครั้งต่อเดือนอื่น ๆ มีการเปรียบเทียบ) การอ้างสิทธิ์เพื่อชื่อเสียงที่แท้จริงของ WebLogic คือการจัดกลุ่มที่ค่อนข้างง่าย แต่หลีกเลี่ยงคุณสมบัติการล็อคอินของผู้จำหน่ายที่ค่าใช้จ่ายเกือบทั้งหมด WebSphere เป็นฝันร้ายที่ฉันจะหลีกเลี่ยงค่าใช้จ่ายอย่างแท้จริง - ฉันปฏิเสธที่จะทำโครงการที่เกี่ยวข้องกับ WebSphere หลังจากทำสองสามครั้งในอดีต ผลิตภัณฑ์ทั้งสองไม่มีมูลค่าค่าธรรมเนียมใบอนุญาตจำนวนมากเว้นแต่คุณจะมีความต้องการพิเศษที่ผลักดันให้ใช้คุณลักษณะที่เป็นกรรมสิทธิ์ ในทศวรรษที่ผ่านมาในฐานะสถาปนิก / วิศวกรอาวุโสของ บริษัท Fortune 500 ฉันยังไม่ได้เห็นความต้องการดังกล่าว ในทางกลับกัน,

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

แก้ไข: อีกชิ้นที่ควรพิจารณา ...

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


7
สำหรับการอ้างอิงในอนาคตคุณมักจะพบคำจำกัดความของคำย่อผ่านการค้นหาของ Google หรือ Wikipedia YAGNI = คุณไม่ต้องการมัน = ไม่หักโหมการออกแบบของคุณ JMS = บริการส่งข้อความ Java ESB = บริการรถบัสขององค์กร BPM = การจัดการกระบวนการทางธุรกิจ
Rob Williams

21
ความคิดเห็นของคุณเกี่ยวกับ Java EE และ EJB นั้นล้าสมัยไปเล็กน้อย J2EE ?! นั่นเหมือนเมื่อ 5 ปีก่อน ดู Java EE 6 และปรับมุมมองของคุณให้ทันสมัย!
Brian Leathem

6
@Brian: ฉันเห็นด้วยกับ Brian โดยเฉพาะกับ EJBLite มันมีน้ำหนักที่เบากว่ามาก
Thang Pham

7
@ Brian ดูที่โพสต์ - มันถูกเขียนขึ้นเมื่อสามปีก่อนความคิดเห็นของคุณ และฉันก็ยังบอกว่าสปริงนั้นเบากว่าแม้แต่ Java EE ที่เพรียวบางลง
duffymo

2
คำตัดสินของศาลในปี 2555 คืออะไร? JBoss 7 AS กลายเป็นราชาเหนือ Glassfish ในอาณาจักร Java 6 EE หรือไม่? หรือวิธีอื่น ๆ
Rolando

10

คำว่า "แอพพลิเคชันเซิร์ฟเวอร์" นั้นคลุมเครือ ด้วย GlassFish v3 คุณสามารถเริ่มต้นเล็ก ๆ ด้วยพูดเว็บคอนเทนเนอร์แบบดั้งเดิมและพัฒนา (ใช้ OSGi และฟังก์ชั่น "เพิ่มคอนเทนเนอร์" อย่างง่าย) เพื่อเพิ่มสิ่งที่คุณต้องการ: JPA, JAX-RS, EJB's, JTA, JMS, ESB เป็นต้น ... มันเป็นผลิตภัณฑ์เดียวกันอินเทอร์เฟซผู้ดูแลระบบเดียวกัน ฯลฯ มีคุณสมบัติเป็นแอพพลิเคชันเซิร์ฟเวอร์ให้คุณหรือไม่ อเล็กซิส (ซัน)


1
น่าเสียดายที่ Glassfish ไม่ใช่ผลิตภัณฑ์อย่างเป็นทางการอีกต่อไป แต่เป็นการ "นำไปใช้" อ้างอิงเท่านั้น
Thorbjørn Ravn Andersen

9

คำถามแรกที่ฉันมักถามตัวเองคือ "ฉันสามารถทำสิ่งนี้กับ Tomcat ได้หรือไม่" หากคำตอบคือไม่เพราะฉันต้องการ JMS หรือ JTA จากนั้นฉันหันไปใช้เซิร์ฟเวอร์แอปพลิเคชัน

ฉันใช้ WebLogic 8 ประมาณ 3 ปีที่แล้วมีความสุขกับการใช้งานที่ง่ายของ WebLogic และรูปแบบสิทธิการใช้งาน / ค่าใช้จ่าย เราใช้มันสำหรับโครงการสองโครงการหนึ่งคือบริการเว็บและอีกโครงการหนึ่งคือพอร์ทัล เราไม่พบปัญหาใด ๆ กับ WebLogic หรือ WebLogic Portal ในโครงการใดโครงการหนึ่ง

ในช่วงสองปีที่ผ่านมาฉันทำงานกับ WebSphere เมื่อใดก็ตามที่ฉันเจรจากับ IBM มันจะสิ้นสุดลงด้วยการคิดต้นทุนสองเท่าของ WebLogic ที่เทียบเท่า แต่นโยบายขององค์กรที่สั่งให้ WebSphere ต้องใช้ ฉันพบว่าเส้นโค้งการเรียนรู้บน WebSphere นั้นค่อนข้างชันกว่า WebLogic และวงจรชีวิตการสร้าง / ปรับใช้ / ทดสอบของเรานั้นใช้เวลานานมากจนเราต้องใช้ Tomcat ในสภาพแวดล้อมการพัฒนา แต่ปัญหาที่ใหญ่ที่สุดที่ฉันมีกับ WebSphere คือเมื่อเราพบข้อผิดพลาดที่บังคับให้เราอัพเกรดเป็นรุ่นแพตช์ต่อไปเท่านั้นที่จะพบปัญหาใหม่ในการแยกวิเคราะห์ web.xml ใช้เวลา 48 ชั่วโมงในการทำงานทั้งหมด

ในขณะนี้แม้ว่าฉันกำลังใช้ JBoss ประมาณ 3 เดือนที่แล้วฉันกำลังจะเริ่มโครงการใหม่กับ Tomcat และ Jetspeed 2 แต่ฉันสังเกตเห็นว่า Jetspeed 2 ดูเหมือนจะค่อนข้างนิ่งในขณะนี้และ JBoss Portal 2.7.0 เพิ่งเปิดตัวพร้อมการสนับสนุน JSR 286 / Portlet 2.0 ฉันหมุน JBoss และพบว่าง่ายต่อการติดตั้งและจัดการ วัฏจักรการสร้าง / ปรับใช้ / ทดสอบนั้นรวดเร็วมากและฉันไม่ค่อยต้องรีสตาร์ทเซิร์ฟเวอร์เว้นแต่ฉันจะเปลี่ยนไฟล์ Spring XML ไว้ที่อื่น


คำตอบที่ดี! คุณเคยลองท่าเทียบเรือหรือไม่? และคุณมีความเห็นอย่างไรในกรณีที่คุณมี?

7

ฉันใช้ jBoss มา 3-4 ปีแล้ว

อาร์กิวเมนต์สำหรับ jBoss:

  1. โอเพ่นซอร์ส.
  2. มีบริการสนับสนุนทางการค้า
  3. ชุมชนผู้ใช้ขนาดใหญ่ที่ใช้งานอยู่

การโต้แย้งกับ jBoss:

  1. ไม่มีรีลีสคอนเทนเนอร์ Java EE 5 ที่รองรับการเข้าถึงทั่วไป
  2. เอกสารจำนวนมาก แต่ verbose; อาจหาคำตอบของ "ฉันจะทำ x ได้อย่างไร"
  3. เครื่องมือการจัดการสำหรับ 4.x แย่เมื่อเปรียบเทียบกับข้อเสนอเชิงพาณิชย์อื่น ๆ

"ไม่มีการเปิดตัวคอนเทนเนอร์ JEE 5 ทั่วไปที่รองรับการเข้าถึง" ฉันเดาว่ามันไม่ถูกต้องใช่ไหม
Raedwald

@ Raedwald: ใช่ตอนนี้ JEE 6 ได้รับรอบสำหรับบางเวลา ;-)
ymajoros

4

ชำระเงิน GlassFish 3.1! สร้างขึ้นบนส่วนของเคอร์เนลที่ใช้ Java EE 6 เคอร์เนล GlassFish v3 เวอร์ชัน 3.1 มอบการรวมกลุ่มการจัดการจากส่วนกลางและความพร้อมใช้งานสูง

อ้างถึงhttp://blogs.oracle.com/nazrul/entry/glassfish_3_1สำหรับรายละเอียดเพิ่มเติม


3

จุดที่ไม่ได้กล่าวถึงที่นี่ก็คือประสิทธิภาพ หากนี่เป็นปัญหาเนื่องจากประเภทของบริการหรือเนื่องจากจำนวนผู้ใช้งานสิ่งต่อไปนี้จะมีผลบังคับใช้:

  • Tomcat ดูเหมือนจะช้ากว่า Glassfish
  • Glassfish ดูเหมือนว่าจะช้ากว่าเรซิ่น
  • เรซินช้ากว่า G-WAN + Java มาก

โปรดทราบว่า G-WAN ขึ้นอยู่กับ JVM เพียงอย่างเดียว: มันไม่ได้ใช้คอนเทนเนอร์เพิ่มเติมใด ๆ (เว้นแต่จะระบุไว้อย่างชัดเจน) ดังนั้นคุณอาจสงวนไว้ในส่วนที่มีความสำคัญต่อประสิทธิภาพของเว็บแอปพลิเคชันของคุณ

เนื่องจาก G-WAN รองรับภาษาอื่น (C, C ++, C #, D, Objective-C) คุณอาจประมวลผลบางส่วนของแอปพลิเคชั่นใน raw C ขณะที่รักษา Java ไว้สำหรับงานอื่น ๆ


2

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

จากมุมมองทางเทคนิคฉันจะเลือก GlassFish เพราะมีการสนับสนุนนวัตกรรมล่าสุด ฉันไม่คิดว่า JBoss ไม่ดีอยู่ดีมันก็ไม่ได้ทันสมัย

ประสบการณ์ส่วนใหญ่ของฉันอยู่ใน WebLogic แต่ฉันใช้ JBoss และ GlassFish ฉันเพิ่งเปิดตัวไซต์ใหม่บนซันโอเพ่นซอร์สสแต็ค (OpenSolaris, GlassFish, MySQL) และเป็นประสบการณ์ที่ยอดเยี่ยมกับความผิดหวังเล็กน้อยเท่านั้น


ระบบปฏิบัติการไม่ได้เป็นปัญหาจริงๆเว้นแต่คุณจะมีการอ้างอิงไบนารีที่เฉพาะเจาะจงมาก (ซึ่งไม่ควรเป็นกรณีสำหรับโครงการ java ส่วนใหญ่) เราพัฒนาบน windows, 32 และ 64 บิตและปรับใช้บน Glassfish บน Solaris นักพัฒนาส่วนใหญ่ไม่รู้จริงๆและไม่ต้องสนใจ ผู้ใช้ไม่เห็น (การพัฒนาส่วนใหญ่เป็นเว็บแอปพลิเคชัน)
ymajoros

2

ฉันยังคิดว่า WebLogic เป็นเซิร์ฟเวอร์แอป Java EE ที่ดีที่สุดในตลาด ฉันคิดว่ามันคุ้มค่าถ้าคุณสามารถจ่ายค่าธรรมเนียมใบอนุญาตเหล่านั้นได้

ฉันประหลาดใจที่เห็นว่าคุณสามารถไปได้ไกลเพียงใดโดยการรวม Tomcat, OpenEJB และ ActiveMQ นั่นดูเหมือนว่าฉันจะเป็นทางเลือกต้นทุนต่ำ

ฉันจะดูใน Spring dm Server ด้วย มันขึ้นอยู่กับ Tomcat แต่ฉันคิดว่าชิ้นส่วน OSGi ที่พวกเขาเพิ่มเข้าไปนั้นอาจเป็นได้ทุกที่ในระยะสั้น หากทำด้วยคุณภาพเดียวกันกับกรอบ Spring มันจะดีมากแน่นอน


2
ปัญหาที่ฉันมีกับ WebLogic คือล็อคผู้ขายนั่นเป็นยาที่น่ารังเกียจที่จะกลืนเมื่อคุณไม่ต้องการ!
Manius

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

3
WebLogic เป็นแบบเชิงพาณิชย์เท่านั้น - นั่นคือสิ่งที่ฉันได้รับ - เมื่อคุณเขียนเช็คขนาดใหญ่คุณจะ "ล็อค" ในระดับที่ใหญ่กว่าคุณด้วยทางเลือกโอเพนซอร์ส เห็นได้ชัดว่าถ้าคุณให้ความสำคัญกับความเป็นอิสระของแพลตฟอร์มคุณจะไม่ใช้คุณสมบัติเฉพาะของผู้ขายดังนั้นนั่นไม่ใช่สิ่งที่ฉันพูดถึง จริงๆแล้วการสำรวจที่ฉันอ่านครั้งหนึ่งเคยพูดว่าผู้พัฒนาเชื่อว่าการปิดกั้นผู้ขายในการหลีกเลี่ยงเป็นข้อได้เปรียบอันดับ 1 ของโอเพ่นซอร์ส (ไม่ใช่ราคา)
Manius

เรื่องไร้สาระสมบูรณ์หรือไม่ คุณเชื่อหรือไม่ว่าการเซ็นสัญญาหลายล้านดอลลาร์กับผู้ขายไม่ได้ล็อคคุณไว้? มีหลักฐานของคุณ
duffymo

@ymajoros คุณหมายถึง "ไม่ควร" มีการล็อคอินของผู้ขายหรือไม่ พูดตามตรงฉันไม่เข้าใจความคิดเห็นของคุณ
Patrick M

1

อีกทางเลือกหนึ่ง: ไม่ต้องใช้ appserver เลย

เช็คเอาท์ http://www.atomikos.com/Publications/J2eeWithoutApplicationServer

สำหรับโปรเจ็กต์เว็บให้เก็บเว็บคอนเทนเนอร์ขนาดเล็กถ้าคุณต้องการรวมกับบางอย่างเช่น Wicket เพื่อหลีกเลี่ยงความซับซ้อนของ JSP / JSF หรือ struts

HTH Guy


หากคุณไม่ต้องการเรียนรู้การใช้เครื่องมืออย่าใช้งานใด ๆ หรือพยายามเป็นมืออาชีพที่มีทักษะและลงทุนในสภาพแวดล้อมของคุณคุณจะได้รับรางวัล ต้องยอมรับว่าฉันทำอย่างนั้นสำหรับบางโครงการ โปรเจ็กต์เดียวกันนี้ไม่มีการพัฒนาแอปเซิร์ฟเวอร์ที่กำหนดเองให้กับไคลเอนต์ - เซิร์ฟเวอร์ในฤดูใบไม้ผลิเพื่อพัฒนา Java EE และ Glassfish ไม่ต้องการกลับไปแก้ปัญหาแรกจริงซับซ้อนเกินไปมันง่ายเหมือนวันนี้ (และมาตรฐานจะปรับใช้บนเซิร์ฟเวอร์แอป Java EE ใด ๆ โดยไม่มีการเปลี่ยนแปลงมาก)
ymajoros

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