यह स्टैक ओवरफ़्लो में मेरा पहला प्रश्न है, इसलिए मुझे उम्मीद है कि यह बहुत आसान नहीं होगा। मैं एक अच्छे समाधान के लिए इंटरनेट के आसपास देख रहा हूं लेकिन अब तक मेरे पास यह नहीं है।किसी अन्य सर्वर में स्थित दूरस्थ ईजेबी तक पहुंचने का आसान तरीका
मैं आम तौर पर ईजेबी, जेएनडीआई और जावा ईई दुनिया के लिए बहुत ही भिक्षावान हूं, लेकिन पिछले महीनों में मैं इस माहौल में कुछ स्वीकार्य चीजें करने में सक्षम हूं। अब मैं काम पर एक समस्या पर ध्यान केंद्रित कर रहा हूं और अब तक समाधान उतना अच्छा नहीं है जितना मैं चाहूंगा।
परिदृश्य यह है: मेरे पास ग्लासफ़ीह 3.1.2 में एक ईएआर एप्लिकेशन चल रहा है। मैंने ईएआरबी को इस ईएआर ऐप के भीतर एक दूरस्थ इंटरफेस के माध्यम से स्टेटलेस बीन्स की पेशकश विधियों के साथ घोषित किया है।
यह मेरा रिमोट बीन उदाहरण के लिए, एक सर्वर server1 कहा जाता है में चल रहा
package com.booreg;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import com.booreg.IMyRemoteBean;
@Stateless
@LocalBean
public class MyRemoteBean implements IMyRemoteBean
{
@Override
public String helloWorld()
{
return "Hi what's up boy";
}
}
इस के लिए यह
package com.booreg;
import javax.ejb.Remote;
@Remote
public interface IMyRemoteBean
{
public String helloWorld();
}
तो मुझे लगता है कि लाजि़मी चलाना चाहिए एक दूसरे EAR एप्लिकेशन है, इंटरफ़ेस है किसी अन्य सर्वर पर, जिसे सर्वर 2 कहा जाता है। दूसरा एपीपी जेएसएफ और प्रबंधित बीन्स का उपयोग कर रहा है। हम एक प्रबंधित बीन MyRemoteBeanRemote के दूरदराज के एक ग्राहक के रूप में अभिनय किया है, यह के रूप में:
package com.nucleus;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import com.booreg.IMyRemoteBean;
@ManagedBean
@ViewScoped
public class MyManagedBean
{
@EJB(name="TheRef") IMyRemoteBean myRemoteBean;
public String getPhrase() { return myRemoteBean.helloWorld(); }
}
मैं मुद्दा यह है कि इस में एक EJB-रेफरी के अंदर वेब-INF/धूप में web.xml फ़ाइल घोषित करने से काम करता है के लिए आ गया है मेरी वेब परियोजना।
<ejb-ref>
<ejb-ref-name>TheRef</ejb-ref-name>
<jndi-name>corbaname:iiop:server1:3700#java:global/booreg/booreg.ejb/MyRemoteBean!com.booreg.IMyRemoteBean</jndi-name>
</ejb-ref>
मैं समझता हूँ कि इस धूप में web.xml फ़ाइल के साथ JNDI-नाम पता जहां EJB पहली बार एप्लिकेशन पर स्थित कार्यान्वयन पता लगाने के लिए करने के लिए दूसरे एप्लिकेशन बनाता है। लेकिन यहां मेरे कुछ प्रश्न हैं:
- मेरे प्रोजेक्ट में मेरे प्रत्येक ईजेबी इंटरफ़ेस के लिए एक ईजेबी-रेफरी प्रविष्टि घोषित करना आवश्यक है?
- मैं सूर्य-web.xml के अंदर सर्वर/पोर्ट (सर्वर 1: 3700 विकास के दौरान) के लिए स्थिर संदर्भ बनाने से कैसे बच सकता हूं? जब यह उत्पादन में जाएगा तो मुझे प्रत्येक के लिए मैन्युअल रूप से अलग नाम बदलना होगा ?? यह विचित्र लगता है। क्या मैं सर्वर/पोर्ट निर्दिष्ट करने के लिए सर्वर पक्ष पर किसी प्रकार का चर का उपयोग कर सकता हूं?
मुझे उम्मीद है कि मैंने खुद को काफी समझाया है।
बहुत धन्यवाद
अद्यतन: अंत में, इस link मुझे लगता है कि EJB सर्वर (server1) मेरी classpath के अंदर एक jndi.properties फ़ाइल बनाने के लिए संदर्भ बनाने के लिए संभव है करने के लिए धन्यवाद। इस फ़ाइल में इस तरह की रेखाएं होनी चाहिए।
java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
org.omg.CORBA.ORBInitialHost=server1
org.omg.CORBA.ORBInitialPort=3700
लेकिन मुझे अभी भी समस्याएं आ रही हैं। एप्लिकेशन को तैनात करते समय सर्वर 1 पर अगला अपवाद दिखाई देता है, मैं एप्लिकेशन को तैनात नहीं कर सकता।
ADVERTENCIA: IOP00100006: Class com.sun.jersey.server.impl.cdi.CDIExtension is not Serializable
org.omg.CORBA.BAD_PARAM: ADVERTENCIA: IOP00100006: Class com.sun.jersey.server.impl.cdi.CDIExtension is not Serializable vmcid: SUN minor code: 6 completed: Maybe
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
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 $Proxy117.notSerializable(Unknown Source)
at com.sun.corba.ee.impl.orbutil.ORBUtility.throwNotSerializableForCorba(ORBUtility.java:783)
at com.sun.corba.ee.impl.encoding.CDROutputStream_1_0.write_abstract_interface(CDROutputStream_1_0.java:697)
at com.sun.corba.ee.impl.encoding.CDROutputObject.write_abstract_interface(CDROutputObject.java:545)
at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.writeAbstractObject(Util.java:493)
...
किसी को भी कोई विचार है?
यदि आप रिमोट ejb को jndi के माध्यम से कोड में देखते हैं तो आप पोर्ट और सर्वर के लिए सर्वर जेवीएम चर का उपयोग कर सकते हैं। शायद सूर्य-web.xml के भीतर जेवीएम चर का उपयोग करना संभव है। मुझे नहीं पता कि यह संभव है या नहीं। – djmj
मुझे कोड को यथासंभव स्वच्छ और सरल रखना पसंद है। इस कारण से मैं अपने कोड के अंदर लुकअप का उपयोग करना पसंद नहीं करता जहां @EJB काम को आसान बनाता है। – dgisbert
क्या आपने क्लस्टर में दो उदाहरणों का आयोजन करने पर विचार किया है? – gcvt