powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Транзакции в DAO и Service
25 сообщений из 34, страница 1 из 2
Транзакции в DAO и Service
    #38991103
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вылетает такой ексепшн, при создании курса.
org.hibernate.HibernateException: save is not valid without active transaction

вместо session.beginTransaction() и session.getTransaction().commit();(так все работало), нужно использовать аннотацию @Transactional

Код: java
1.
2.
3.
public interface CoursesDAO {
    public Course createCourse(Course course);
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Repository
public class CoursesDAOImpl implements CoursesDAO {
 
     @Autowired
     private SessionFactory sessionFactory;
     @Transactional 
    public Course createCourse(Course course) {
        
        Session session = sessionFactory.getCurrentSession();
    //session.beginTransaction();
        Integer id = (Integer) session.save(course);
        course.setId(id);
        //session.getTransaction().commit();
        
        return course;
    };




Код: java
1.
2.
3.
public interface CourseService {
    public Course createCourse(Course course);
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@Service("CourseService")
public class CourseServiceImpl implements CourseService {
    @Autowired
    private CoursesDAO coursesDAOImpl;
 
    public CourseServiceImpl() {
 
        coursesDAOImpl = new CoursesDAOImpl();
    }
 
 
    public Course createCourse(Course course) {
 
        course = coursesDAOImpl.createCourse(course);
  
        return course;
    }
 
}





Код: xml
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.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
     xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
     
    <mvc:annotation-driven />
    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close"
        p:driverClassName="org.h2.Driver"
        p:url="jdbc:h2:tcp://localhost:9092/~/QWE;INIT=create schema if not exists QWE\;"
        p:username="sa"
        p:password="" />
 
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">   
        <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
    <prop key="hibernate.show_sql">true</prop> 
    <prop key="connection.pool_size">1</prop> 
    <prop key="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</prop>
    <prop key="hibernate.current_session_context_class">thread</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop> 
    <prop key="hibernate.default_schema">QWE</prop>
  </props>  
    </property> 
        
    <property name="annotatedClasses">
      <list>
        <value>com.edu.jtc.entity.User</value>
        <value>com.edu.jtc.entity.Category</value>
        <value>com.edu.jtc.entity.Course</value>
        <value>com.edu.jtc.entity.UserCourse</value>
        <value>com.edu.jtc.entity.ManagerCourse</value>
         </list>
    </property>
    </bean>     
    
     
    
    <!-- FreeMarker Configuration -->
<bean id="freemarkerEmailConfig" class="freemarker.template.Configuration">
    <property name="directoryForTemplateLoading" value="WEB-INF/pages/templates" />
    <property name="objectWrapper">
        <bean class="freemarker.template.DefaultObjectWrapper"/>
    </property>
    
   
</bean>
 
    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--     <tx:annotation-driven transaction-manager="transactionManager"/>   -->
    <context:component-scan base-package="com.edu.jtc" />
    
</beans>
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38991236
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
getCurrentSession() : Obtains the current session.

Creates a new session, different from the contextual session

openSession() : Returns: The created session.
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38991238
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй удалить строчку <prop key="hibernate.current_session_context_class">thread</prop> из конфигурации
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38991259
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот этого не надо

Код: java
1.
2.
3.
4.
 public CourseServiceImpl() {
 
        coursesDAOImpl = new CoursesDAOImpl();
    }
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38991393
goldenhawk,
Оффтоп по архитектуре - а зачем Вам сервисы, если DAO транзакционный?
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38991397
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
голоса в головеgoldenhawk,
Оффтоп по архитектуре - а зачем Вам сервисы, если DAO транзакционный?
Потому что сервис может использовать несколько методов DAO.
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38991979
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
удалил <prop key="hibernate.current_session_context_class">thread</prop>

теперь вылетает ексепшн org.hibernate.HibernateException: No Session found for current thread на строке Session session = sessionFactory.getCurrentSession();
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992010
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<prop key="current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</prop>

<tx:annotation-driven transaction-manager="txManager"/>
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992013
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<prop key="hibernate.current_session_context_class">thread</prop>
то же самое, что и <prop key="current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</prop>
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992038
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelena,

в интерфейсе CourcesDao убрал аннотацию Transactional;
в CourcesDaoImpl все заявленные в CourcesDao методы;
убрал все строки с beginTransaction, commit;
в CourceServiceImpl перед каждым методом поставьте @Transactional;

в контроллере автоварит поля
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Controller
public class CoursesController {
	private static final Logger log = Logger.getLogger(CoursesController.class);

