Frage zu JNDI

2AndAHalfBit

Aktives Mitglied
Hallo zusammen,

ich habe folgende Situation:

Anwendungsserver: Glassfish 3.1 (Community edition)
Installierte Anwendung: Protudo.ear
In Protudo.ear ist eine Jar mit den EJB's enthalten: Protudo-EJB.jar

Meine Bean heisst ProdudoSessionBean und liegt im package server.application.
Sie implementierung sowohl das Remote als auch das lokale Business Interface.

Im Internet habe ich folgende Regel für den JNDI lookup name gefunden:

The syntax for portable global session bean JNDI names in EJB 3.1 is :
java:global[/<app-name>]/<module-name>/<bean-name>

Ich möchte von einem Remoteclient (Swing) auf die Bean zugreifen.
Der folgende Code:

Java:
	private ProtudoSessionFacadeDelegate() throws NamingException
	{
		context = new InitialContext();
		protudoSessionFassade = (ProtudoRemoteSessionFacadeInterface) context.lookup("java:global/Protudo/Protudo-EJB/ProtudoSessionBean");
	}

führt jedoch zu der exception

javax.naming.NamingException: Lookup failed for 'java:global/Protudo/Protudo-EJB
/ProtudoSessionBean' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700,
java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory,
org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.ent
erprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi
.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: Pr
otudoSessionBean not found]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.jav
a:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.jav
a:455)
at javax.naming.InitialContext.lookup(Unknown Source)
at client.application.ProtudoSessionFacadeDelegate.<init>(ProtudoSession
FacadeDelegate.java:19)
at client.application.ProtudoSessionFacadeDelegate.GetInstance(ProtudoSe
ssionFacadeDelegate.java:26)
at client.gui.StartFrame.<init>(StartFrame.java:32)

ist mein Lookup String falsch? Wenn ja, was genau ist falsch?

Grüße und danke für eure Antworten.
 

2AndAHalfBit

Aktives Mitglied
Hallo,

nein, aber habe es gerade mal nachgeholt. Funktioniert aber genauso wenig.

javax.naming.NamingException: Lookup failed for 'java:global/Protudo/Protudo-EJB
/ProtudoRemoteSessionFacadeInterface' in SerialContext[myEnv={org.omg.CORBA.ORBI
nitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialIni
tContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url
.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl
.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotF
oundException: ProtudoRemoteSessionFacadeInterface not found]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.jav
a:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.jav
a:455)
at javax.naming.InitialContext.lookup(Unknown Source)
at client.application.ProtudoSessionFacadeDelegate.<init>(ProtudoSession
FacadeDelegate.java:19)
at client.application.ProtudoSessionFacadeDelegate.GetInstance(ProtudoSe
ssionFacadeDelegate.java:26)
at client.gui.StartFrame.<init>(StartFrame.java:32)
at client.application.ClientStart$1.run(ClientStart.java:20)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

grüße
 

fastjack

Top Contributor
Gibt es so eine Art Webconsole beim Glassfisch, wo Du sehen kannst, welche EJB welchen Namen haben? Anonsten kannst Du mal im InitialContext die list()-Methoden probieren, vielleicht bringst was.
 

2AndAHalfBit

Aktives Mitglied
Meinst du mit Webkonsole die webseite, die über port 4848 erreichbar ist? Da habe ich schon reingeschaut. Leider gibt es dort keine Einträge. Ist da generell was falsch?!

Beim Starten des Applikationsservers gibt es folgende Ausgaben:

