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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с EJB 
:(
    Опции темы
Sequd
Дата 4.5.2011, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Собственно я много читал, но так и не понял... как объединить Session Bean и Entity Bean

Кто из них должен иметь доступ к БД? 
ведь схема должна быть такая Servlet -> Session Bean -> Entity Bean -> БД
Но не могу все это совместить вместе. есть ли примеры как все это реализовано вместе?
PM MAIL   Вверх
MisterCleric
Дата 4.5.2011, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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





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


Новичок



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

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



Цитата(MisterCleric @ 4.5.2011,  16:26)
Java Persistence API

эмм, к чему это?) я разве говорил по JSP?
мне нужно что бы все начиналось с сервлета, но как продолжить связку дальше? 
где образуется подключение и запросы в БД?
мне хотелось бы посмотреть на реальный, но простой код... 
PM MAIL   Вверх
MisterCleric
Дата 4.5.2011, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



эмм, к чему это?) я разве говорил по JSP?


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


Новичок



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

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



Цитата(MisterCleric @ 4.5.2011,  17:34)
эмм, к чему это?) я разве говорил по JSP?

извеняюсь, мой косяк, показалось что там JSP
да и отмазываться ссылками на гугл уже не прилично
искать там то, не зная что не особо увлекательно. 
Цитата

есть ли примеры как все это реализовано вместе?


Это сообщение отредактировал(а) Sequd - 4.5.2011, 19:29
PM MAIL   Вверх
RageSteel
  Дата 4.5.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё очень просто. Сервлет обращается к EJB, который обращается к EntityManager'у, которые обращается к базе данных и возвращает строки в таблицах в виде Entity-объектов.

Ниже пример для Java EE6.

Сам сервлет:
Код

package ru.vingrad.forum.java.ee;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Наш сервлет.
 * 
 * @author Rage Steel
 */
@WebServlet(name = "SampleServlet", urlPatterns = {"/SampleServlet"})
public class SampleServlet extends HttpServlet {

    @EJB
    private SampleEjb sampleEjb;
    
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet SampleServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Customer list</h1>");
            List<Customer> customers = sampleEjb.getCustomers();
            out.println("<ul>");
            for (Customer customer : customers) {
                out.println("<li>");
                out.println(customer.getName());
                out.println("</li>");
            }
            out.println("<ul>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}



EJB-bean:
Код

package ru.vingrad.forum.java.ee;

import java.util.List;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

/**
 *
 * @author Rage Steel
 */
@Stateless
@LocalBean
public class SampleEjb {
    
    @PersistenceContext
    private EntityManager entityManager;

    /**
     * Вернуть список Customer'ов.
     * 
     * @return 
     */
    public List<Customer> getCustomers() {
        TypedQuery<Customer> query = 
                entityManager.createQuery("SELECT c FROM Customer c", Customer.class);
        return query.getResultList();
    }
    
}


Entity-класс
Код

package ru.vingrad.forum.java.ee;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * Класс сущности — представление строки из таблицы.
 * 
 * @author Rage Steel
 */
@Entity
@Table(name = "CUSTOMER")
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "CUSTOMER_ID")
    private Integer customerId;
    @Basic(optional = false)
    @Column(name = "ZIP")
    private String zip;
    @Column(name = "NAME")
    private String name;
    @Column(name = "ADDRESSLINE1")
    private String addressline1;
    @Column(name = "ADDRESSLINE2")
    private String addressline2;
    @Column(name = "CITY")
    private String city;
    @Column(name = "STATE")
    private String state;
    @Column(name = "PHONE")
    private String phone;
    @Column(name = "FAX")
    private String fax;
    @Column(name = "EMAIL")
    private String email;
    @Column(name = "CREDIT_LIMIT")
    private Integer creditLimit;

    public Customer() {
    }

    public Customer(Integer customerId) {
        this.customerId = customerId;
    }

    public Customer(Integer customerId, String zip) {
        this.customerId = customerId;
        this.zip = zip;
    }

