2011-06-08 17 views
5

मैं अपनी खुद की इकाई और जीवनभर समूह इकाई के बीच many-to-many बनाने की कोशिश कर रहा हूं। मेरे service.xml तरह लग रहा है इसLiferays सेवा बिल्डर - कई से कई रिश्तों

<entity name="EntityA" local-service="true" remote-service="false"> 

    <column name="entityAId" type="long" primary="true" /> 

    <column name="title" type="String" /> 
    <column name="summary" type="String" /> 
    <column name="authorId" type="long" /> 

    <column name="attachments" type="Collection" entity="EntityAAttachment" mapping-key="entityAId" /> 
    <column name="groups" type="Collection" entity="com.liferay.portal.Group" mapping-table="EntityAs_Groups" /> 

</entity> 

DTD के अनुसार service.xml के इस एक कई-से-अनेक संबंध उत्पन्न करनी चाहिए, लेकिन मैं केवल इस

Method public java.util.List com.liferay.portal.tools.servicebuilder.ServiceBuilder.getMappingEntities(java.lang.String) throws java.io.IOException threw an exception when invoked on [email protected] 
The problematic instruction: 
---------- 
==> list serviceBuilder.getMappingEntities(column.mappingTable) as mapColumn [on line 201, column 49 in com/liferay/portal/tools/servicebuilder/dependencies/model_impl.ftl] 
---------- 
Java backtrace for programmers: 
---------- 
freemarker.template.TemplateModelException: Method public java.util.List com.liferay.portal.tools.servicebuilder.ServiceBuilder.getMappingEntities(java.lang.String) throws java.io.IOException threw an exception when invoked on [email protected] 
    at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130) 
    at freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:93) 
    at freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 
    at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.MixedContent.accept(MixedContent.java:92) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.Environment.visit(Environment.java:299) 
    at freemarker.core.CompressedBlock.accept(CompressedBlock.java:73) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.MixedContent.accept(MixedContent.java:92) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.IfBlock.accept(IfBlock.java:82) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.MixedContent.accept(MixedContent.java:92) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179) 
    at freemarker.core.Environment.visit(Environment.java:417) 
    at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.MixedContent.accept(MixedContent.java:92) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.Environment.process(Environment.java:190) 
    at freemarker.template.Template.process(Template.java:237) 
    at com.liferay.portal.freemarker.FreeMarkerUtil.process(FreeMarkerUtil.java:49) 
    at com.liferay.portal.freemarker.FreeMarkerUtil.process(FreeMarkerUtil.java:39) 
    at com.liferay.portal.tools.servicebuilder.ServiceBuilder._processTemplate(ServiceBuilder.java:4447) 
    at com.liferay.portal.tools.servicebuilder.ServiceBuilder._createModelImpl(ServiceBuilder.java:2420) 
    at com.liferay.portal.tools.servicebuilder.ServiceBuilder.<init>(ServiceBuilder.java:1023) 
    at com.liferay.portal.tools.servicebuilder.ServiceBuilder.<init>(ServiceBuilder.java:404) 
    at com.liferay.portal.tools.servicebuilder.ServiceBuilder.main(ServiceBuilder.java:176) 
Caused by: java.lang.NullPointerException 
    at com.liferay.portal.tools.servicebuilder.ServiceBuilder.getMappingEntities(ServiceBuilder.java:1366) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:840) 
    at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106) 
    ... 32 more 

मैं क्या कर रहा हूँ मिल यहाँ गलत है? मैं नवीनतम Liferay stable 6.0.5

+0

में मदद करता है मैं इस के लिए एक समाधान नहीं मिल रहा है। ऐसा लगता है कि यह सेवा निर्माता द्वारा समर्थित नहीं है। – onigunn

+0

मुझे एक ही समस्या है जो मेरी अपनी इकाई और जीवनभर संगठन इकाई के समान कुछ करने की कोशिश कर रही है। अविश्वसनीय रूप से, अगर मैं मानचित्रण तालिका "Foo_Organization" (सीधे मदद से कॉपी कर रहा हूं) नाम देता हूं, तो वह उस बिंदु को पास करता है। मुझे अंततः MyEntityModelImpl.java में एक संकलन त्रुटि मिलती है। – jalopaba

+0

क्या किसी को कोई समाधान मिला है? – aeracode

उत्तर

-1

