Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ejb3.0 application 
:(
    Опции темы
mhalion
Дата 16.4.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



Создаю в eclipse "EJB Project", создаю простую табличку и entuity к ней:
Код

package ejbbase.entities;
...
@Entity
@Table(name="MYTEST")
@SequenceGenerator(allocationSize=1, initialValue=1, name="TEST_SEQUENCE", sequenceName="TEST_SEQ")
public class Mytest implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="TEST_SEQUENCE")
    @Column(nullable = false, unique = true, updatable = false, precision = 10, scale = 0)
    private int iid;
    @Column(nullable = false, unique = true)
    private String vle;
    @Column(nullable = false)
    private String dsc;
    private static final long serialVersionUID = 1L;

    public Mytest() { super(); }
    public int getUid() { return this.iid; }
    public void setUid(int uid) { this.iid = uid; }
    public String getVle() { кeturn this.vle; }
    public void setVle(String vle) { this.vle = vle; }
    public String getDsc() { return this.dsc; }
    public void setDsc(String dsc) { this.dsc = dsc; }
}

Создаю local и remote интерфейсы:
Код

package ejbbase.interfaces;
...
@Local
public interface ITestBeanLocal {
    public Mytest getByUid(int uid);
    public void add(String vle, String dsc);
    public void edit(int uid, String vle, String dsc);
    public void remove(int uid);
    public List<Mytest> getAll();
}
package ejbbase.interfaces;
...
@Remote
public interface ITestBeanRemote {
    public Mytest getByUid(int uid);
    public void add(String vle, String dsc);
    public void edit(int uid, String vle, String dsc);
    public void remove(int uid);
    public List<Mytest> getAll();
}

Делаю bean на этих интерфейсах:
Код

package ejbbase.beans;
...
@Stateless
public class TestBean implements ITestBeanLocal, ITestBeanRemove {
    @PersistenceContext(unitName = "ejbp")
    EntityManager em;
    public static final String RemoteJNDIName =  TestBean.class.getSimpleName() + "/remote";
    public static final String LocalJNDIName =  TestBean.class.getSimpleName() + "/local";
    @Override
    public Mytest getByUid(int uid) {...}
    @Override
    public void add(String vle, String dsc) {...}
    @Override
    public void edit(int uid, String vle, String dsc) {...}
    @Override
    public List<Mytest> getAll() {...}
    @Override
    public void remove(int uid) {...}
}

Т.е. всё это создаю в "EJB Porject".

Далее если мне нужно сделать веб-приложение, я создам, например, "Dinamic Web Project" и в сервлете буду работать Remote-интерфейсом.
Код

try {
            ITestBeanRemove tb = (ITestBeanRemove)new InitialContext().lookup(TestBean.RemoteJNDIName);
            if (request.getParameter("action").equals("add")) {
                tb.add(request.getParameter("value"), request.getParameter("desc"));                
            } else if (request.getParameter("action").equals("remove")) {
                tb.remove(Integer.parseInt(request.getParameter("uid")));
            } else if (request.getParameter("action").equals("edit")) {
                tb.edit(Integer.parseInt(request.getParameter("uid")),
                        request.getParameter("value"),
                        request.getParameter("desc"));
            } else if (request.getParameter("action").equals("all")) {
                List<Mytest> items = tb.getAll();
                for (Mytest t : items) {
                    System.out.println(t.getUid() + " > " + t.getVle() + " > " + t.getDsc());
                }
            }
        } catch (NamingException e) {
            e.printStackTrace();
        }

И т.д.

Но я не могу найти как использовать ejb в рамках обычного приложения!

Я использую jboss-5.0.1.GA.

Можно кинуть пример или ссылочку.
PM MAIL   Вверх
MisterCleric
Дата 17.4.2009, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Доброе утро. 
Да ты знаешь - точно также. Просто InitialContext нужно передать определенные свойтсва:
Код

  Hashtable env = new Hashtable();
        env.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); // если JBOSS
        env.put("java.naming.provider.url", "localhost:1099"); // если JBOSS и порты поумолчанию
        Context ctx = new InitialContext(env);
        ITestBeanRemove tb = (ITestBeanRemove) ctx.lookup(TestBean.RemoteJNDIName);


Только здесь два таких момента:
1. Твое клиентское приложение должно знать в своем CLASSPATH об ITestBeanRemove
2. TestBean.RemoteJNDIName не есть корректно. Так как придется еще в CLASSPATH клиентского приложения ложить еще и сам бин. Перенеси определения JNDI в интерфейсы

И еще такое: странно, что оно вообще с такими JNDI именами даже в сервлете работает. Я наблюдал такое, что если не указать
Код

@Stateless(mappedName = [твое желаемое JNDI имя])

то JBOSS его генерит как: имя ЕАР + / + имя класса Имплементации + /remote или /local
Под каким именем(именами) задеплоил этот бин у тебя? что пишет в консоли?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
mhalion
Дата 20.4.2009, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



"Под каким именем(именами) задеплоил этот бин у тебя? что пишет в консоли?".
Вот:
+- TestBean (class: org.jnp.interfaces.NamingContext)
  |   +- local (class: Proxy for: ejbbase.interfaces.ITestBeanLocal)
  |   +- remote-ejbbase.interfaces.ITestBeanRemove (class: Proxy for: ejbbase.interfaces.ITestBeanRemove)
  |   +- remote (class: Proxy for: ejbbase.interfaces.ITestBeanRemove)
  |   +- local-ejbbase.interfaces.ITestBeanLocal (class: Proxy for: ejbbase.interfaces.ITestBeanLocal)

Вот ещё вопрос:

Как правильно запустить проект как обычное приложение? Это должен сделать сам сервер с помощью каких-то листнеров?


PM MAIL   Вверх
xaoc2
Дата 30.4.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 22.10.2004

Репутация: нет
Всего: нет



Кстати,..... чтобы не дублировать код:

Код

package ejbbase.interfaces;
...
public interface ITest{
    public Mytest getByUid(int uid);
    public void add(String vle, String dsc);
    public void edit(int uid, String vle, String dsc);
    public void remove(int uid);
    public List<Mytest> getAll();
}

@Local
public interface ITestBeanLocal  extends ITest {}

.............
...
@Remote
public interface ITestBeanRemote extends ITest{}
....................
...................

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0851 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.