EJB com Applet

Pessoal, boa tarde!

Estou com um problemão! Eu fiz uma Applet que usa EJB para recuperar os dados do cliente e ir atualizando-os… O que acontece é:

1º - Não funciona no Linux, dá o seguint erro:

Caused by: javax.naming.CommunicationException: Failed to connect to server 10.10.3.202:1099 [Root exception is java.security.AccessControlException: access denied (java.net.SocketPermission 10.10.3.202:1099 connect,resolve)]
at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:274)
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1533)
... 21 more
Caused by: java.security.AccessControlException: access denied (java.net.SocketPermission 10.10.3.202:1099 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)

Bem, quando comecei a testar na Virtual Box, os erros já foram outros e fui adicionando as bibliotecas de acordo com os erros que iam surgindo. Foi quando ele solicitou o log4j, e foi aí que eu travei… O erro agora no Windows (através da Virtual Box) é:

Iniciando a Applet
Entrou no invokeEJB
123
java.lang.reflect.UndeclaredThrowableException
	at $Proxy0.getNota(Unknown Source)
	at br.gov.am.sefaz.gdd.applet.AWTSpreadsheet.invokeEJB(AWTSpreadsheet.java:192)
	at br.gov.am.sefaz.gdd.applet.AWTSpreadsheet.<init>(AWTSpreadsheet.java:75)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	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: java.rmi.MarshalException: Failed to communicate.  Problem during marshalling/unmarshalling; nested exception is: 
	java.lang.IllegalStateException: org.slf4j.LoggerFactory could not be successfully initialized. See also http://www.slf4j.org/codes.html#unsuccessfulInit
	at org.jboss.remoting.transport.socket.SocketClientInvoker.handleException(SocketClientInvoker.java:127)
	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:689)
	at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
	at org.jboss.remoting.Client.invoke(Client.java:1634)
	at org.jboss.remoting.Client.invoke(Client.java:548)
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
	... 18 more
Caused by: java.lang.IllegalStateException: org.slf4j.LoggerFactory could not be successfully initialized. See also http://www.slf4j.org/codes.html#unsuccessfulInit
	at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:242)
	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:208)
	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:221)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.java:106)
	at org.hibernate.proxy.pojo.javassist.SerializableProxy.readResolve(SerializableProxy.java:78)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at java.io.ObjectStreamClass.invokeReadResolve(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
	at java.io.ObjectInputStream.readSerialData(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at org.jboss.aop.joinpoint.InvocationResponse.readExternal(InvocationResponse.java:122)
	at java.io.ObjectInputStream.readExternalData(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
	at java.io.ObjectInputStream.readSerialData(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:239)
	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133)
	at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120)
	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:945)
	at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:633)
	at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
	at org.jboss.remoting.Client.invoke(Client.java:1634)
	at org.jboss.remoting.Client.invoke(Client.java:548)
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
	at $Proxy0.getNota(Unknown Source)
	at br.gov.am.sefaz.gdd.applet.AWTSpreadsheet.invokeEJB(AWTSpreadsheet.java:192)
	at br.gov.am.sefaz.gdd.applet.AWTSpreadsheet.<init>(AWTSpreadsheet.java:75)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	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)
	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
	... 26 more
javax.ejb.EJBException: java.lang.NullPointerException
	at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:63)
	at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)

O trecho:

Eu solicitei que imprimisse a medida que a Applet fosse sendo “montada”.

Segue trecho do código da Applet:

public AWTSpreadsheet()
{

try {
System.out.println("Iniciando a Applet");
nfe = invokeEJB();
System.out.println("Invocou o EJB");
} catch (Exception e1) {
e1.printStackTrace();
}

try {
dadoContrib = invokeEJBI();
  System.out.println("Invocou o EJBI");
} catch (Exception e1) {

e1.printStackTrace();
}

initComponents();
..........................

public NotaFiscalEntrada invokeEJB() throws Exception {
System.out.println("Entrou no invokeEJB");
home = getNotaEJB();
System.out.println("123");
notaFiscalEntrada = home.getNota(new Long(61));
System.out.println("456");
return notaFiscalEntrada;

}

public VwDadoContribuinte invokeEJBI() throws Exception {
DadosContribuinteI home = getNotaEJBI();
dadoContrib = home.getDados(nfe);

return dadoContrib;

}

public NotaI getNotaEJB() throws Exception, NamingException {
InitialContext context = getInitialContext();
Object obj = context.lookup("gdd-ear/Nota/remote");
NotaI home = (NotaI) PortableRemoteObject.narrow(
obj , NotaI.class);
return home;
}

public DadosContribuinteI getNotaEJBI() throws Exception, NamingException {
InitialContext context = getInitialContext();
Object obj = context.lookup("gdd-ear/DadosContribuinte/remote");

DadosContribuinteI home = (DadosContribuinteI) PortableRemoteObject.narrow(
obj , DadosContribuinteI.class);
return home;
}

Alguém já viu esse erro do log4j?

Alguém ajuda por favor! :lol:

Abraços!

Você assinou digitalmente a applet? Se não assinou, vai dar erros de permissão mesmo.

Assinei a applet toda, e suas dependências (jars necessários também). O problema de permissão foi sanado do Windows, agora é do Log4J :cry:

Valeu pela resposta rápida!

Eu não queria ser chato, mas você vai deixar essa applet em um sistema interno à empresa, ou ela vai ficar na Internet? Se ficar na Internet, você não pode nem pensar em tentar acessar um EJB remotamente. Você teria de criar um web service (por exemplo), e expor o EJB via esse web service; mas nunca usar diretamente o acesso via RMI ao EJB.

Caro entanglement, qual seria o motivo? O EJB vai ficar vuneravel, lento ou algo do tipo ou simplesmente não funciona?

entanglement, usarei ela internamente na empresa…

Você usa log4j ?

Abraços!

Qualquer pessoa com um mínimo de bom senso vai lhe dizer que qualquer coisa que não fale http ou https não deve ser deixada exposta na Internet, até para que não seja explorada alguma vulnerabilidade . Um caso muito simples é deixar um banco de dados SQL exposto na Internet, ou então um servidor RMI/IIOP como é o caso de deixar um application container totalmente exposto na Internet. Outro caso clássico é deixar um servidor de arquivos (Samba ou Windows) na Internet.
Normalmente se deixa apenas a parte Web.

[quote=Brucelee]entanglement, usarei ela internamente na empresa…

Você usa log4j ?

Abraços![/quote]

Nunca usei dentro de uma applet. Talvez você tenha de configurar o log4j de modo que ele não logue nada.

[quote=entanglement]Qualquer pessoa com um mínimo de bom senso vai lhe dizer que qualquer coisa que não fale http ou https não deve ser deixada exposta na Internet, até para que não seja explorada alguma vulnerabilidade . Um caso muito simples é deixar um banco de dados SQL exposto na Internet, ou então um servidor RMI/IIOP como é o caso de deixar um application container totalmente exposto na Internet. Outro caso clássico é deixar um servidor de arquivos (Samba ou Windows) na Internet.
Normalmente se deixa apenas a parte Web.[/quote]

Desculpe pela ignorância meu jovem padawan, então temos que explorar as vulnerabilidades dos bancos! :wink:
É que nunca usei Applet na web (internet). Não sabia que não tinha o mínimo de bom senso, mas vlw pela dica…

att
Darth Vader