Erro ao Executar app client EJB 3.0

2 respostas
C

Fiz um aplicativo ejb no netbeans.
Quando executo no netbeans fuciona belezinha
mas quando executo pelo Java Web Start http://localhost:8080/ da o sequinte erro

java.lang.ClassNotFoundException: com.sun.enterprise.appclient.MainWithModuleSupport

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 java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Unknown Source)

at com.sun.enterprise.appclient.jws.boot.JWSACCMain.run(JWSACCMain.java:218)

at com.sun.enterprise.appclient.jws.boot.JWSACCMain.main(JWSACCMain.java:182)

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 com.sun.javaws.Launcher.executeApplication(Unknown Source)

at com.sun.javaws.Launcher.executeMainClass(Unknown Source)

at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)

at com.sun.javaws.Launcher.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)
Minha classe Main esta assim
public class Main {
    @EJB
    private static LoginLocal loginBean;
    

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

          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");
             props.put(Context.PROVIDER_URL, "iiop://localhost:2809");
        try {
            Context ctx = new InitialContext(props);
            loginBean = (LoginLocal) ctx.lookup("net.sistema.LoginLocal");
            loginBean = new LoginBean();
            loginBean.login("Nome do Usuario", 32);
            JOptionPane.showMessageDialog(null, "Deu certo");
        } catch (NamingException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Deu erro!!!");
        }
      
    }

}

2 Respostas

gcobr

Isso é um festival de erros!

Pra começar, se você está fazendo injeção do EJB com anotação @EJB, você não tem que fazer o lookup que você fez no seu código.

Se você está usando um servidor de aplicação que é verdadeiramente compatível com JEE 5, este servidor de aplicação vai oferecer o suporte necessário para o processamento das anotações da sua aplicação cliente.

Lembre-se de que o JBoss 4.2 não é 100% compatíavel com JEE 5 e não suporta injeção de dependência em aplicação cliente. Somente o JBoss 5 é 100% compatível.
Glassfish também, até onde eu sei.

Client apps fazem parte da especificação do JEE e devem ser empacotadas junto com os demais componentes da sua aplicação preferencialmente em um EAR.

O servidor de aplicação que você estiver usando pode necessitar de descritores de implantação proprietários para a sua aplicação funcionar. Veja se é o caso na documentação do mesmo.

Além disso, parece que você está tentando referenciar o EJB pela interface local dele. E isso é errado!
Se você quer invocar o EJB remotamente, a partir da sua aplicação cliente, tem que usar a interface remota dele!

G

vocês conseguiram acessar uma aplicação EJB por Java Web Start?

se conseguiram pode me enviar um exemplo?

agradeço desde já

Criado 15 de janeiro de 2009
Ultima resposta 20 de dez. de 2010
Respostas 2
Participantes 3