Как получить доступ к EJB? - PullRequest
0 голосов
/ 22 октября 2010

Я пытаюсь разработать приложение Basic EJB3 на JBOSS 4.2 в Eclipse

Я создал проект EJB в eclipse.

Ниже приведены мои удаленные и локальные интерфейсы.

package com.test;
import javax.ejb.Local;

@Local
public interface HelloWorldLocal 
{
  public String getGreeting();
}

package com.test;
import javax.ejb.Remote;

@Remote
public interface HelloWorldRemote 
{
   public String getGreeting();
}

и моя реализация ejb

package com.test;
import javax.ejb.Stateless;

@Stateless
 public class HelloWorld implements HelloWorldRemote, HelloWorldLocal {


public HelloWorld() {
    // TODO Auto-generated constructor stub
}

public String getGreeting() {
    // TODO Auto-generated method stub
    return "First EJB People";
}

}

Я развернул ее как JAR-файл в разобранном виде, и он работает нормально.

Мой первый вопрос:

Что еще мне нужно добавить к этой взорванной банке?

Во-вторых, я создал автономный клиент и добавил указанный выше jar к его classpath

Код клиента выглядит следующим образом:

package com.testejb;

import java.io.FileInputStream;import java.util.Properties;

import javax.naming.InitialContext;

public class TestBean {

/**
 * @param args
 */
public static void main(String[] args) 
{
    // TODO Auto-generated method stub
      HelloWorldRemote getMess = null;
      try {
          Properties props = new Properties();
            Properties props = new Properties();
             props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
            props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
            props.setProperty("java.naming.provider.url", "localhost:1099"); 

          InitialContext ic = new InitialContext(props);

          //


          getMess = (HelloWorldRemote) ic.lookup("HelloWorldRemote/remote");
          System.out.println(getMess.getGreeting());
    } catch (Exception e) 
    {
        // TODO: handle exception
        e.printStackTrace();
    }

}

}

Имя банки: FirstEJB.Я пробовал искать как FirstEJB / HelloWorldRemote / remote.

Но когда я запускаю программу, я получаю сообщение об ошибке

javax.naming.NameNotFoundException: HelloWorldRemote not bound

Если я набираю поиск как HelloWorld / remote, я получаюошибка

Caused by: java.io.InvalidClassException: org.jboss.ejb3.remoting.BaseRemoteProxy; local class incompatible: stream classdesc serialVersionUID = 1126421850898582900, local class serialVersionUID = -2711693270411201590

1 Ответ

1 голос
/ 23 октября 2010

Что еще мне нужно добавить к этой взорванной банке?

Ничего, его можно использовать.

Я пробовал искать в качестве FirstEJB / HelloWorldRemote / remote

С JBoss, именем JNDIбудет:

<myEarName>/<EJB-Name>/remote

Где EJB-Name по умолчанию имеет имя Bean, если не указано.Таким образом, в вашем случае, без использования пакета EAR, имя JNDI должно быть:

HelloWorld/remote

Это должно быть зарегистрировано в журналах сервера во время развертывания.

Если я набираю поиск как HelloWorld / remote, я получаю сообщение об ошибке (...)

Имя JNDI, используемое для поиска, является правильным, эта ошибка - еще одна проблема, очень похожая на EJBTHREE-1118 .Не могли бы вы попробовать с JBoss 4.2.3.GA?

...