2013-02-27 13 views
9

मैं निम्नलिखित वातावरण में एक उद्यम वेब अनुप्रयोग बनाने के लिए कोशिश कर रहा हूँ।में दूरस्थ EJB परिणामों के माध्यम से एक इकाई रिटर्निंग। <init>

  • NetBeans 7.2.1
  • Glassfish सर्वर 3.1.2
  • EJB 3.1
  • जेपीए 2.0
  • JSF 2.1
  • JDK 1.7
  • Oracle 10g (सर्वलेट 3.0 एपीआई से युक्त)

मैंने एक क्लास बनाया है रिमोट (javax.ejb.Remote) इंटरफ़ेस (ओं) को एक स्टेटलेस सत्र बीन द्वारा कार्यान्वित करने के लिए लाइब्रेरी (नई परियोजना -> जावा -> जावा क्लास लाइब्रेरी) को स्थानांतरित करने के लिए। कक्षा पुस्तकालय दोनों मॉड्यूल (ईजेबी और डब्ल्यूएआर) के वर्ग पथ में जोड़ा गया है।

मैंने रिमोट इंटरफेस और कक्षा पुस्तकालय में सभी इकाई वर्गों को रखा है (मुझे नहीं पता कि यह तरीका है)।

यह @Local के साथ एनोटेटेड इंटरफेस के साथ ठीक काम करता है। यह भी @Remote साथ काम करता है, लेकिन निम्न अपवादों के साथ विफल रहता है जब जेपीए, शामिल है जब मैं एक इकाई की वस्तुओं की एक सूची वापस करने के लिए प्रयास करें।

java.rmi.MarshalException: कोर्बा मार्शल 1330446347 शायद; नेस्टेड अपवाद है: org.omg.CORBA.MARSHAL: चेतावनी: IOP00810011: readValue CDRInputStream में ValueHandler पर से अपवाद vmcid: OMG नाबालिग कोड: 11 पूरा: शायद

पूर्ण स्टैकट्रेस।

javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is: 
    org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe 
    at remote.admin.sessionbeans._AdminRemoteSessionBeanRemote_Wrapper.getZones(remote/admin/sessionbeans/_AdminRemoteSessionBeanRemote_Wrapper.java) 
    at managedbeans.ZoneBean.getZones(ZoneBean.java:27) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:363) 
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    at com.sun.el.parser.AstValue.getValue(AstValue.java:138) 
    at com.sun.el.parser.AstValue.getValue(AstValue.java:183) 
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224) 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    at javax.faces.component.UIData.getValue(UIData.java:731) 
    at javax.faces.component.UIData.getDataModel(UIData.java:1798) 
    at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484) 
    at javax.faces.component.UIData.setRowIndex(UIData.java:473) 
    at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81) 
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820) 
    at javax.faces.component.UIData.encodeBegin(UIData.java:1118) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1755) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is: 
    org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe 
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:267) 
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.wrapException(Util.java:696) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:259) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152) 
    at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227) 
    at remote.admin.sessionbeans.__AdminRemoteSessionBeanRemote_Remote_DynamicStub.getZones(remote/admin/sessionbeans/__AdminRemoteSessionBeanRemote_Remote_DynamicStub.java) 
    ... 55 more 
Caused by: org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248) 
    at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107) 
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511) 
    at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99) 
    at $Proxy193.valuehandlerReadException(Unknown Source) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1022) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:2162) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2404) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1224) 
    at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:425) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:935) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:525) 
    at com.sun.corba.ee.impl.copyobject.ORBStreamObjectCopierImpl.copy(ORBStreamObjectCopierImpl.java:78) 
    at com.sun.corba.ee.impl.copyobject.ORBStreamObjectCopierImpl.copy(ORBStreamObjectCopierImpl.java:65) 
    at com.sun.corba.ee.impl.orbutil.copyobject.FallbackObjectCopierImpl.copy(FallbackObjectCopierImpl.java:69) 
    at com.sun.corba.ee.impl.orbutil.copyobject.FallbackObjectCopierImpl.copy(FallbackObjectCopierImpl.java:59) 
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.copyObject(Util.java:771) 
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.copyResult(DynamicMethodMarshallerImpl.java:473) 
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:243) 
    ... 58 more 
