Powrót do EJB

0

Witam,
kiedyś pisałem program z EJB i teraz chce napisać kolejny program który wykorzystuję tą technologie. Ale coś nie bardzo chce mi działać. I nie wiem w czym problem. Stworzyłem EJB projekt oraz interface (Remote) i implementacje tego interfejsu. Wyeksportowałem je na serwer (JBoss 6.0).

I dostaje taki bład:
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at TestKlient.main(TestKlient.java:19)

To jest prosty kod klienta:

public class TestKlient {

	/**
	 * @param args
	 * @throws NamingException 
	 */
	public static void main(String[] args) throws NamingException {

		 Context ctx;
         ctx = new InitialContext();
         
         Object obj = ctx.lookup("ZarzadcaBazy/remote");       //niby z tą linijką jest coś nie tak
        
        ZarzadcaBazyRemote zdalna = (ZarzadcaBazyRemote) obj;
        
       zdalna.test();
		
	}

}
0

A jak zrobisz tak (defaulty dla JBossa)

            Properties p = new Properties();
            p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
            p.put(Context.PROVIDER_URL, "localhost:1099");
            p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
            InitialContext ctx = new InitialContext(p);

?
Bo ty sobie ten InitialContext napisałeś trochę tak jakbyś to uruchamiał na serwerze aplikacyjnym (wtedy nie musisz nic dodatkowo specyfikować bo serwer ogarnie gdzie jest jndi i z czego ma korzystać), a uruchamiasz standalone.

0
public class TestKlient {

	/**
	 * @param args
	 * @throws NamingException 
	 */
	public static void main(String[] args) throws NamingException {

	Properties p = new Properties();
        p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        p.put(Context.PROVIDER_URL, "localhost:1099");
        p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
        InitialContext ctx = new InitialContext(p);
        
        ZarzadcaBazyRemote remote = (ZarzadcaBazyRemote) ctx.lookup("ZarzadcaBazy/remote");
         
         Object obj = ctx.lookup("ZarzadcaBazy/remote");
        
        ZarzadcaBazyRemote zdalna = (ZarzadcaBazyRemote) obj;
        
       zdalna.test();
		
	}

}

Tak już próbowałem wcześniej ale wtedy dostaje takie błędy:
Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at TestKlient.main(TestKlient.java:22)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
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 java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
... 5 more

0

A dodałeś do tego projektu odpowiednie zależności? Konkretnie chodzi mi o runtime JBossa. W Eclipse wystarczy dodanie referencji do projektu z EJB.

0

Jeśli dobrze cie rozumie to o to ci chodzi http://www.fotosik.pl/pokaz_obrazek/pelny/43814886b8b66b80.html to wydaje mi się że dodałem. Kurczaki no już kiedyś mi to działało.

0

Nie nie. Bo w ten sposób dołączyłeś tylko własne klasy a nie klasy JBossa. Najprościej będzie kliknąć prawym na projekt, dać build path, a potem referenced projects i dodać tamten projekt z EJB.

0

Zrobiłem tak jak powiedziałeś i teraz dostaje taki komunikat http://www.fotosik.pl/pokaz_obrazek/pelny/401709718087ea95.html.

0

http://wyslijto.pl/plik/gy8ac5ddji
masz tu przykładowego prostego EJB i klienta.

0

Ok doszedłem do tego, że teraz jedyne co eclipse mi mówi przy próbie uruchomienia to:
log4j:WARN No appenders could be found for logger (org.jnp.interfaces.TimedSocketFactory).
log4j:WARN Please initialize the log4j system properly.

Z tego co sobie przypominam to kiedyś jak pisałem to trza było chyba do klienta dodać jakieś jary typu jbossall-client.jar szkoda że pamiętam tylko tego bo tam się kilka dodawało. No nic idę szukać jakie są jeszcze potrzebne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1