	@Autowired
	private CourseServiceImpl courseService;
	@Autowired
	private UserCourseServiceImpl userCourseService;
	@Autowired
	private UserServiceImpl userService;
	@Autowired
	private CategoryServiceImpl categoryService;



вылетает ексепшн

Error creating bean with name 'coursesController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.epam.edu.jtc.service.CourseServiceImpl com.epam.edu.jtc.web.CoursesController.courseService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.epam.edu.jtc.service.CourseServiceImpl] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992047
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
private com.epam.edu.jtc.service.CourseServiceImpl и <context:component-scan base-package="com.edu.jtc" /> наведет на мысль
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992060
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenaprivate com.epam.edu.jtc.service.CourseServiceImpl и <context:component-scan base-package="com.edu.jtc" /> наведет на мысльпакеты уже исправил и еще в контроллере поменял, интерфейсы поставил вместо CourseServiceImpl и т д.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Controller
public class CoursesController {
	private static final Logger log = Logger.getLogger(CoursesController.class);

	@Autowired
	private CourseService courseService;
	@Autowired
	private UserCourseService userCourseService;
	@Autowired
	private UserService userService;
	@Autowired
	private CategoryService categoryService;



Сейчас проект запускается , но при вервом же запросе вылетает ексепшн org.hibernate.HibernateException: createQuery is not valid without active transaction
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992068
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldenhawk, как сейчас выглядит этот запрос? Где стоит аннотация @Transactional ?
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992113
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenagoldenhawk, как сейчас выглядит этот запрос? Где стоит аннотация @Transactional ?
в DAO

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public   List<User> checkAuthorizationOfUser(LoginDTOForm userV) {

			Session session = sessionFactory.getCurrentSession();
			//session.beginTransaction(); 
			List userList = session
					.createQuery(
							"from User u where u.login='" + userV.getLoginField()
									+ "' and u.password='"
									+ userV.getPasswordField() + "'").list();
			//session.getTransaction().commit();



в Service

Код: java
1.
2.
3.
4.
@Transactional 
	public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {
         List<User> userList = userDAOImpl.checkAuthorizationOfUser(userV);
        return userList;


}
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992118
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldenhawk,
<tx:annotation-driven transaction-manager="txManager"/> прописали?
каким образом обращаетесь к
@Transactional
public List<User> checkAuthorizationOfUser(LoginDTOForm userV) ?
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992120
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelena,

Код: xml
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.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:security="http://www.springframework.org/schema/security"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
		http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
	 
	<mvc:annotation-driven />
	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close"
		p:driverClassName="org.h2.Driver"
		p:url="jdbc:h2:tcp://localhost:9092/~/QWE;INIT=create schema if not exists QWE\;"
		p:username="sa"
		p:password="" />

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">	
		<props>
    <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
    <prop key="hibernate.show_sql">true</prop> 
    <prop key="hibernate.format_sql">true</prop> 
<!--     <prop key="connection.pool_size">1</prop>  -->
    <prop key="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</prop>
<!--     <prop key="hibernate.current_session_context_class">thread</prop> -->
    <prop key="hibernate.hbm2ddl.auto">update</prop> 
    <prop key="hibernate.default_schema">QWE</prop>
  </props>	
  	</property>	
		
	<property name="annotatedClasses">
      <list>
        <value>com.epam.edu.jtc.entity.User</value>
        <value>com.epam.edu.jtc.entity.Category</value>
        <value>com.epam.edu.jtc.entity.Course</value>
        <value>com.epam.edu.jtc.entity.UserCourse</value>
        <value>com.epam.edu.jtc.entity.ManagerCourse</value>
         </list>
    </property>
	</bean>		
	
	<!-- FreeMarker Configuration -->
<bean id="freemarkerEmailConfig" class="freemarker.template.Configuration">
    <property name="directoryForTemplateLoading" value="WEB-INF/pages/templates" />
    <property name="objectWrapper">
        <bean class="freemarker.template.DefaultObjectWrapper"/>
    </property>
   
</bean>

	<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
	 <tx:annotation-driven transaction-manager="transactionManager"/>   
	<context:component-scan base-package="com.epam.edu.jtc" />
	
</beans>



обращаюсь в контроллере
@Autowired
private UserService userService;

userService.checkAuthorizationOfUser(loginDTOForm)


Код: 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.
@Controller
public class LoginController {
	private static final Logger log = Logger.getLogger(LoginController.class);

	@Autowired
	private UserService userService;

	@RequestMapping(value = "/login", method = RequestMethod.GET)
	public String loginGet(Model model, HttpSession session,
			HttpServletRequest request) {

		if (session.getAttribute("loginButton") == null)
			model.addAttribute("Authorization", "true");
		else
			model.addAttribute("Authorization", "false");

		LoginDTOForm loginDTOForm = new LoginDTOForm();
		model.addAttribute(loginDTOForm);
		return "login";
	}

	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public String loginPost(Model model, HttpSession session,
			@Valid LoginDTOForm loginDTOForm, BindingResult result,
			HttpServletRequest request) {

		session.setAttribute("loginButton", "loginButton");

		if (result.hasErrors()) {

			model.addAttribute("Authorization", "true");
			return "login";
		} else {

			if (userService.checkAuthorizationOfUser(loginDTOForm).size() != 0) {
				session.setAttribute("name", loginDTOForm.getLoginField());
				session.setAttribute("eMail", ((User) userService
						.checkAuthorizationOfUser(loginDTOForm).get(0)).geteMail());
				 
				return "redirect:/courses";
			} else {
				model.addAttribute("Authorization", "false");
				return "login";
			}

		}
	}
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992122
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот так:

@Transactional
public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {
List<User> userList = userDAO.checkAuthorizationOfUser(userV);
return userList;
}

и в @Service

@Autowired
private UserDAO userDAO;
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992126
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenaа вот так:

@Transactional
public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {
List<User> userList = userDAO.checkAuthorizationOfUser(userV);
return userList;
}

и в @Service

@Autowired
private UserDAO userDAO;
В DAO классе userDAO откуда берется?

public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {
List<User> userList = userDAO.checkAuthorizationOfUser(userV);
return userList;
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992128
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldenhawk, в сервис DAO инжектится.
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992129
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenagoldenhawk, в сервис DAO инжектится.

Не понял как это сделать
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992133
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По аналогии с контроллером: @Autowired

Я уже написала:

yelenaа вот так:

@Transactional
public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {
List<User> userList = userDAO.checkAuthorizationOfUser(userV);
return userList;
}

и в @Service

@Autowired
private UserDAO userDAO;

в @Service

@Autowired
private UserDAO userDAO;

и потом там же обращаемся к DAO:

@Transactional
public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {
List<User> userList = userDAO.checkAuthorizationOfUser(userV);
return userList;
}
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992135
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenaПо аналогии с контроллером: @Autowired

Я уже написала:

yelenaа вот так:

@Transactional
public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {
List<User> userList = userDAO.checkAuthorizationOfUser(userV);
return userList;
}

и в @Service

@Autowired
private UserDAO userDAO;

в @Service

@Autowired
private UserDAO userDAO;

и потом там же обращаемся к DAO:

@Transactional
public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {
List<User> userList = userDAO.checkAuthorizationOfUser(userV);
return userList;
}

Так у меня вроде так и сделано

Код: 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.
package com.epam.edu.jtc.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.epam.edu.jtc.entity.Course;
import com.epam.edu.jtc.entity.User;
import com.epam.edu.jtc.dao.UserDAO;
import com.epam.edu.jtc.dao.UserDAOImpl;
import com.epam.edu.jtc.dto.LoginDTOForm;

@Service
public class UserServiceImpl implements UserService {
	@Autowired
	private UserDAO userDAOImpl;

	@Transactional 
	public User findUserByName(String name) {
		
		User user = userDAOImpl.findUserByName(name);
		
		return user;
	}
	
	@Transactional 
	public List<User> checkAuthorizationOfUser(LoginDTOForm userV) {

		List<User> userList = userDAOImpl.checkAuthorizationOfUser(userV);
		
		return userList;
	}
	@Transactional 
	public List<User> getAllUsers() {
	
		List<User> allusers = userDAOImpl.getAllUsers();
		
		return allusers;
	}
	@Transactional 
	public User getKnowledgeManager() {
		
		User knowledgeManager = userDAOImpl.getKnowledgeManager();
		
		return knowledgeManager;
	}
	@Transactional 
	public User getDepartmentManager() {
	
		User departmentManager = userDAOImpl.getDepartmentManager();
		 
		return departmentManager;
	}

}
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38992142
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldenhawk, <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38993017
goldenhawk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelenagoldenhawk, <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

так тоже не помогло

org.hibernate.HibernateException: createQuery is not valid without active transaction

этих dependency не было у меня , сейчас добавил но ничего не изменилось.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.9.RELEASE</version>
        </dependency>
 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.0.9.RELEASE</version>
        </dependency>



Все равно ексепшн org.hibernate.HibernateException: createQuery is not valid without active transaction
...
Рейтинг: 0 / 0
Транзакции в DAO и Service
    #38993029
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А полный трейс есть, из которого этот кусочек "org.hibernate.HibernateException: createQuery is not valid without active transaction" ?
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Транзакции в DAO и Service
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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