2009-07-08 18 views
9

विकसित करते समय जे 2 ईई और सी #/नेट के बीच प्रमुख मतभेद मुख्य रूप से हाल ही में एक नया काम शुरू करने तक एक .NET लड़का होने के बाद; मैंने केवल सी #/नेट में वेब-सेवा विकास और खपत की है। हालांकि मैं जे 2 ईई मंच पर इसे करने के लिए इंस और आउट सीखने की यात्रा शुरू कर रहा हूं, और मुझे उत्सुकता है कि इस विशिष्ट प्रकार के विकास में प्रमुख अंतर क्या हैं।वेब सेवा

नोट: मुझे कंसोल/सरल इंटरफ़ेस स्तर पर जावा भाषा से परिचितता है, लेकिन इसका उपयोग करके "एक कार्यात्मक वेब सेवा आर्किटेक्चर को एक साथ कैसे रखा जाए" के साथ अधिक अनुभव नहीं है।

अद्यतन: महान जवाब अब तक, मैं सिर्फ हालांकि जोड़ने के लिए इतना आसान वेब सेवा वर्ग संरचना में वे भी कई मतभेद प्रदर्शित करने के लिए नहीं लग रहे थे; लेकिन डीबी तर्क के साथ इसे सभी को एक साथ रखने और वास्तव में इसे होस्ट करने के परिप्रेक्ष्य से कैसे - सेवा चल रही है और काम कर रही है/इसके साथ कैसे बातचीत की गई है।

उत्तर

9

जबकि माइक्रोसॉफ्ट टेक्नोलॉजी का उपयोग कर .NET में वेब सेवाओं को करने का एकमात्र तरीका है, जावा वेब सर्विसेज बहुत खंडित हैं। उदाहरण के लिए this प्रश्न देखें। अधिकांश ढांचे दोनों अनुबंध-पहले (डब्लूएसडीएल फ़ाइल से शुरू) और कोड-प्रथम (स्रोत कोड से शुरू) वेब सेवाओं दोनों कर सकते हैं। प्रत्येक ढांचे में वेब सेवा की मेजबानी करने का भी तरीका है। उदाहरण के लिए एक्सिस 2 ढांचा एक्सिस 2 वेब अनुप्रयोग के अंदर वेब सेवाओं को एएआर फाइलों के रूप में तैनात करता है। अन्य ढांचे एक वेब फ़ाइल के अंदर वेब सेवाओं को तैनात करते हैं (एक्सिस 2 भी कर सकते हैं)।

.NET से जावा में आने वाले लोगों के लिए वेब सेवा ढांचे को चुनना हमेशा एक समस्या है। आईडीई एकीकरण भी इतना अच्छा नहीं है क्योंकि यह विजुअल स्टूडियो के साथ है।

यदि आप जे 2 ईई में नए हैं, तो मैं स्प्रिंग फ्रेमवर्क पर एक नज़र डालने की सलाह देता हूं। Spring में एक उप-प्रोजेक्ट (स्प्रिंग-डब्ल्यूएस) है जो आपको अनुबंध-प्रथम वेब सेवाओं को बनाने की अनुमति देता है। डीबी और अनुप्रयोग तर्क के साथ एकीकरण स्प्रिंग जैसे निर्भरता इंजेक्शन ढांचे के साथ बहुत आसान है। Apache CXF स्प्रिंग के साथ अच्छी तरह से एकीकृत करता है।

+0

कुछ बहुत अच्छे अंक हैं - मैं अब इसका उत्तर देने से परेशान नहीं होगा! अच्छी सलाह। – serg10

+0

मैंने कभी वसंत की कोशिश नहीं की। क्या ईजेबी 3 के तर्क के लिए वसंत का उपयोग करना आसान है? –

+0

ज्यादातर लोग कहेंगे कि वसंत ईजेबी 3 से बेहतर है। यह भी अधिक बहुमुखी है, क्योंकि इसे जेईई मानक को पूरी तरह लागू करने वाले अनुप्रयोग सर्वर की आवश्यकता नहीं है। ईजेबी 3 या तो बुरा नहीं है, लेकिन मैं वसंत में अपना समय निवेश करने की सलाह देता हूं। – kgiannakakis

4

मैंने कभी भी वेब सेवाओं से पहले कभी कोशिश नहीं की लेकिन हाल ही में। और मैं आश्चर्यचकित था कि यह जावा में जेएक्स-डब्ल्यूएस के साथ कितना आसान है।

यहाँ एक वेब सेवा

@WebService 
class BusinessProcess implements IBusinessProcess 
{ 
    public HelloWorldObject helloWorld() 
    { 
     return new HelloWorldObject("Earth"); 
    } 
} 

है और बस हो गया।
यदि आपको अतिरिक्त तर्क और डीबी इकाइयों जैसे स्तर की आवश्यकता है तो इसे आसान के रूप में जोड़ा जा सकता है क्योंकि मैं केवल ईजेबी 3 के साथ कल्पना कर सकता हूं।

जहां तक ​​मैंने वेब सेवा को परिभाषित करने के सी # तरीके को देखा है, वहां कोई बड़ा अंतर नहीं है।

[WebService(...)] 
    public class BusinessProcess : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public HelloWorldObject helloWorld() 
     { 
      return new HelloWorldObject("Earth"); 
     } 
    } 

मेरा मानना ​​है कि वहाँ हालांकि आगे तर्क में एक फर्क है।

3

मैं सुझाव देता हूं कि Apache CXF एक स्पिन के लिए फ्रेमवर्क लें। मैंने इसे यहां एक प्रमुख परियोजना के लिए चुना है और यह बहुत अच्छा काम करता है! यह आपको ईजेबी 3 पर क्या फायदे देता है? हमम ... मैं यह नहीं कह सकता कि मैंने सीएक्सएफ का उपयोग किया है, जबकि ईजेबी 3 मेरी रसोई में कभी नहीं रहा है (अस्पष्ट चीयर्स संदर्भ)।

सीएक्सएफ के साथ कोड यहां और वहां दो एनोटेशन से कहीं ज्यादा नहीं है। यह marshalling वस्तुओं के लिए मानक जेएक्सबी एनोटेशन का उपयोग करता है। विन्यास के माध्यम से यह भी संभव है इससे पहले कि इंटरसेप्टर जगह और आदि वेब सेवाओं के बाद कॉल करता है, तो आप प्रवेश करना चाहते हैं,

@WebService 
public interface UserService { 
    public Collection<User> getUsers(@WebParam(name = "systemID") Long sysID); 
} 

ध्यान दें कि @WebParam एनोटेशन वैकल्पिक है, लेकिन ऐसा लगता है जैसे सामान से डबल्यूएसडीएल में अच्छे लग रहा है arg0। हाँ, वहाँ उस के साथ साथ जाने के लिए एक्सएमएल विन्यास का एक छोटा सा हो सकता है:

<!-- the #userService is a reference to a Spring bean defined elsewhere --> 
<jaxws:endpoint id="userWS" implementor="#userService" 
    implementorClass="com.blah.blah.blah.UserServiceImpl" 
    address="/UserService" /> 

जहां तक ​​वेब सेवाओं लेने वाली ... पढ़ना CXF उपयोगकर्ता गाइड आपको लगता है कि कैसे किया जाता है के लिए एक स्वाद दे देंगे के रूप में: http://cwiki.apache.org/CXF20DOC/developing-a-consumer.html