2012-03-05 11 views
5

में मौजूदा तालिकाओं तक पहुंचने के लिए लिफ़ेरी के सेवा निर्माता का उपयोग करके मैं एक पोर्टल लिख रहा हूं जिसे एक अलग सेवा निर्माता पोर्टलेट द्वारा बनाए गए जीवनरेखा डेटाबेस में तालिकाओं के एक सेट से पढ़ने की आवश्यकता है।डेटाबेस

मैं सिर्फ service.xml डुप्लिकेट करने और सेवा के निर्माण और सभी मैं अपने मुसीबतों के लिए मिलता है की कोशिश की:

BeanLocator

सेट नहीं किया गया एक दूसरा portlet लेखन का एक सरल तरीका है जो इन मौजूदा तालिकाओं को प्राप्त कर सकता है और सेवा निर्माता को ऐसा करने के लिए कॉन्फ़िगर किया जा सकता है, जो पहले से मौजूद है उसे फिर से बनाने की कोशिश करने के बजाय?

मैं इसे मूल पोर्टल में जोड़ना नहीं चाहता हूं, यदि संभव हो तो इन तालिकाओं में जानकारी हो रही है कि कई अन्य पोर्टलों को एक परिनियोजन में बड़ी संख्या में पोर्टलों तक पहुंचने की आवश्यकता हो सकती है और रखरखाव में सिरदर्द ।

उत्तर

1

आप सेवा निर्माता की सामग्री को अपने आप के लिफ़ेरी हुक प्लगइन में डाल सकते हैं, कि अन्य पोर्टल पर निर्भर करता है (उर्फ प्लगइन को काम करने के लिए पोर्टलों के लिए तैनात करने की आवश्यकता है)।

आप एक हुक के बजाय एक एक्सटी प्लगइन का भी उपयोग कर सकते हैं जो आपकी कस्टम सेवा निर्माता सामग्री के साथ लिफ़ेरे का विस्तार करेगा।

+1

यह EXT प्लग इन का उपयोग करने के लिए करता है, तो आप संभवतः यह बच सकते हैं की सलाह नहीं दी है। इस मामले में ब्रांजीज़ी बताते हुए दूसरे पोर्टलेट के क्लासपाथ पर पहले पोर्टलेट से निर्मित {portletname} -portlet-service.jar होने से आसानी से बचने योग्य है। – Jonny

+2

आपके पास EXT प्लगइन्स के बारे में एक बिंदु है, क्योंकि उन्हें तैनाती/अनावश्यक/पुन: नियोजित करना बहुत मुश्किल है, और जब तक कोई अन्य Liferay प्लगइन प्रकार आपकी आवश्यकता के अनुरूप न हो, तब तक सबसे अच्छी तरह से बचें। – fimez

7

विभिन्न पोर्टलों में एक सेवा की एक ही सारणी तक पहुंचने के लिए, प्रत्येक में सेवाओं को फिर से न बनाएं। इसके बजाय, एक पोर्टलेट में सेवा बनाएं और docroot/WEB-INF/lib/<pluginmame>-portlet-service.jar को अन्य पोर्टलों की docroot/WEB-INF/lib/ निर्देशिका में कॉपी करें। आइए एक उदाहरण देखें।

आप निम्नलिखित है एक portlet person-portlet बुलाया में service.xml मान लीजिए:

<service-builder package-path="br.com.seatecnologia.stackoverflow.person"> 
    <author>brandizzi</author> 
    <namespace>StackOverflowPerson</namespace> 

    <entity name="Person" local-service="true" remote-service="false"> 
     <column name="personId" type="long" primary="true" /> 

     <column name="name" type="String" /> 
     <column name="age" type="int" /> 
    </entity> 
</service-builder> 

आप सेवाओं पैदा करते हैं और मूल portlet में इसका इस्तेमाल करते हैं, हमेशा की तरह। उदाहरण के लिए, आप एक JSP व्यक्ति पंजीकरण और व्यक्ति लिस्टिंग के लिए एक फार्म के साथ बना सकते हैं: अब,