Caused by: java.lang.NullPointerException 
    at com.sun.corba.ee.impl.orbutil.ClassInfoCache$ClassInfo.<init>(ClassInfoCache.java:156) 
    at com.sun.corba.ee.impl.orbutil.ClassInfoCache.get(ClassInfoCache.java:281) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1097) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:935) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:525) 
    at com.sun.corba.ee.impl.corba.TCUtility.unmarshalIn(TCUtility.java:289) 
    at com.sun.corba.ee.impl.corba.AnyImpl.read_value(AnyImpl.java:605) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_any(CDRInputStream_1_0.java:775) 
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_any(CDRInputObject.java:482) 
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.readAny(Util.java:452) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.read_Array(ValueHandlerImpl.java:639) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:305) 
    at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274) 
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015) 
    ... 77 more 

दूरस्थ इंटरफ़ेस:

@Remote 
public interface AdminRemoteSessionBeanRemote { 
    public List<Zone>getZones(); 
    public int sum(int a, int b); 
} 

राज्यविहीन सत्र सेम ऊपर इंटरफ़ेस को लागू करने:

@Stateless 
public class AdminRemoteSessionBean implements AdminRemoteSessionBeanRemote { 
    @PersistenceContext(unitName="unit-name") 
    private EntityManager entityManager; 

    @Override 
    public List<Zone> getZones() { 
     return entityManager.createNamedQuery("Zone.findAll").getResultList(); 
    } 

    @Override 
    public int sum(int a, int b) { 
     return a + b; 
    } 
} 

JSF कामयाब सेम:

@ManagedBean 
@RequestScoped 
public class ZoneBean { 
    @EJB//(mappedName="remote.admin.sessionbeans.AdminRemoteSessionBeanRemote") 
    private AdminRemoteSessionBeanRemote adminRemoteSessionBeanRemote; 
    private List<Zone>zones; 
    private int sum; 

    public ZoneBean(){} 

    public List<Zone> getZones() { 
     zones=adminRemoteSessionBeanRemote.getZones(); 
     return zones; 
    } 

    public void setZones(List<Zone> zones) { 
     this.zones = zones; 
    } 

    public int getSum() { 
     sum=adminRemoteSessionBeanRemote.sum(10, 15); 
     return sum; 
    } 

    public void setSum(int sum) { 
     this.sum = sum; 
    } 
} 

sum() विधि जो सिर्फ int लौटाती है केवल प्रदर्शन के लिए है। यह काम करता है जैसा कि यह है।

समस्या तब होती है जब एक इकाई शामिल होती है जिसे EJB में public List<Zone> getZones() विधि में देखा जा सकता है जो ऊपर वर्णित अपवाद का कारण बनता है।

enter image description here

AdminClassLibrary (snapshot में प्रकाश डाला नोड) दूरदराज के इंटरफेस और इकाई वर्गों युक्त कक्षा लाइब्रेरी है।

कैसे EJB सत्र सेम में getZones() विधि के माध्यम से java.util.List<entities.Zone> वापस जाने के लिए?

मैं सभी इस अपवाद के बारे में गूगल द्वारा दिखाए गए लिंक्स पर क्लिक किया है लेकिन समाधान के पार नहीं आ सकता है।


Zone इकाई।

@Entity 
@Table(name = "ZONE", catalog = "", schema = "PROJECTDB") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "Zone.findAll", query = "SELECT z FROM Zone z ORDER BY z.zoneId DESC"), 
    @NamedQuery(name = "Zone.findByZoneId", query = "SELECT z FROM Zone z WHERE z.zoneId = :zoneId"), 
    @NamedQuery(name = "Zone.findByZone", query = "SELECT z FROM Zone z WHERE z.zone = :zone")}) 
