2016-10-14 4 views
2

aktualisieren Das Problem mit der Tatsache verbunden zu sein scheint, dass das Ubuntu-Betriebssystem virtualisiert, dh ist habe ich verwendet Vmware Workstation ein Host-Betriebssystem (Windows) und einen Gastbetrieb zu erstellen System (Ubuntu).Windows Client und Linux (Ubuntu) Server

Wenn ich die EJB auf Glassfish auf dem Host (Windows) bereitstellen; Ich kann das EJB mit einem Servlet-Client auf dem Host (Windows) oder dem Gast (Ubuntu) suchen. Ich kann auch die Einstellungen für den Host oder den Gast festlegen, um das EJB zu finden. Ich glaube, das ist das Problem, d. H. Die Suche wird immer auf dem Host durchgeführt, unabhängig davon, ob die Hosteinstellungen oder die Gasteinstellungen im Servlet bereitgestellt werden. Hat jemand eine ähnliche Erfahrung und was haben Sie getan, um es zu lösen?

Original Question

Bitte beachten Sie den Code unten:

Properties props = new Properties(); 
     props = new Properties(); 
     props.setProperty("java.naming.factory.initial", 
      "com.sun.enterprise.naming.SerialInitContextFactory"); 
     props.setProperty("java.naming.factory.url.pkgs", 
      "com.sun.enterprise.naming"); 
     props.setProperty("java.naming.factory.state", 
      "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 
     props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.163.128"); 
     props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 
     try 
     { 
     InitialContext ctx = new InitialContext(props); 
     RemoteInterfaceRemote r = (RemoteInterfaceRemote) ctx.lookup("java:global/Course/RemoteInterface!com.w0051977.dao.RemoteInterfaceRemote");//!com.w0051977.dao.RemoteInterfaceRemote 
     String greeting = r.Greeting("Ian"); 
     System.out.println("got here"); 
     } catch (NamingException n) 
     { 
      System.out.println(n.toString()); 
    } 

Der Code innerhalb eines Servlet gefunden wird und wie erwartet funktioniert i.g. Die Begrüßungsvariable enthält: "Guten Nachmittag Ian". Das Servlet wird auf einem Windows-PC ausgeführt und stellt eine Verbindung zu einem Windows-Server her, auf dem die Enterprise-Bean gehostet wird.

Wenn ich jedoch die Bean auf einen Linux (Ubuntu) PC verschiebe, habe ich Probleme. Der obige Code wird in einem Servlet auf dem Linux-PC ausgeführt (der Client und der Server befinden sich in diesem Fall auf demselben PC). Ich kann jedoch den obigen Code nicht in einem Servlet auf einem Windows-PC verwenden.

Gibt es etwas Besonderes, wenn ein Windows-Client (Servlet) eine Verbindung zu einem Linux (Ubuntu) -Server herstellt? Ich ändere offensichtlich die IP-Adresse im obigen Code, wenn ich Server verschiebe. Die Ausnahme ist:

Lookup failed for 'java:global/Course/RemoteInterface' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=ubuntu, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming 

Die Ausgabe von der Konsole Glassfish (auf Ubuntu) ist:

[2016-10-14T08:57:16.824-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=96 _ThreadName=admin-listener(7)] [timeMillis: 1476460636824] [levelValue: 800] [[ 
    visiting unvisited references]] 
[2016-10-14T08:57:16.890-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=96 _ThreadName=admin-listener(7)] [timeMillis: 1476460636890] [levelValue: 800] [[ 
    visiting unvisited references]] 
[2016-10-14T08:57:17.238-0700] [glassfish 4.1] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=96 _ThreadName=admin-listener(7)] [timeMillis: 1476460637238] [levelValue: 800] [[ 
    Portable JNDI names for EJB RemoteInterface: [java:global/Course/RemoteInterface, java:global/Course/RemoteInterface!com.w0051977.dao.RemoteInterfaceRemote]]] 
[2016-10-14T08:57:17.248-0700] [glassfish 4.1] [INFO] [AS-EJB-00055] [javax.enterprise.ejb.container] [tid: _ThreadID=96 _ThreadName=admin-listener(7)] [timeMillis: 1476460637248] [levelValue: 800] [[ 
    Glassfish-specific (Non-portable) JNDI names for EJB RemoteInterface: [com.w0051977.dao.RemoteInterfaceRemote#com.w0051977.dao.RemoteInterfaceRemote, com.w0051977.dao.RemoteInterfaceRemote]]] 
[2016-10-14T08:57:17.432-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=96 _ThreadName=admin-listener(7)] [timeMillis: 1476460637432] [levelValue: 900] [[ 
    WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType<Object>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] 
[2016-10-14T08:57:17.472-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=96 _ThreadName=admin-listener(7)] [timeMillis: 1476460637472] [levelValue: 900] [[ 
    WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType<Object>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] 
[2016-10-14T08:57:17.482-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=96 _ThreadName=admin-listener(7)] [timeMillis: 1476460637482] [levelValue: 900] [[ 
    WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType<Object>, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]] 
[2016-10-14T08:57:18.078-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.core] [tid: _ThreadID=96 _ThreadName=admin-listener(7)] [timeMillis: 1476460638078] [levelValue: 800] [[ 
    Course was successfully deployed in 1,282 milliseconds.]] 

Ich verbrachte Tage haben in diese suchen. Bitte helfen Sie.

Die Ausgabe von: sudo lsof -i: 3700 (beachten Sie, dass ich noe die IP-Version 4 nach @RCs Kommentar geändert:

enter image description here

Es gibt eine Antwort, wenn Pingen des Ubuntu . PC aus dem Windows-PC

Hier ist die JNDI-Struktur auf dem Linux-Server:

enter image description here

Wie lautet der JNDI-Lookup-Name auf dem Remote-Server? Muss ich irgendeine Konfiguration auf dem lokalen Glassfish PC (Windows PC) vornehmen?

+0

Kann ich weitere Informationen liefern, um eine Antwort zu empfehlen? Ich habe Tage damit verbracht, zu googeln und viele verschiedene Dinge auszuprobieren. – w0051977

+0

Können Sie die Ausgabe von 'Post sudo lsof -i: 3700' (aus der Ubuntu-Box läuft) und die Ausgabe von' ping ubuntu' Laufe aus der Windows-Box? –

+0

@RC, habe ich die Ausgabe auf den ursprünglichen Beitrag veröffentlicht. Vielen Dank. – w0051977

Antwort

0

Es klingt, als wäre es möglicherweise ein Firewall-Problem. Versuchen Sie Telnet Ihren Linux-Rechner von der Windows-Maschine auf Port 3700. Wenn das nicht gelingt, fügen Sie Firewall-Regeln hinzu, um eingehenden Datenverkehr an Port 3700 zuzulassen. Dies sollte die EJB-Kommunikation ermöglichen. Vielleicht möchten Sie aber auch Ihre http/https eingehenden Anfragen zulassen.

Hoffnung, das hilft.

+0

Danke, aber ich glaube, dass Ubuntu keine Firewall gegeben hat. Ich glaube, das ist eher ein Virtualisierungsproblem als ein Firewall-Problem. – w0051977

Verwandte Themen