#java #spring-mvc #hibernate-mapping #spring-annotations #dhtmlx
#java #spring-mvc #спящий режим-отображение #spring-аннотации #dhtmlx
Вопрос:
Я работаю над проектом, в котором мне нужно добавить календарь событий. Для этого я выбрал DHTMLX javaplanner. вот что я сделал:
КЛАСС КОНФИГУРАЦИИ HIRBERNATE:
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.XXX" })
@PropertySource(value = { "classpath:app.properties" })
public class HibernateConfig {
@Autowired
private Environment environment;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { "com.XXX.domain" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
return dataSource;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
return properties;
}
@Bean
// @Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(s);
return txManager;
}
}
КОНТРОЛЛЕР СОБЫТИЙ:
package com.XXX.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import com.dhtmlx.planner.DHXEv;
import com.dhtmlx.planner.DHXEventsManager;
import com.dhtmlx.planner.DHXStatus;
import com.XXX.domain.Event;
public class EventController extends DHXEventsManager {
private SessionFactory sessionFactory;
public EventController(HttpServletRequest request) {
super(request);
}
@SuppressWarnings("unchecked")
public Iterable<DHXEv> getEvents() {
Session session = sessionFactory.getCurrentSession();
List<DHXEv> evs = new ArrayList<DHXEv>();
try {
// session = HibernateUtil.getSessionFactory().openSession();
evs = session.createCriteria(Event.class).list();
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
session.flush();
session.close();
}
return evs;
}
@Override
public DHXStatus saveEvent(DHXEv event, DHXStatus status) {
Session session = sessionFactory.getCurrentSession();
try {
// session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
if (status == DHXStatus.UPDATE)
session.update(event);
else if (status == DHXStatus.DELETE)
session.delete(event);
else if (status == DHXStatus.INSERT)
session.save(event);
session.getTransaction().commit();
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
session.flush();
session.close();
}
return status;
}
@Override
public DHXEv createEvent(String id, DHXStatus status) {
return new Event();
}
}
Мой КЛАСС СОБЫТИЙ:
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import com.dhtmlx.planner.DHXEvent;
@Entity
@Table(name = "EVENTS")
public class Event extends DHXEvent{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
@Column(name = "event_name", nullable = false)
private String text;
@NotNull
@Column(name = "start_date", nullable = false)
private LocalDateTime start_date;
@NotNull
@Column(name = "end_date", nullable = false)
private LocalDateTime end_date;
...
}
Когда я запускаю приложение на сервере TOMCAT в eclipse, я получил следующую ошибку:
ct 06, 2016 4:05:32 PM org.springframework.web.context.support.AnnotationConfigWebApplicationContext refresh
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XXXConfig': Injection of autowired dependencies failed; ... nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/XXX/config/HibernateConfig.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: com/dhtmlx/planner/DHXEvent
Oct 06, 2016 4:05:32 PM org.springframework.web.context.ContextLoader
initWebApplicationContext
SEVERE: Context initialization failed
...
Я уже добавил javaplanner.jar в источниках ресурсов и в пути сборки, но он по-прежнему не работает.
Кто-нибудь может помочь с этой проблемой?
ОТРЕДАКТИРОВАНО:
Насколько я понимаю из примера, который я видел, мне нужно преобразовать это:
<mapping class="com.dhtmlx.javaplanner" file="" jar="" package="hibernate.cfg.xml" resource="Event.hbm.xml" />
из hibernate.hbm.xml к чему-то еще в моем классе конфигурации гибернации. любые мысли или помощь будут более чем оценены.
Комментарии:
1.
java.lang.NoClassDefFoundError: com/dhtmlx/planner/DHXEvent
: Вы неправильно упаковали свои зависимости.2. Не могли бы вы объяснить более подробно, пожалуйста?