public class Zone implements Serializable { 
    private static final long serialVersionUID = 1L; 
    // @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation 
    @Id 
    @Basic(optional = false) 
    @NotNull 
    @Column(name = "ZONE_ID") 
    private BigDecimal zoneId; 
    @Size(max = 50) 
    @Column(name = "ZONE") 
    private String zone; 
    @OneToMany(mappedBy = "zoneId", fetch = FetchType.LAZY) 
    private List<Country> countryList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "zone", fetch = FetchType.LAZY) 
    private List<ZoneCharge> zoneChargeList; 
    @JoinColumn(name = "TRANSPORTER_ID", referencedColumnName = "TRANSPORTER_ID") 
    @ManyToOne(fetch = FetchType.LAZY) 
    private Transporter transporterId; 

    //Getters and setters + constructor(s) + equals() + hashcode() 
} 
+0

आप भी 'Zone' वर्ग पोस्ट कर सके careof लिया गया है? –

+0

@ करलो पेलेग्रीनी - उस वर्ग को देखते हुए। धन्यवाद। – Tiny

उत्तर

9

समस्या Zone वर्ग उदाहरण के de-क्रमबद्धता के साथ है। यह Serializable होना चाहिए और क्लाइंट और सर्वर (स्थानीय और दूरस्थ दोनों) पर मौजूद होना चाहिए। यह रिमोट सर्वर पर दृढ़ता पुस्तकालयों को जोड़ने के लिए एक निर्भरता लगाएगा। इसलिए एक दृढ़ता इकाई भेजने के लिए बेहतर नहीं है।

+0

धन्यवाद। 'जोन' इकाई पहले से ही 'java.io.Serializable' इंटरफ़ेस लागू करती है। इसलिए, मुझे लगता है कि यह धारावाहिक होना चाहिए। मेरे मामले में, ग्राहक वेब मॉड्यूल (WAR) है। रिमोट इंटरफेस डब्ल्यूएआर और ईजेबी मॉड्यूल के साथ-साथ कक्षा पुस्तकालय में मौजूद है। क्षमा करें मुझे नहीं मिला। – Tiny

+0

मेरा कहना है कि इकाई क्षेत्र भी युद्ध में मौजूद होना चाहिए। और WAR में इकाई क्षेत्र को शामिल करने के लिए आपको सभी आश्रित जार भी वेब-आईएनएफ/lib में रखना होगा। –

+0

मैंने वेब-युद्ध मॉड्यूल में 'जोन' इकाई वाले पैकेज की प्रतिलिपि बनाई है लेकिन मुझे प्रश्न में उल्लिखित एक ही अपवाद मिला है। यह NetBeans 6.9.1 के साथ काम करता है, मैंने कोशिश की है कि दूरस्थ क्लास लाइब्रेरी में रिमोट इंटरफेस को रखने के लिए जरूरी नहीं है। मुझे नहीं पता कि NetBeans 7.x के साथ ऐसे अनुप्रयोगों को कैसे बनाया जाए। धन्यवाद। – Tiny

1

मैं सिर्फ इस समस्या का एक उदाहरण था। जिस दूरस्थ विधि को मैं कॉल कर रहा था वह एक अपवाद (वास्तव में एक PSQLException) फेंक दिया। मुझे लगता है कि PSQLException लपेटा गया था और आखिरकार धारावाहिक और मेरे ग्राहक को भेजा गया था। मेरे क्लाइंट में अपने क्लासपाथ में PSQLException नहीं है जो कि कोर्बा के झटके में अच्छी तरह से संभाला नहीं जा रहा है।

मैं क्लाइंट अनुप्रयोग के लिए एक डिबगर hooking और NullPointerException को कंस्ट्रक्टर्स पर ब्रेक अंक रख कर इस का निदान। तब मैं यह देखने में सक्षम था कि अपवाद को फेंकने के समय किस वर्ग को निराशाजनक बनाया जा रहा था।

गुड लक!

0

मैं भी एक रिमोट EJB कॉल से इकाई के संग्रह प्राप्त करने की कोशिश के बाद त्रुटि स्टैक ट्रेस मिला है। जेडीके को 1.8_60 तक ऊपर और ऊपर से समस्या को पूरी तरह से हल किया गया। यह त्रुटि स्टैक के बिना अब बहुत अच्छी तरह से चल रहा है। इस बग

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