Salve a tutti,
ho un EJB su Glassfish v3.1. Ho creato un client ad hoc come applicazione java normale (semplicemente includendo la libreria gf-client.jar) e funziona alla grande. Se provo ad accederci da una servlet che si trova su un server Tomcat v6.0.32 non va. In realtà è una quasi faq visto che su internet hanno tutti lo stesso problema, ma non c'è una soluzione che sia una... Ho seguito questo semplice tutorial (ufficiale!!!! ) http://glassfish.java.net/javaee5/ej...ainerRemoteEJB ma quando tento di ottenere l'InitialContext ricevo questo errore:
codice:
javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at javax.naming.InitialContext.init(InitialContext.java:223)
	at javax.naming.InitialContext.<init>(InitialContext.java:197)
	at mwt.j2ee.gescuola.client.TestServlet.process(TestServlet.java:47)
	at mwt.j2ee.gescuola.client.TestServlet.doGet(TestServlet.java:22)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
	... 23 more
Pensando che fosse un bug di Tomcat ho provato a farlo girare anche su Tomcat v7.0.19 ma stessa storia (in realtà il log qui sopra è proprio di Tomcat 7).
Quella maledetta classe SerialInitContextFactory si trova in glassfish-naming.jar. Includendo anche questa libreria il risultato non cambia. Così ho provato a creare da codice un semplice oggetto di questa classe e guardacaso non va, mi dà lo stesso errore. Ho provato a crearmi una mia classe custom che estende dalla precedente: nulla.
E' possibile risolvere questa storia una volta per tutte? Sto diventando matto... :muro: