Depois de algumas semanas estudando e pesquisando sobre EJB e sobre o Glassfish, consegui fazer uns testes básicos.
Agora estou tendo alguns problemas aqui.
Criei um módulo EJB no NetBeans 7 e depois o modulo cliente em Swing. Eu não criei um cliente de aplicativo empresarial como tem a opção no IDE na categoria JavaEE. Criei apenas um aplicativo JavaSE normal.
No NetBeans tudo funciona perfeitamente. O modulo EJB está implantado no glassfish na minha máquina local. Porém quando rodo o cliente fora do netbeans dá um erro que está na imagem em anexo.
Alguém sabe porque esse erro acontece se eu quiser rodar fora do IDE? Estou fazendo corretamente?
Outra coisa é, como faço pra conectar a app em Swing a um server glassfish remoto?
[quote=FernandoFranzini]Suas propriedades do JNDI não estão devidamente configuradas. Veja um exemplo no Jboss
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming.client");
props.setProperty(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");
props.setProperty("j2ee.clientName", "contato-client");
try {
return new InitialContext(props);
} catch (NamingException e) {
e.printStackTrace();
return null;
}
Eu não posso te ajudar pq não uso Glassfish.
[/quote]
Pois é… procurei várias vezes no google sobre essas configurações no Glassfish 3.1 e não encontrei… somente a que está acima que inclusive retirei o site do Glassfish.
Segui as recomendações mas sinceramente não sei onde está o erro.
[code] public static void main(String[] args) {
// TODO code application logic here
try {
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”);
// optional. Defaults to localhost. Only needed if web server is running
// on a different host than the appserver
props.setProperty(“org.omg.CORBA.ORBInitialHost”, “localhost”);
// optional. Defaults to 3700. Only needed if target orb port is not 3700.
props.setProperty(“org.omg.CORBA.ORBInitialPort”, “3700”);
Esse é o código que to usando segundo o exemplo dos links que você me passou.
Será que falta alguma coisa a fazer no Glassfish? Eu apenas implantei o modulo EJB.
Com os arqumentos java:global/OptimusEJB/UsuariosBean funciona de boa, mas só dentro do netbeans!!!
Esse é o stack do erro:
08/06/2011 10:10:26 com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
javax.naming.NamingException: Lookup failed for 'ejbs.UsuariosBean' 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.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: ejbs.UsuariosBean not found]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at optimusclient.OptimusClient.main(OptimusClient.java:34)
Caused by: javax.naming.NameNotFoundException: ejbs.UsuariosBean not found
at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:248)
at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:215)
at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:77)
at com.sun.enterprise.naming.impl.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:94)
at sun.reflect.GeneratedMethodAccessor516.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Continua com o mesmo erro quando rodo fora do IDE.
Stack do erro:
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(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at optimusclient.OptimusClient.main(OptimusClient.java:33)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
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
Agora falta jar no seu classpath do cliente (provavelmente). Se no NetBeans funciona, é algum jar que está faltando você colocar junto com o jar do seu cliente (e configurar o classpath desse cliente).
Pois é, de acordo com o stack parece ser isso mesmo… estou dando uma pesquisada aqui…
de acordo com os links que você me passou, preciso apenas do gf-client.jar, porém não está dando certo!
Pelo jeito o problema está na falta da biblioteca appserv-rt.jarque se não me engano o site do glassfish diz que é desnecessário na versão 3.1! baixei essa lib appserv-rt e agora dá outro erro que parece que falta uma classe nessa mesma biblioteca. Vai ver é a versão… estou tentando achar uma que dê certo!
O stack do novo erro é:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/logging/LogDomains
at com.sun.enterprise.util.ORBManager.<clinit>(ORBManager.java:78)
at com.sun.enterprise.naming.SerialInitContextFactory.<clinit>(SerialInitContextFactory.java:56)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
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 optimusclient.OptimusClient.main(OptimusClient.java:35)
Caused by: java.lang.ClassNotFoundException: com.sun.logging.LogDomains
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)
... 10 more
Bom, até agora só dor de cabeça… alguém aí usa o glassfish 3.1?
Adicionei as libs necessárias e até agora nada
Segue o stack:
javax.naming.CommunicationException: Can't find SerialContextProvider [Root exception is java.lang.ClassCastException]
at com.sun.enterprise.naming.SerialContext.getProvider(SerialContext.java:135)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:288)
at javax.naming.InitialContext.lookup(Unknown Source)
at optimusclient.OptimusClient.main(OptimusClient.java:39)
Caused by: java.lang.ClassCastException
at com.sun.corba.ee.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:229)
at javax.rmi.PortableRemoteObject.narrow(Unknown Source)
at com.sun.enterprise.naming.SerialContext.narrowProvider(SerialContext.java:93)
at com.sun.enterprise.naming.SerialContext.getProvider(SerialContext.java:128)
... 3 more
Caused by: java.lang.ClassCastException: Object is not of remote type com.sun.enterprise.naming.SerialContextProvider
at com.sun.corba.ee.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:221)
... 6 more
Resolvido… copiei a pasta modules e a lib gf-client.jar para a pasta lib da aplicação e rodou de boa… depois vou verificar quais são realmente as libs necessárias!
Muito obrigado a todos…
Vc descobriu quais são as libs necessarias?
Estou tendo esse mesmo problema, mas pra rodar fora do eclipse. De qquer forma a classe que não esta encontrando é a mesma.
[quote=maul]Vc descobriu quais são as libs necessarias?
Estou tendo esse mesmo problema, mas pra rodar fora do eclipse. De qquer forma a classe que não esta encontrando é a mesma.[/quote]