[#|2011-11-01T21:15:17.738+0100|INFO|glassfish3.1.1|javax.enterprise.system.tools.admin.org.glassfish.deployment.admin|_ThreadID=61;_ThreadName=AutoDeployer;|Protudo was successfully deployed in 18.596 milliseconds.|#]

[#|2011-11-01T21:15:17.739+0100|INFO|glassfish3.1.1|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common|_ThreadID=61;_ThreadName=AutoDeployer;|[AutoDeploy] Successfully autodeployed : C:\java\glassfish\domains\domain1\autodeploy\Protudo.ear.|#]

[#|2011-11-01T21:17:01.813+0100|INFO|glassfish3.1.1|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common|_ThreadID=61;_ThreadName=AutoDeployer;|[AutoDeploy] Selecting file C:\java\glassfish\domains\domain1\autodeploy\Protudo.ear for autodeployment.|#]

[#|2011-11-01T21:17:02.481+0100|INFO|glassfish3.1.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=61;_ThreadName=AutoDeployer;|Portable JNDI names for EJB ProtudoSessionBean : [java:global/Protudo/Protudo-EJB/ProtudoSessionBean!server.interfaces.business.ProtudoLocalSessionFacadeInterface, java:global/Protudo/Protudo-EJB/ProtudoSessionBean!server.interfaces.business.ProtudoRemoteSessionFacadeInterface]|#]

[#|2011-11-01T21:17:02.482+0100|INFO|glassfish3.1.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=61;_ThreadName=AutoDeployer;|Glassfish-specific (Non-portable) JNDI names for EJB ProtudoSessionBean : [server.interfaces.business.ProtudoRemoteSessionFacadeInterface#server.interfaces.business.ProtudoRemoteSessionFacadeInterface, server.interfaces.business.ProtudoRemoteSessionFacadeInterface]|#]

List probiere ich gerade noch aus.
Grüße

//Edit. Die List methoden erwarten einen String als Parameter. Was soll ich dort übergeben?
 

TheDarkRose

Gesperrter Benutzer
In deiner Webconsole steht eh schon wie deine JNDI-Lookups aussehen zu haben. Beim der Interface Angabe nach dem ! ist zu beachten, das der ganze Packagename mit soll, im Unterschied zu der Beanangabe,
Code:
java:global/Protudo/Protudo-EJB/ProtudoSessionBean!server.interfaces.business.ProtudoRemoteSessionFacadeInterface
 

2AndAHalfBit

Aktives Mitglied
Hi,

danke, aber die Einträge hatte ich schon als erstes ausprobiert. Leider ohne Erfolg.
Grüße


//edit exception stack changed
javax.naming.NamingException: Lookup failed for 'java:global/Protudo/Protudo-EJB
/ProtudoSessionBean!server.interfaces.business.ProtudoRemoteSessionFacadeInterfa
ce' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.facto
ry.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORB
InitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, j
ava.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactory
Impl} [Root exception is javax.naming.NamingException: ejb ref resolution error
for remote business interfaceserver.interfaces.business.ProtudoRemoteSessionFaca
deInterface [Root exception is java.lang.ClassNotFoundException: server.interfac
es.business.ProtudoRemoteSessionFacadeInterface]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.jav
a:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.jav
a:455)
at javax.naming.InitialContext.lookup(Unknown Source)
at client.application.ProtudoSessionFacadeDelegate.<init>(ProtudoSession
FacadeDelegate.java:20)
at client.application.ProtudoSessionFacadeDelegate.GetInstance(ProtudoSe
ssionFacadeDelegate.java:27)
at client.gui.StartFrame.<init>(StartFrame.java:32)
at client.application.ClientStart$1.run(ClientStart.java:20)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: javax.naming.NamingException: ejb ref resolution error for remote bus
iness interfaceserver.interfaces.business.ProtudoRemoteSessionFacadeInterface [R
oot exception is java.lang.ClassNotFoundException: server.interfaces.business.Pr
otudoRemoteSessionFacadeInterface]
at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:434)
at com.sun.ejb.containers.RemoteBusinessObjectFactory.getObjectInstance(
RemoteBusinessObjectFactory.java:75)
at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(Serial
Context.java:556)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.jav
a:514)
... 20 more
Caused by: java.lang.ClassNotFoundException: server.interfaces.business.ProtudoR
emoteSessionFacadeInterface
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.ejb.EJBUtils.getBusinessIntfClassLoader(EJBUtils.java:688)
at com.sun.ejb.EJBUtils.loadGeneratedRemoteBusinessClasses(EJBUtils.java
:463)
at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:414)
... 24 more
 
Zuletzt bearbeitet:

TheDarkRose

Gesperrter Benutzer
In welchem Projekt leigen die Interfaces? Werden diese in das /lib Verzeichnis der EAR deployed? denn laut deiner Exception findet Glassfish die Interfaces nicht.
 

2AndAHalfBit

Aktives Mitglied
Nein, ich verwende einen DeploymentDescriptor (application.xml) mit folgendem Inhalt:

[XML]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
<display-name>anzeigenverwaltung</display-name>
<module>
<ejb>Protudo-EJB.jar</ejb>
</module>
<module>
<web>
<web-uri>Protudo.war</web-uri>
<context-root>protudo</context-root>
</web>
</module>
</application>
[/XML]

die EJB's befinden sich in der Datei Protudo-EJB.jar (in der Protudo.ear), jedoch gibt es dort kein lib-Verzeichnis. Die jar beinhaltet direkt die packages.

Ist das falsch? wird ein lib-Verzeichnis benötigt?
Greetings.
 

2AndAHalfBit

Aktives Mitglied
Achso, ja.
In meiner Jar befinden sich alle Serverklassen. Sprich die Schnittstellen eine managed bean für den webzugriff und die konkreten Session und entity beans.

grüße
 

2AndAHalfBit

Aktives Mitglied
Hallo FArt,

danke für deine Mühe. Aber ich denke, wir haben den lookupstring schon gefunden. Jedoch gibt es noch ein Problem, und ich glaube das hat mit meinem Deployment zu tun. Zuletzt gab es keine NamingException, er findet einfach die Klasse nicht.

Nun stellt sich nur noch die Frage warum.

übrigens:

C:\java\glassfish\bin>asadmin list-jndi-entries
java:global: com.sun.enterprise.naming.impl.TransientContext
UserTransaction: com.sun.enterprise.transaction.TransactionNamingProxy$UserTrans
actionProxy
server.interfaces.business.ProtudoRemoteSessionFacadeInterface#server.interfaces
.business.ProtudoRemoteSessionFacadeInterface: javax.naming.Reference
server.interfaces.business.ProtudoRemoteSessionFacadeInterface__3_x_Internal_Rem
oteBusinessHome__: javax.naming.Reference
com.sun.enterprise.container.common.spi.util.InjectionManager: com.sun.enterpris
e.container.common.impl.util.InjectionManagerImpl
ejb: com.sun.enterprise.naming.impl.TransientContext
server.interfaces.business.ProtudoRemoteSessionFacadeInterface: javax.naming.Ref
erence
jdbc: com.sun.enterprise.naming.impl.TransientContext
Command list-jndi-entries executed successfully.

Die EJB wird gefunden.
 

2AndAHalfBit

Aktives Mitglied
Hi @All,

ich schäme mich. Es funktioniert nun. Ich habe vergessen, die Schnittstellen an den Client auszuliefern. Deswegen konnte er die Schnittstellen auch nicht finden -:)

Hier der Code des Business Delegates (Er übernimmt die Kommunikation mit dem server lt. J2EE Entwurfsmuster)

Java:
package client.application;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import server.interfaces.business.ProtudoRemoteSessionFacadeInterface;

public class ProtudoSessionFacadeDelegate
{
	private static ProtudoSessionFacadeDelegate Instance;
	
	private InitialContext context;
	private ProtudoRemoteSessionFacadeInterface protudoSessionFassade;
	
	
	private ProtudoSessionFacadeDelegate() throws NamingException
	{
		context = new InitialContext();
		protudoSessionFassade = (ProtudoRemoteSessionFacadeInterface) context.lookup("java:global/Protudo/Protudo-EJB/ProtudoSessionBean!server.interfaces.business.ProtudoRemoteSessionFacadeInterface");
		System.out.println("EJB has been connected.");
	}
	
	
	public static ProtudoSessionFacadeDelegate GetInstance() throws NamingException
	{
		if( Instance == null)
			Instance = new ProtudoSessionFacadeDelegate();
		
		return Instance;
	}
	
	public String GetTestString()
	{
		return protudoSessionFassade.GetDummyString();
	}
}

Danke für eure Hilfe, und viele Grüße.
Es wäre auch nett wenn ihr mich beim Thema Dependency Injection auch noch etwas unterstützen könntet.