<%@page import="br.com.seatecnologia.stackoverflow.person.service.PersonLocalServiceUtil"%> 
<%@page import="br.com.seatecnologia.stackoverflow.person.model.Person"%> 
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> 
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %> 

<portlet:actionURL name="addPerson" var="url" /> 

<aui:form action="<%= url %>" name="fm" method="POST"> 
<aui:fieldset> 
<aui:input name="name" /> 
<aui:input name="age" /> 
<aui:button type="submit" /> 
</aui:fieldset> 
</aui:form> 

<ul> 
    <% for (Person person : PersonLocalServiceUtil.getPersons(-1, -1)) { %> 
    <li><%= person.getName() %> : <%= person.getAge() %></li> 
    <% } %> 
</ul> 

यदि आप किसी अन्य portlet, नमस्ते विश्व के कुछ प्रकार है जो सभी पंजीकृत व्यक्तियों को एक शुभकामना संदेश प्रस्तुत करता है की जरूरत है लगता। आप एक नया पोर्टल प्लगइन बनाते हैं - जिसे हम कहते हैं, multiple-hello-portlet - और फिर निर्देशिका से multiple-hello-portlet/docroot/WEB-INF/lib पर फ़ाइल person-portlet-service.jar फ़ाइल कॉपी करें। यदि आपके पास उसी पोर्टल_ में तैनात पोर्टलेट दोनों हैं, तो आप में 10 में बनाए गए सेवाओं का भी उपयोग कर सकते हैं। उदाहरण के लिए, अपने multiple-hello-portlet निम्नलिखित JSP हो सकता है और सेवाओं reimplementing की कोई जरूरत नहीं है:

<%@page import="br.com.seatecnologia.stackoverflow.person.service.PersonLocalServiceUtil"%> 
<%@page import="br.com.seatecnologia.stackoverflow.person.model.Person"%> 
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> 

<% for (Person person : PersonLocalServiceUtil.getPersons(-1, -1)) { %> 
    <div class="portlet-msg-info"> 
     Hello, <%= person.getName() %>! 
     You are <%= person.getAge() %> years old. 
    </div> 
<% } %> 

मैं इन उदाहरणों के साथ दो runnable portlets बनाई गई है, कि तुम BitBucket में पा सकते हैं।

+0

मैंने वास्तव में सफलता के बिना यह कोशिश की थी, अंतर यह है कि मैं जेएसपी की बजाय जावा क्लास के तरीकों तक पहुंच रहा हूं। –

+0

@PaulGilfedder यदि यह जेएसपी या जावा पर था तो प्रभाव इस दृष्टिकोण के साथ समान होगा ताकि आपको कहीं और कोई समस्या हो। क्या आप एक आईडीई का उपयोग कर रहे हैं? यदि ऐसा है तो क्या यह कोई त्रुटि देता है? – Jonny

+0

@PaulGilfedder जो अजीब है। आप जिस लिफ़ेय का उपयोग कर रहे हैं उसका संस्करण क्या है? Liferay ईई कहां सीई? क्या इसमें कुछ एसपी है? – brandizzi

1

सेवा-निर्माता चलाने से, यह अन्य पोर्टलों से पहुंच के लिए एक जार-फ़ाइल उत्पन्न करता है।

डिफॉल्ट रूप से जेनरेट की गई सेवा एपी जार को पोर्टलेट युद्ध फ़ाइल के अंदर बंडल किया जाएगा। लेकिन यदि आप अन्य अनुप्रयोगों को अपनी सेवाओं तक पहुंचने के लिए चाहते हैं तो सेवा एपीआई जार फ़ाइल को सर्वर क्लासपाथ में होना चाहिए। आप वरीयता को बदलकर ऐसा कर सकते हैं जिसे "प्राथमिकताएं" बटन पर क्लिक करके एक्सेस किया जा सकता है।(चित्र: 6)

से: http://www.liferay.com/de/about-us/news/-/blogs/2506216/maximized