Lferay समूह इकाई, सेवा और कार्यान्वयन, पोर्टल-impl.jar रूट/वेब-INF/lib किया जा रहा है, जिसमें कर रहे हैं, इसलिए यदि आप उस संस्था उनके क्रियान्वयन और सेवा से बाहर हैं उपयोग करने के लिए कोशिश कर रहे हैं दायरा, तो आपके पास दो विकल्प हैं, या तो आप पोर्टल-इंप को अपने रनटाइम के वैश्विक क्लासपाथ में ले जाते हैं (जो एक खराब विकल्प है क्योंकि आपको अन्य सभी libs को भी स्थानांतरित करना होगा) या आप पोर्टल-इंपोर्ट को अपने पोर्टलेट क्लास पथ पर ले जाते हैं (जो भी एक बुरी पसंद है) .. सबसे अच्छा समाधान hook का उपयोग करना है, इसलिए पोर्टल-इम्प्लेबल पहुंच योग्य होगा .. फिर lib को ले जाएं कि सेवा-निर्माता आपके सर्वर टोमकैट/lib/ext के वैश्विक वर्ग पथ से उत्पन्न होता है यह आपके portlet.it के दायरे में होगा मेरे लिए ठीक काम करता है। अपने इकाई enclosing से पहले कोई संदर्भ जोड़ें

<reference package-path="com.liferay.portal" entity="Group" /> 
  1. हुक को तैनात
  2. यह आवश्यक तालिकाओं
  3. रोक बिल्ला
  4. उत्पन्न होगा वैश्विक classpath को lib ले जाएँ
  5. पुनः आरंभ बिलाव
0

यह एक अनजान है एल बफर में डी बग: https://issues.liferay.com/browse/LPS-49769

आपकी संस्थाओं के लेक्सिकोोग्राफ़िक क्रम को बदलना इस समस्या को हल कर सकता है लेकिन गलत जेनरेट किए गए स्रोत कोड में हल हो सकता है। https://www.liferay.com/community/forums/-/message_boards/message/41347203 पर माइक Lenox द्वारा

संभावित वैकल्पिक हल:

संभावित वैकल्पिक हल: मैं कई-से-अनेक मैपिंग कि हमेशा ठीक काम का एक समूह के साथ एक बड़ा मॉडल है। एक नया मैपिंग जोड़ते समय मैंने अंततः को इस बग में ठोकर दिया। मैंने अंत में देखा कि मेरे रिश्तों के कुछ ने बग ट्रिगर किया होगा, लेकिन नहीं था (लेक्सिग्राफिक ऑर्डर से अधिक था)। सबसे पहले मैं का पता नहीं लगा सका, पुराने लोग क्यों काम करते थे, लेकिन नए विफल हुए। यह पता चला है कि यदि आपके पास लक्षित इकाई में कई से अधिक पीछे हैं, तो बिल्डर ठीक काम करता है।

उदाहरण के लिए, फू में fooBarList के अनुरूप करने के लिए FooBar करने के लिए एक fooList विशेषता जोड़ने, दोनों एक ही मानचित्रण-तालिका का उपयोग कर ..

मुझे लगता है कि यह केवल 2 कस्टम संस्थाओं के लिए काम करेगा जब तक कि आप को संशोधित एलआर।

एक और वैकल्पिक हल एक इकाई के रूप मानचित्रण अपने आप को परिभाषित करने के लिए, के रूप में http://blog.d-vel.com/home/-/blogs/service-builder-e-relazioni-many-to-many ने सुझाव दिया (इतालवी में) है:

<entity name="Autore_Libro" local-service="true"> 
<column name="autoreId" type="long" primary="true" /> 
<column name="libroId" type="long" primary="true" /> 
</entity> 
0

मैं बहुत यकीन है कि आप एक-से-कई और न ही many- नहीं कर सकता हूं आपकी संस्थाओं और पोर्टल इकाइयों के बीच कई रिश्ते। कम से कम सीधे सेवा निर्माता का उपयोग नहीं कर रहा है। ध्यान रखें कि आपका पोर्टल और पोर्टल अलग संदर्भ हैं।

और जैसा कि अन्य उत्तर में बताया गया है, नहीं। पोर्टल-impl.jar के साथ कभी गड़बड़ नहीं है। यह बहुत निराश है।

मैं इस संबंध को EntityAServiceImpl और EntityALocalServiceImpl कक्षाओं में आवश्यक विधियों को लागू करने के लिए अनुकरण करने का सुझाव दूंगा। मुझे लगता है कि यह जाने का सबसे साफ तरीका होगा।

इस पर एक नज़र डालें ..

https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/writing-local-service-classes

आशा है कि

संबंधित मुद्दे