    public Integer getCustomerId() {
        return customerId;
    }

    public void setCustomerId(Integer customerId) {
        this.customerId = customerId;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddressline1() {
        return addressline1;
    }

    public void setAddressline1(String addressline1) {
        this.addressline1 = addressline1;
    }

    public String getAddressline2() {
        return addressline2;
    }

    public void setAddressline2(String addressline2) {
        this.addressline2 = addressline2;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getFax() {
        return fax;
    }

    public void setFax(String fax) {
        this.fax = fax;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getCreditLimit() {
        return creditLimit;
    }

    public void setCreditLimit(Integer creditLimit) {
        this.creditLimit = creditLimit;
    }

}


И persistence.xml — конфигурация для EntityManager'а:
Код

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="ServletPlusEjb" transaction-type="JTA">
        <jta-data-source>jdbc/sample</jta-data-source>
        <properties/>
    </persistence-unit>
</persistence>


Собственно пример для JavaEE6, проверялся в Glassfish 3.1. 
PM MAIL   Вверх
Sequd
Дата 5.5.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, это уже гораздо лучше.
У меня возникло 2 проблемы, не работают эти аннотации, к примеру эти @Stateless, @LocalBean, но тут смысел более менее понятен.
а вот строчка 
Цитата

TypedQuery<Customer> query = 
                entityManager.createQuery("SELECT c FROM Customer c", Customer.class);

совсем не понятна ((( 
можете по подробнее объяснить, что это за чудо EntityManager, почему он содержит запрос и вообще структуру??? (Запросы подобно этому должны быть здесь???)
а если я буду делать поиск по каким то критериям??? я так понимаю мне нужно будет написать еще 1 метод в SampleEjb??? но что должно быть там???

простите если вопросы очень глупые, но очень нужны помощь!
PM MAIL   Вверх
RageSteel
  Дата 5.5.2011, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Sequd @ 5.5.2011,  11:23)
а вот строчка 
Цитата

TypedQuery<Customer> query = 
                entityManager.createQuery("SELECT c FROM Customer c", Customer.class);

совсем не понятна ((( 
можете по подробнее объяснить, что это за чудо EntityManager, почему он содержит запрос и вообще структуру??? (Запросы подобно этому должны быть здесь???)
а если я буду делать поиск по каким то критериям??? я так понимаю мне нужно будет написать еще 1 метод в SampleEjb??? но что должно быть там???

простите если вопросы очень глупые, но очень нужны помощь!

EntityManager — это тот парень, который общается с базой. Чтобы всё понять — лучше погрузиться в описание Java Persistence API, частью которого он является. Он отображает строки таблиц в объекты, которые аннотированны как @Entity.

Если делать поиск — то в запрос нужно включать параметры, которые потом нужно устанавливать.

Собственно разумно всю работу с EntityManager оставить EJB-бинам. А уж сколько там будет методов — это уж как удобней.
PM MAIL   Вверх
Sequd
Дата 6.5.2011, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



дело в том что у меня не работают эти аннотации!
Можете показать как сделать тоже самое только без аннотаций? Ведь это нужно что бы еще были и интерфейсы?
PM MAIL   Вверх
RageSteel
  Дата 6.5.2011, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А ты на каком сервере разворачиваешь приложение? Чтобы аннотации работали, нужно что-нибудь JavaEE6-совместимое: Glassfish 3.x, JBoss 6…
PM MAIL   Вверх
Sequd
Дата 6.5.2011, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



jboss-4.0.5.GA

но лучше увидеть все без них, что бы разобраться как все работает, ведь серверы разные могут быть
PM MAIL   Вверх
RageSteel
  Дата 6.5.2011, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Jboss 4 — это Java EE 1.4, конечно там аннотации не работают, ибо их в четвёртой java не было. В мире Java EE 1.4 нужно писать много-много XML'я и дополнительных классов/интерфейсов. Я с этим не работал, так что увы.
PM MAIL   Вверх
Sequd
Дата 8.5.2011, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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