Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / сессии в Web (EJB) / 8 сообщений из 8, страница 1 из 1
22.02.2015, 13:47
    #38885927
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сессии в Web (EJB)
всем привет!
я только изучаю JEE, так что не судите строго.
возникла одна проблема с работой JEE. точнее пишу проект на основе EJB. создал страницу авторизации пользователя если все успешно то переход на таблицу а там уже можно выполнять операции CRUD, и т.д.
на первый взгляд все правильно работает, но вчера ради интереса проверял на работоспособность при коллективном использовании. там заметил что если первый пользователь (условно user1) авторизуются успешно и потом авторизуется user2 происходит чудо... а точнее user1 становится user2 помогите разобраться.
кстати сервлет для проверки логина/пароля и forward'а выглядит вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
package demo;

import demo.entity.Users;

import demo.facade.SessionEJBLocal;

import java.io.IOException;
import java.io.PrintWriter;

import java.util.Date;
import java.util.List;
import java.util.TreeSet;

import javax.ejb.EJB;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.ServletException;

public class LoginCheck extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
    @EJB
    private SessionEJBLocal sel;

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        System.out.println("App Start ---->>>> " + new Date());
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String login = "";
        String password = "";
        try {
            login = request.getParameter("login");
            password = request.getParameter("password");
        } catch (Exception e) {
            e.printStackTrace();
        }
        response.setContentType(CONTENT_TYPE);
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>LoginCheck</title></head>");
        out.println("<body>");
        try {
            Users user = new Users();
            user = sel.getUsersFindUserByLoginPass(login, password);
                        
            if (user != null) {
                getServletContext().setAttribute("new", user);
                
                System.out.println("v sayt zaxodit ---->>> " + login);
                request.getRequestDispatcher("abiturientslist").forward(request, response);
            } else {
                System.out.println("Ошибка при авторизации!!!");
                out.println("<b><font color=" + "red" + ">Проверте правильность логина/пароля!</font></b>");
                out.println("<a href=start>back</a>");
            }
        } catch (IOException ioe) {
            // TODO: Add catch code
            System.out.println("UPS!!!");
            System.out.println(ioe);
        } catch (ServletException se) {
            // TODO: Add catch code
            System.out.println("UPS SORRY!!!");
            System.out.println(se);
        }

        out.println("</body></html>");
        out.close();
    }
}



если я не ошибаюсь я должен использовать сессию, так да?
...
Рейтинг: 0 / 0
22.02.2015, 15:44
    #38885998
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сессии в Web (EJB)
Музаффар,

Поскольку Вы не привели код SessionEJBLocal, то остается только догадываться, но похоже Вы путаете stateless session beans (из EJB) с session-scoped bean (из CDI).
...
Рейтинг: 0 / 0
22.02.2015, 15:45
    #38886000
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сессии в Web (EJB)
...
Рейтинг: 0 / 0
22.02.2015, 16:12
    #38886010
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сессии в Web (EJB)
У вас создается 1 экземпляр объекта сервлета, туда один раз инжектится Ваш EJB, затем он обрабатывает ВСЕ Ваши запросы. Т.е. на каждый новый запрос новый EJB не создается. Как это решить - гугл в помощь.
Код: java
1.
2.
Users user = new Users();
user = sel.getUsersFindUserByLoginPass(login, password);


Это как-то странно...
...
Рейтинг: 0 / 0
22.02.2015, 16:56
    #38886034
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сессии в Web (EJB)
привожу SessionEJB
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
package demo.facade;

import demo.entity.Abiturients;
import demo.entity.Groups;

import demo.entity.Users;

import java.math.BigDecimal;

import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.ejb.TransactionAttribute;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless(name = "SessionEJB", mappedName = "DemoAbits-Model-SessionEJB")
@Remote
@Local
public class SessionEJBBean implements SessionEJB, SessionEJBLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Model")
    private EntityManager em;

    public SessionEJBBean() {
    }

...

    public Users persistUsers(Users users) {
        em.persist(users);
        return users;
    }

    public Users mergeUsers(Users users) {
        return em.merge(users);
    }

    public void removeUsers(Users users) {
        users = em.find(Users.class, users.getIduser());
        em.remove(users);
    }

    /** <code>select o from Users o</code> */
    public List<Users> getUsersFindAll() {
        return em.createNamedQuery("Users.findAll").getResultList();
    }

    /** <code>SELECT o FROM Users o WHERE o.login = :l AND o.password = :p</code> */
    public Users getUsersFindUserByLoginPass(String l, String p) {
        try {
            return (Users)em.createNamedQuery("Users.findUserByLoginPass").setParameter("l", l).setParameter("p",
                                                                                                             p).getSingleResult();
        } catch (Exception e) {
            // TODO: Add catch code
            return null;
        }

    }

   ....
}



наверное я где то должен объявит HttpSession и проверять состояния, а точнее if(HttpSession.isNew()){...}
или я что то пропустил?
...
Рейтинг: 0 / 0
23.02.2015, 16:18
    #38886461
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сессии в Web (EJB)
Про @Stateless бин предположил неверно. Вот только непонятно зачем там SessionContext, если оно не используется. "Амулетами" классы обвешиваете? )
Музаффарпроисходит чудо... а точнее user1 становится user2 помогите разобраться.В чем это выражается?
...
Рейтинг: 0 / 0
23.02.2015, 17:44
    #38886510
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сессии в Web (EJB)
WGA,
на сколько я понял дело в getServletContext().setAttribute("new", user);
я должен передавать объект в атрибуте сессии типа
request.getSession().setAttribute("new", user); или session.setAttribute("new", user);
...
Рейтинг: 0 / 0
24.02.2015, 00:08
    #38886651
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сессии в Web (EJB)
МузаффарWGA,
на сколько я понял дело в getServletContext().setAttribute("new", user);
я должен передавать объект в атрибуте сессии типа
request.getSession().setAttribute("new", user); или session.setAttribute("new", user);

Читаем ооф доку первым делом - офф дока
Ниже основная мысль.
There is one context per "web application" per Java Virtual Machine. (A "web application" is a collection of servlets and content installed under a specific subset of the server's URL namespace such as /catalog and possibly installed via a .war file.)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / сессии в Web (EJB) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]