Eine Sache noch: Wie schalte ich das Thema auf erledigt?

Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Frage zu karaf-Tutorium zum Programmieren von Service und Consumer Allgemeines EE 3
A Frage Umfang JEE Allgemeines EE 5
J Frage zu Dependecy Injection Allgemeines EE 10
pkm Frage zu Get- bzw. Postrequest in JSP. Allgemeines EE 1
pkm Frage wegen AJAX-Zugriff auf ein Servlet Allgemeines EE 1
Tort-E Grundsätzliche Frage -> Lokale Installation Allgemeines EE 2
E Frage zu Wildfly und Hibernate OGM Allgemeines EE 0
S Frage zu Jersey + Hibernate Allgemeines EE 1
Shams Frage zu Dowload von JAVA SDK Allgemeines EE 5
J Frage zur Projektarchitektur Allgemeines EE 2
E Generelle Frage zu CDI mit JBoss AS 7.1.1 and Jave EE 6 Allgemeines EE 4
NoXiD JSF Frage zu Datenstruktur Allgemeines EE 2
S EJB Frage Allgemeines EE 10
E Entities im JSF/GUI-Layer, Frage zu 3-Layer-Model Allgemeines EE 2
G Allgemeine Frage zu Authentifizierung mittels Servlet API Allgemeines EE 2
B Wicket, Hibernate, H2 memDB Anfänger Frage Allgemeines EE 2
G Architektur- Frage Allgemeines EE 5
P Frage zu Java EE Design Patterns Allgemeines EE 3
M Frage zu Einloggen/Ausloggen - Features Allgemeines EE 4
M Frage zum Einsatz eines loggers Allgemeines EE 2
T Einstieg JEE: Frage für Frage bis zum Erfolg :-) Allgemeines EE 28
P Allg. Frage Eclipse EE & Xml Allgemeines EE 2
D Frage zum Statefull Session Beans Lebenszyklus Allgemeines EE 3
S JSTL / Spring Webflow Frage Allgemeines EE 2
S jsp include Frage Allgemeines EE 2
B Tomcat Manager - .war Datei hochladen. Einfache Frage Allgemeines EE 5
S Frage zu Taglib und Expression Language Allgemeines EE 5
B J2EE Frage Allgemeines EE 4
F Verständnis-Frage zu den vielen Frameworks Allgemeines EE 17
D Frage zum Verlassen eine JSF-Eingabefeldes Allgemeines EE 6
D Frage zu DataModel, DataModelSelection und Seam Allgemeines EE 3
H Frage zu JSF Allgemeines EE 5
G Generelle Java EE Frage zum Einstieg Allgemeines EE 3
M Allgemeine Frage zu Java Logging (JLA, Log4J) Allgemeines EE 5
N JSF - Frage zu Managed Beans und DataTable Allgemeines EE 4
S Frage zu JSF und MyFaces Komponenten: Teilbereiche neu laden Allgemeines EE 2
P Eine Frage zum Thema Applikationsaufbau Allgemeines EE 3
F [Hallo] Frage zu Hibernate Mapping und Vererbung Allgemeines EE 3
S allgemeine Frage zu Spring (AOP) Allgemeines EE 2
J Frage zu Jboss Allgemeines EE 7
G Anfänger-Frage: EJB Programmierung bzw. Konfiguration Allgemeines EE 6
M jsf Design Frage Allgemeines EE 3
J jsp:useBean Frage Allgemeines EE 4
megachucky JPA - Query.getResultList() Frage Allgemeines EE 3
M Hibernate Criteria frage Allgemeines EE 2
G Allgemeine Java Web Service Frage Allgemeines EE 4
1 Frage zu Struts und findForward Allgemeines EE 4
D Frage SSL und nicht SSL Allgemeines EE 3
E Warum geht das nicht (EL Frage)? Allgemeines EE 3
T Design/Performance-Frage beim servlet (static oder nicht) Allgemeines EE 35
E forEach Loop EL - Frage Allgemeines EE 2
G Design Frage Allgemeines EE 2
A EJB-Design Frage Allgemeines EE 2
F Frage zur guten Architektur einer WebApp Allgemeines EE 2
thE_29 Allg. Frage zu JSP/Servlets Allgemeines EE 2
flashfactor Frage zu Session-Lebensdauer Allgemeines EE 3
A Frage zu Servlets Allgemeines EE 5
P generelle Frage zum RequestDispatcher Allgemeines EE 2
G Unit Test einer JavaEE Anwendung schlägt fehl. JNDI Name nicht gefunden. Allgemeines EE 3
J Global JNDI Tomcat Allgemeines EE 0
P JAvaEE und JNDI Allgemeines EE 0
L JNDI auf Tomcat mit EE Allgemeines EE 4
B Tomcat, JNDI und datasource - Konfiguartion Allgemeines EE 2
J JNDI-lookup.. dasselbe Objekt oder Kopie? Allgemeines EE 2
A JNDI Lookup Allgemeines EE 6
E Eclipse Helios JNDI Lookup failed Allgemeines EE 5
J LDAP via JNDI Allgemeines EE 13
M Apache JNDI JDBC Treiber anbinden Allgemeines EE 7
T Tomcat: JNDI + JDBC Problem Allgemeines EE 3
F [JNDI] Holen einer EJB Allgemeines EE 3
L Probleme mit Kompilierung von JNDI Allgemeines EE 2
B Tomcat JNDI-Realm - LDAP mit Windows testen? Allgemeines EE 2
B Problem mit jndi lookup Allgemeines EE 7
H JNDI Name für die Queue - Connection Factory in JBoss ändern Allgemeines EE 3
T jndi & tomcat & datasource Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben