diff --git a/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/AsyncEJB.java b/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/AsyncEJB.java index 20800e4e..bd92cfa4 100644 --- a/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/AsyncEJB.java +++ b/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/AsyncEJB.java @@ -3,16 +3,16 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.concurrent.Future; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.ejb.AsyncResult; import javax.ejb.Asynchronous; -import javax.ejb.Stateless; import javax.ejb.LocalBean; +import javax.ejb.Stateless; +import java.util.concurrent.Future; @Stateless -@LocalBean +@LocalBean // см файл info public class AsyncEJB { private static final Logger log = LoggerFactory.getLogger(AsyncEJB.class); @@ -41,5 +41,5 @@ public Future sayHello() { return new AsyncResult("përshëndetje"); } - + } diff --git a/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/AsyncServlet.java b/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/AsyncServlet.java index 3b627fd1..15892e95 100644 --- a/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/AsyncServlet.java +++ b/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/AsyncServlet.java @@ -24,7 +24,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t PrintWriter out = response.getWriter(); try { if (answer == null) { - answer = bean.sayHello(); + answer = bean.sayHello(); // СРАЗУ возвращается Future } out.println(""); out.println(""); diff --git a/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/info b/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/info new file mode 100644 index 00000000..f799a9cc --- /dev/null +++ b/EJB/async-ejb-war/src/main/java/edu/javacourse/ejb/info @@ -0,0 +1,7 @@ + java:global/async-ejb-war/AsyncEJB!edu.javacourse.ejb.AsyncEJB + java:app/async-ejb-war/AsyncEJB!edu.javacourse.ejb.AsyncEJB + java:module/AsyncEJB!edu.javacourse.ejb.AsyncEJB + + java:global/async-ejb-war/AsyncEJB + java:app/async-ejb-war/AsyncEJB + java:module/AsyncEJB \ No newline at end of file diff --git a/EJB/jms/jms-ear/pom.xml b/EJB/jms/jms-ear/pom.xml index a96ac7e3..c3346d44 100644 --- a/EJB/jms/jms-ear/pom.xml +++ b/EJB/jms/jms-ear/pom.xml @@ -27,7 +27,7 @@ edu.javacourse.ejb.jms - jms-war + jms-war11111111111 1.0-SNAPSHOT war diff --git a/EJB/jms/jms-ejb/pom.xml b/EJB/jms/jms-ejb/pom.xml index 2e4272a5..3910bd96 100644 --- a/EJB/jms/jms-ejb/pom.xml +++ b/EJB/jms/jms-ejb/pom.xml @@ -23,12 +23,19 @@ javax javaee-api + 7.0 org.slf4j slf4j-api provided + + org.jboss.spec.javax.jms + jboss-jms-api_2.0_spec + 1.0.0.Final + compile + \ No newline at end of file diff --git a/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/MessageReceiverBean1.java b/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/MessageReceiverBean1.java index 6f7179e5..f0df7e30 100644 --- a/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/MessageReceiverBean1.java +++ b/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/MessageReceiverBean1.java @@ -3,15 +3,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Calendar; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.ejb.MessageDrivenContext; -import javax.interceptor.AroundInvoke; -import javax.interceptor.InvocationContext; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; diff --git a/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/MyMdb.java b/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/MyMdb.java new file mode 100644 index 00000000..48d7756d --- /dev/null +++ b/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/MyMdb.java @@ -0,0 +1,31 @@ +package edu.javacourse.jms; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ejb.ActivationConfigProperty; +import javax.ejb.MessageDriven; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; + +@MessageDriven(name = "MyMdb", activationConfig = { + @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), + @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/myQueue") +}) +public class MyMdb implements MessageListener { + private static final Logger log = LoggerFactory.getLogger(MyMdb.class); + + @Override + public void onMessage(Message message) { + TextMessage textMessage = (TextMessage) message; + + try { + log.info("Message: {}", textMessage.getText()); + } catch (JMSException e) { + e.printStackTrace(); + } + } + +} diff --git a/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/SessionSenderBean.java b/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/SessionSenderBean.java new file mode 100644 index 00000000..914f9238 --- /dev/null +++ b/EJB/jms/jms-ejb/src/main/java/edu/javacourse/jms/SessionSenderBean.java @@ -0,0 +1,78 @@ +package edu.javacourse.jms; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Resource; +import javax.ejb.LocalBean; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.jms.*; + +@LocalBean +@Stateless(name = "SessionSenderEJB") +public class SessionSenderBean { + public SessionSenderBean() { + } + + private Logger log = LoggerFactory.getLogger(SessionSenderBean.class); + +// @Resource(mappedName = "java:/ConnectionFactory") +// private ConnectionFactory connectionFactory; + + @Inject +// @JMSConnectionFactory("java:/ConnectionFactory") // default value + JMSContext jmsContext; + + @Resource(mappedName = "java:/queue/test") + private Queue queue; + + @Resource(mappedName = "java:/topic/test") + private Topic topic; + + public void sendMessageToQueue() { + try { +// Connection connection = connectionFactory.createConnection(); +// Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); +// MessageProducer messageProducer = session.createProducer(queue); + assert jmsContext != null; + JMSProducer messageProducer = jmsContext.createProducer(); + TextMessage message = jmsContext.createTextMessage(); + for (int i = 0; i < 20; i++) { + message.setText("To queue message " + (i + 1) + ". " + System.currentTimeMillis()); + log.debug("Sending queue message: " + message.getText()); + log.warn(jmsContext.getClass().getName()); + messageProducer.send(queue, message); + log.debug("queue message sent"); + } +// messageProducer.close(); +// session.close(); +// connection.close(); + } catch (JMSException ex) { + ex.printStackTrace(); + log.debug(ex.getMessage()); + } + } + + public void sendMessageToTopic() { +// try { +// Connection connection = connectionFactory.createConnection(); +// Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); +// eProducer messageProducer = session.createProducer(topic); +// TextMessage message = session.createTextMessage(); + for (int i = 0; i < 10; i++) { + String message = "Topic message " + (i + 1) + ". " + System.currentTimeMillis(); + log.debug("Sending Topic message: " + message); + jmsContext.createProducer().send(queue, message); + log.debug("Topic message sent"); + } +// messageProducer.close(); +// session.close(); +// connection.close(); +// } catch (JMSException ex) { +// ex.printStackTrace(); +// log.debug(ex.getMessage()); +// } + } + +} diff --git a/EJB/jms/jms-war/pom.xml b/EJB/jms/jms-war/pom.xml index 2eb67723..49ec55dd 100644 --- a/EJB/jms/jms-war/pom.xml +++ b/EJB/jms/jms-war/pom.xml @@ -13,7 +13,7 @@ edu.javacourse.ejb.jms - jms-war + jms-war11111111111 1.0-SNAPSHOT war @@ -23,6 +23,7 @@ javax javaee-api + 7.0 @@ -30,6 +31,12 @@ slf4j-api provided + + edu.javacourse.ejb.jms + jms-ejb + 1.0-SNAPSHOT + + diff --git a/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/Client.java b/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/Client.java new file mode 100644 index 00000000..d48d4ace --- /dev/null +++ b/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/Client.java @@ -0,0 +1,37 @@ +package edu.javacourse.ejb; + +import edu.javacourse.jms.SessionSenderBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +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; +import java.io.IOException; + +@WebServlet(name = "ResendServlet", urlPatterns = "/resendServlet") +public class Client extends HttpServlet { + private Logger log = LoggerFactory.getLogger(Client.class); + + @EJB + SessionSenderBean senderBean; + + @Override + protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException { + log.debug("Servlet started!"); + + final String destination = request.getParameter("dest"); + if ("queue".equals(destination)){ + senderBean.sendMessageToQueue(); + } else if ("topic".equals(destination)) { + senderBean.sendMessageToTopic(); + } else { + resp.getWriter().write("'dest' parameter need to be provided. queue/topic"); + } + + log.debug("Servlet finished!"); + } +} diff --git a/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/JMSClient.java b/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/JMSClient.java index 4593edb0..1f7fd969 100644 --- a/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/JMSClient.java +++ b/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/JMSClient.java @@ -4,6 +4,7 @@ import org.slf4j.LoggerFactory; import javax.annotation.Resource; +import javax.inject.Inject; import javax.jms.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -21,8 +22,12 @@ public class JMSClient extends HttpServlet { private Logger log = LoggerFactory.getLogger(JMSClient.class); - @Resource(mappedName = "java:/ConnectionFactory") - private ConnectionFactory connectionFactory; +// @Resource(mappedName = "java:/ConnectionFactory") +// private ConnectionFactory connectionFactory; + + @Inject +// @JMSConnectionFactory("java:/ConnectionFactory") // default value + JMSContext jmsContext; @Resource(mappedName = "java:/queue/test") private Queue queue; @@ -48,19 +53,22 @@ protected void service(HttpServletRequest request, HttpServletResponse response) public void sendMessageToQueue() { try { - Connection connection = connectionFactory.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer messageProducer = session.createProducer(queue); - TextMessage message = session.createTextMessage(); +// Connection connection = connectionFactory.createConnection(); +// Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); +// MessageProducer messageProducer = session.createProducer(queue); + assert jmsContext != null; + JMSProducer messageProducer = jmsContext.createProducer(); + TextMessage message = jmsContext.createTextMessage(); for (int i = 0; i < 20; i++) { - message.setText("This is message " + (i + 1) + ". " + System.currentTimeMillis()); - log.debug("Sending message: " + message.getText()); - messageProducer.send(message); - log.debug("message sent"); + message.setText("To queue message " + (i + 1) + ". " + System.currentTimeMillis()); + log.debug("Sending queue message: " + message.getText()); + log.warn(jmsContext.getClass().getName()); + messageProducer.send(queue, message); + log.debug("queue message sent"); } - messageProducer.close(); - session.close(); - connection.close(); +// messageProducer.close(); +// session.close(); +// connection.close(); } catch (JMSException ex) { ex.printStackTrace(); log.debug(ex.getMessage()); @@ -68,23 +76,23 @@ public void sendMessageToQueue() { } public void sendMessageToTopic() { - try { - Connection connection = connectionFactory.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer messageProducer = session.createProducer(topic); - TextMessage message = session.createTextMessage(); +// try { +// Connection connection = connectionFactory.createConnection(); +// Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); +// eProducer messageProducer = session.createProducer(topic); +// TextMessage message = session.createTextMessage(); for (int i = 0; i < 10; i++) { - message.setText("This is message " + (i + 1) + ". " + System.currentTimeMillis()); - log.debug("Sending message: " + message.getText()); - messageProducer.send(message); - log.debug("message sent"); + String message = "Topic message " + (i + 1) + ". " + System.currentTimeMillis(); + log.debug("Sending Topic message: " + message); + jmsContext.createProducer().send(queue, message); + log.debug("Topic message sent"); } - messageProducer.close(); - session.close(); - connection.close(); - } catch (JMSException ex) { - ex.printStackTrace(); - log.debug(ex.getMessage()); - } +// messageProducer.close(); +// session.close(); +// connection.close(); +// } catch (JMSException ex) { +// ex.printStackTrace(); +// log.debug(ex.getMessage()); +// } } } diff --git a/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/MyJmsClient.java b/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/MyJmsClient.java new file mode 100644 index 00000000..69830f0a --- /dev/null +++ b/EJB/jms/jms-war/src/main/java/edu/javacourse/ejb/MyJmsClient.java @@ -0,0 +1,52 @@ +package edu.javacourse.ejb; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Resource; +import javax.jms.*; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "MyJmsClient", urlPatterns = "/myJmsClient") +public class MyJmsClient extends HttpServlet { + private static final Logger log = LoggerFactory.getLogger(MyJmsClient.class); + + @Resource(mappedName = "java:/ConnectionFactory") + private ConnectionFactory connectionFactory; + + @Resource(mappedName = "java:/queue/myQueue") + private Destination queue; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + sendMessageToQueue(); + } + + public void sendMessageToQueue() { + try { + Connection connection = connectionFactory.createConnection(); + // в пределах одной сессии гарантируется порядок + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + MessageProducer messageProducer = session.createProducer(queue); + TextMessage message = session.createTextMessage(); + for (int i = 0; i < 20; i++) { + message.setText("This is message " + (i + 1) + ". " + System.currentTimeMillis()); + log.debug("Sending message: " + message.getText()); + messageProducer.send(message); + log.debug("Message sent"); + } + messageProducer.close(); + session.close(); + connection.close(); + } catch (JMSException ex) { + ex.printStackTrace(); + log.debug(ex.getMessage()); + } + } + +} diff --git a/EJB/stateless-ejb-local-remote/lib/src/main/java/edu/javacourse/info b/EJB/stateless-ejb-local-remote/lib/src/main/java/edu/javacourse/info new file mode 100644 index 00000000..768f5319 --- /dev/null +++ b/EJB/stateless-ejb-local-remote/lib/src/main/java/edu/javacourse/info @@ -0,0 +1,14 @@ +JNDI bindings for session bean named 'BookEJB' +in deployment unit 'deployment "war-ejb.war"' are as follows: + + java:global/war-ejb/BookEJB!edu.javacourse.BookEJBRemote + java:app/war-ejb/BookEJB!edu.javacourse.BookEJBRemote + java:module/BookEJB!edu.javacourse.BookEJBRemote + java:jboss/exported/war-ejb/BookEJB!edu.javacourse.BookEJBRemote + + java:global/war-ejb/BookEJB!edu.javacourse.BookEJBLocal доступ из вне приложения + java:app/war-ejb/BookEJB!edu.javacourse.BookEJBLocal между модулями, т.е. внутри приложения + java:module/BookEJB!edu.javacourse.BookEJBLocal внутри одного модуля, т.е. варника + + В случае с представлением без интерфейса + именем может быть полностью уточненное имя класса EJB-компонента. \ No newline at end of file diff --git a/Hibernate/part1/hibernate-config-xml-mapping-annotations/pom.xml b/Hibernate/part1/hibernate-config-xml-mapping-annotations/pom.xml index a1d89eda..a0459f24 100644 --- a/Hibernate/part1/hibernate-config-xml-mapping-annotations/pom.xml +++ b/Hibernate/part1/hibernate-config-xml-mapping-annotations/pom.xml @@ -29,10 +29,16 @@ log4j log4j - - org.postgresql - postgresql - + + org.postgresql + postgresql + 9.4.1208.jre7 + + + com.google.code.gson + gson + + diff --git a/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/java/edu/javacourse/hibernate/HibernateConfigXMLMappingAnnotations.java b/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/java/edu/javacourse/hibernate/HibernateConfigXMLMappingAnnotations.java index e61fb2d0..23484cda 100644 --- a/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/java/edu/javacourse/hibernate/HibernateConfigXMLMappingAnnotations.java +++ b/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/java/edu/javacourse/hibernate/HibernateConfigXMLMappingAnnotations.java @@ -1,15 +1,17 @@ package edu.javacourse.hibernate; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; +import org.hibernate.criterion.Order; import org.hibernate.service.ServiceRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; - /** * Простой пример для конфигурации в виде XML * @@ -17,6 +19,8 @@ */ public class HibernateConfigXMLMappingAnnotations { + private static final Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create(); + private static final Logger log = LoggerFactory.getLogger(HibernateConfigXMLMappingAnnotations.class); private static SessionFactory sessionFactory; @@ -31,6 +35,8 @@ private static void init() { private static void destroy() { StandardServiceRegistryBuilder.destroy(serviceRegistry); + // hibernate завершает свои потоки + // чтобы завершился main } public static void main(String[] args) { @@ -38,13 +44,39 @@ public static void main(String[] args) { Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); +// сохранить в сессию + s.save(new Region("Am")); + +// (region_name) - название колонки, +// айдишник не знаем, поэтому не вставляем +// [SqlStatementLogger] - insert into public.jc_region (region_name) values (?) +// [BasicBinder] - binding parameter [1] as [VARCHAR] - [Krasnoe Selo Sat May 14 14:04:51 SAMT 2016] + + + +// List regionList = s.createQuery("from Region").list(); +// for (Region r : regionList) { +// System.out.println(r); +// } + + + // сразу обращается в базу и если вбазе нет, то кидает исключение +// final Object load = s.load(Region.class, 11L); // кинет эксепшн +// final Object o = s.get(Region.class, 11L); // вернёт налл +// region0_ алиас таблицы + + // AS задаёт новый заголовок у столбца результирующей таблицы, алиас +// -select region0_.region_id as region_i1_0_, region0_.region_name as region_n2_0_ from public.jc_region region0_ +// -extracted value([region_i1_0_]:[BIGINT])-[1] +// -extracted value([region_n2_0_]:[VARCHAR])-[Krasnoe Selo Sat May 14 14:04:51 SAMT 2016] +// + +// фильтрация + final Criteria criteria = s.createCriteria(Region.class); + criteria.addOrder(Order.asc("regionName")); + log.info(gson.toJson(criteria.list())); - s.save(new Region("Krasnoe Selo " + System.nanoTime())); - List regionList = s.createQuery("from Region").list(); - for (Region r : regionList) { - System.out.println(r); - } s.getTransaction().commit(); diff --git a/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/java/edu/javacourse/hibernate/Region.java b/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/java/edu/javacourse/hibernate/Region.java index 5a016661..e8d5d503 100644 --- a/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/java/edu/javacourse/hibernate/Region.java +++ b/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/java/edu/javacourse/hibernate/Region.java @@ -1,11 +1,11 @@ package edu.javacourse.hibernate; import javax.persistence.*; -import java.io.Serializable; +// javax.persistence @Entity @Table(name = "jc_region") -public class Region implements Serializable { +public class Region { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/resources/hibernate.cfg.xml b/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/resources/hibernate.cfg.xml index 0015ba32..e710bb51 100644 --- a/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/resources/hibernate.cfg.xml +++ b/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/resources/hibernate.cfg.xml @@ -8,13 +8,23 @@ org.postgresql.Driver jdbc:postgresql://127.0.0.1:5432/javacourse postgres - postgres - region + root + public + 1 + org.hibernate.dialect.PostgreSQL9Dialect + + + thread + update + diff --git a/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/resources/log4j.xml b/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/resources/log4j.xml index 303747e5..bca7b37f 100644 --- a/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/resources/log4j.xml +++ b/Hibernate/part1/hibernate-config-xml-mapping-annotations/src/main/resources/log4j.xml @@ -16,12 +16,12 @@ - + - + diff --git a/Hibernate/part1/hibernate-crud/pom.xml b/Hibernate/part1/hibernate-crud/pom.xml index 25972fab..8ae7a52c 100644 --- a/Hibernate/part1/hibernate-crud/pom.xml +++ b/Hibernate/part1/hibernate-crud/pom.xml @@ -51,6 +51,10 @@ log4j log4j + + com.google.code.gson + gson + diff --git a/Hibernate/part1/hibernate-crud/src/main/java/edu/javacourse/hibernate/HibernateCRUD.java b/Hibernate/part1/hibernate-crud/src/main/java/edu/javacourse/hibernate/HibernateCRUD.java index 82b9f789..24ce5d23 100644 --- a/Hibernate/part1/hibernate-crud/src/main/java/edu/javacourse/hibernate/HibernateCRUD.java +++ b/Hibernate/part1/hibernate-crud/src/main/java/edu/javacourse/hibernate/HibernateCRUD.java @@ -1,5 +1,7 @@ package edu.javacourse.hibernate; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; @@ -16,10 +18,14 @@ */ public class HibernateCRUD { + private static final Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create(); + private static final Logger log = LoggerFactory.getLogger(HibernateCRUD.class); private static SessionFactory sessionFactory; private static ServiceRegistry serviceRegistry; + private static Serializable firstCityId; + private static Serializable secondCityId; private static void init() { Configuration configuration = new Configuration(); @@ -78,7 +84,11 @@ private static void load() { session.getTransaction().commit(); } +/*Based on the above explanations we have following differences between get() vs load(): +get() loads the data as soon as it’s called whereas load() returns a proxy object and loads data only when it’s actually required, so load() is better because it support lazy loading. +Since load() throws exception when data is not found, we should use it only when we know data exists. +We should use get() when we want to make sure data exists in the database.*/ private static void getVsLoad() { log.info("==============GET_VS_LOAD================="); Session session = sessionFactory.getCurrentSession(); @@ -87,27 +97,34 @@ private static void getVsLoad() { City city1 = new City(); city1.setCityName("Surgut"); city1.setRegion(region); - session.save(city1); - - region = (Region) session.load(Region.class, id); + firstCityId = session.save(city1); // выполнился инсерт +// insert into public.jc_city(city_name, region_id) values( ?,?) + region = (Region) session.load(Region.class, id); // select не выполнился City city2 = new City(); city2.setCityName("Nizhnevartovsk"); city2.setRegion(region); - id = session.save(city2); + secondCityId = session.save(city2); // выполнился инсерт +// insert into public.jc_city(city_name, region_id) values( ?,?) + region = (Region) session.get(Region.class, id); // select не выполнился - session.getTransaction().commit(); + session.getTransaction().commit(); // отобразились изменения в базе } private static void update() { log.info("==============UPDATE================="); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); - City city = (City) session.load(City.class, id); + // load — будет прокси-тип, get — просто City + City city = (City) session.get(City.class, firstCityId); // здесь будет прокси-тип city.setCityName("nefteugansk"); - session.saveOrUpdate(city); + session.saveOrUpdate(city); // insert не выполнгился log.info("city = {}", city); - session.getTransaction().commit(); + session.getTransaction().commit();// выполнился update +// update public.jc_city set city_name=?, region_id=? where city_id=? +// binding parameter[ 1]as[VARCHAR] -[nefteugansk] +// binding parameter[ 2]as[BIGINT] -[32] +// binding parameter[ 3]as[INTEGER] -[41] } @@ -116,10 +133,11 @@ private static void delete() { Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); City city = (City) session.load(City.class, id); - session.delete(city); - session.getTransaction().commit(); - } + City city2 = (City) session.load(City.class, secondCityId); + session.delete(city2); + session.getTransaction().commit(); // выполнились оба делита + } } diff --git a/Hibernate/part1/hibernate-crud/src/main/resources/hibernate.cfg.xml b/Hibernate/part1/hibernate-crud/src/main/resources/hibernate.cfg.xml index cdc6f39e..6b6340f4 100644 --- a/Hibernate/part1/hibernate-crud/src/main/resources/hibernate.cfg.xml +++ b/Hibernate/part1/hibernate-crud/src/main/resources/hibernate.cfg.xml @@ -9,8 +9,8 @@ org.postgresql.Driver jdbc:postgresql://127.0.0.1:5432/javacourse postgres - postgres - region + root + public 1 org.hibernate.dialect.PostgreSQL9Dialect thread diff --git a/Hibernate/part1/hibernate-many-to-many/src/main/java/edu/javacourse/hibernate/HibernateManyToMany.java b/Hibernate/part1/hibernate-many-to-many/src/main/java/edu/javacourse/hibernate/HibernateManyToMany.java index 2fb82849..a145926c 100644 --- a/Hibernate/part1/hibernate-many-to-many/src/main/java/edu/javacourse/hibernate/HibernateManyToMany.java +++ b/Hibernate/part1/hibernate-many-to-many/src/main/java/edu/javacourse/hibernate/HibernateManyToMany.java @@ -1,6 +1,7 @@ package edu.javacourse.hibernate; import org.hibernate.HibernateException; +import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; @@ -38,10 +39,13 @@ public static void main(String[] args) { init(); Session s = sessionFactory.getCurrentSession(); + clearAllTables(s); + s = sessionFactory.getCurrentSession(); + s.beginTransaction(); Author oldAuthor = new Author(); - oldAuthor.setAuthorName("New Author 0"); + oldAuthor.setAuthorName("oldAuthor"); s.save(oldAuthor); saveBook(oldAuthor, s); @@ -51,7 +55,7 @@ public static void main(String[] args) { log.debug(""); log.debug("Book: {}", book); for (Author author : book.getAuthorList()) { - log.debug("Author: {}", author); + log.debug("Author: {}", author); // у автора список книг пуст } } @@ -63,7 +67,9 @@ public static void main(String[] args) { // Если не закрыть - то вылетает ошибка s.getTransaction().commit(); - +// выполнилось четыре инсерта в общую таблицу +// insert into public.jc_book_author(book_id, author_id) values( ?,?) +// - создавалось две книги по два автора s = sessionFactory.getCurrentSession(); s.beginTransaction(); @@ -72,7 +78,7 @@ public static void main(String[] args) { log.debug(""); log.debug("Book: {}", book); for (Author author : book.getAuthorList()) { - log.debug("Author: {}", author); + log.debug("Author: {}", author); // теперь у авторов видны списки книг } } @@ -83,16 +89,33 @@ public static void main(String[] args) { destroy(); } + private static void clearAllTables(Session s) { + s.beginTransaction(); + + // delete from public.jc_book_author where (book_id) in(select book_id from public.jc_book) +// delete from public.jc_book + String hql = "delete from Book "; + Query query = s.createQuery(hql); + query.executeUpdate(); + +// delete from public.jc_book_author where (author_id) in(select author_id from public.jc_author) +// delete from public.jc_author + String hqll = "delete from Author "; + Query deleteAuthor = s.createQuery(hqll); + deleteAuthor.executeUpdate(); + s.getTransaction().commit(); + } + private static void saveBook(Author oldAuthor, Session s) throws HibernateException { Book newBook = new Book(); - newBook.setBookName("New book 1"); + newBook.setBookName("Java"); // Вариант добавления новой книги и существуюего автора newBook.addAuthor(oldAuthor); // Вариант добавления нового автора к новой книге Author newAuthor = new Author(); - newAuthor.setAuthorName("New Author 1"); + newAuthor.setAuthorName("Bloch"); // Нет надобности добавлять книгу к автору // Если связь однонаправленная - то не проблема. Иначе будет забавный эффект //newAuthor.addBook(newBook); diff --git a/Hibernate/part1/hibernate-many-to-many/src/main/java/edu/javacourse/hibernate/HibernateManyToManySimple.java b/Hibernate/part1/hibernate-many-to-many/src/main/java/edu/javacourse/hibernate/HibernateManyToManySimple.java new file mode 100644 index 00000000..28f7a208 --- /dev/null +++ b/Hibernate/part1/hibernate-many-to-many/src/main/java/edu/javacourse/hibernate/HibernateManyToManySimple.java @@ -0,0 +1,83 @@ +package edu.javacourse.hibernate; + +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.cfg.Configuration; +import org.hibernate.service.ServiceRegistry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +/** + * Простой пример для демонстрации иерархии + * + * @author ASaburov + */ +public class HibernateManyToManySimple { + + private static final Logger log = LoggerFactory.getLogger(HibernateManyToMany.class); + + private static SessionFactory sessionFactory; + private static ServiceRegistry serviceRegistry; + + private static void init() { + Configuration configuration = new Configuration(); + configuration.configure("hibernate.cfg.xml"); + serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); + sessionFactory = configuration.buildSessionFactory(serviceRegistry); + } + + private static void destroy() { + StandardServiceRegistryBuilder.destroy(serviceRegistry); + } + + public static void main(String[] args) { + init(); + + Session s = sessionFactory.getCurrentSession(); + s.beginTransaction(); + +// очис +// delete from public.jc_book_author where (book_id) in(select book_id from public.jc_book) +// delete from public.jc_book + String hql = "delete from Book "; + Query query = s.createQuery(hql); + query.executeUpdate(); + +// delete from public.jc_book_author where (author_id) in(select author_id from public.jc_author) +// delete from public.jc_author + String hqll = "delete from Author "; + Query deleteAuthor = s.createQuery(hqll); + deleteAuthor.executeUpdate(); + + Author bloch = new Author(); + bloch.setAuthorName("Bloch"); + s.save(bloch); + + Book java = new Book(); + java.setBookName("Java"); + java.addAuthor(bloch); + s.save(java); + // Вариант добавления новой книги и существуюего автора +// java.addAuthor(bloch); + + List bookList = s.createCriteria(Book.class).list(); + for (Book book : bookList) { + log.debug(""); + log.debug("Book: {}", book); + for (Author author : book.getAuthorList()) { + log.debug("Author: {}", author); + } + } + + + s.getTransaction().commit(); + + log.debug("Transaction committed"); + + destroy(); + } +} diff --git a/Hibernate/part1/hibernate-many-to-many/src/main/resources/hibernate.cfg.xml b/Hibernate/part1/hibernate-many-to-many/src/main/resources/hibernate.cfg.xml index 206865e1..1982692d 100644 --- a/Hibernate/part1/hibernate-many-to-many/src/main/resources/hibernate.cfg.xml +++ b/Hibernate/part1/hibernate-many-to-many/src/main/resources/hibernate.cfg.xml @@ -8,8 +8,8 @@ org.postgresql.Driver jdbc:postgresql://127.0.0.1:5432/javacourse postgres - postgres - bookstore + root + public 1 org.hibernate.dialect.PostgreSQL9Dialect thread diff --git a/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/City.java b/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/City.java index 17e11b70..09151c92 100644 --- a/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/City.java +++ b/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/City.java @@ -15,6 +15,7 @@ public class City { private Integer cityId; @Column(name = "city_name") private String cityName; + // какие операции будут прокидываться на связанную сущность @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY) // @Fetch(FetchMode.SUBSELECT) @JoinColumn(name = "region_id") diff --git a/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/HibernateManyToOne.java b/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/HibernateManyToOne.java index b8bd9c33..689f4816 100644 --- a/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/HibernateManyToOne.java +++ b/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/HibernateManyToOne.java @@ -40,47 +40,82 @@ public static void main(String[] args) { Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); - Criteria criteria = s.createCriteria(City.class); - List cityList = criteria.list(); - - for (City city : cityList) { - log.debug("city id: {}", city.getCityId()); - log.debug("city name: {}", city.getCityName()); - log.debug("city region id: {}", city.getRegion().getRegionId()); - log.debug("city region name: {}", city.getRegion().getRegionName()); - log.debug(""); - } - +// testLazyInit(s); +// log.debug("===================================================="); List regionList = s.createQuery("from Region").list(); for (Region r : regionList) { log.debug("Region name: {}", r); - for (City c : r.getCityList()) { +// SELECT citylist0_.region_id AS region_i3_1_0_, +// citylist0_.city_id AS city_id1_0_0_, +// citylist0_.city_id AS city_id1_0_1_, +// citylist0_.city_name AS city_nam2_0_1_, +// citylist0_.region_id AS region_i3_0_1_ +// FROM public.jc_city citylist0_ WHERE citylist0_.region_id =? +// ORDER BY citylist0_.city_name + for (City c : r.getCityList()) { // подтягиваем список городов запросом выше log.debug(" City name: {}", c); } - } + } // без всяких прокси, списки связа + + Region spb = new Region("SPb-11"); + // если закомментировать s.save(spb); + // и завершить выплнение мейн, то можно пронаблюдать работу каскад персист + // а именно падение исключения TransientObjectException +// s.save(spb); - Region spb = new Region("SPb"); - s.save(spb); City gatchina = new City(); - gatchina.setCityName("Gatchina"); + gatchina.setCityName("Gatchina-1"); gatchina.setRegion(spb); s.save(gatchina); +// return; + log.debug("===================================================="); - City pushkin = new City(); - pushkin.setCityName("Pushkin"); - pushkin.setRegion(spb); - s.save(pushkin); +// сохранение несуществующего в БД региона зависит от каскада: +//если не будет указано никакого каскада, +// то он не будет создавать регион +// CascadeType.PERSIST — при персисте города создаст регион +// -------------------------------------------------------------- +// CascadeType.MERGE — при мёрдже города обновит регион (если он поменялся) +// CascadeType.REFRESH — при рефреш города обновит регион (если он поменялся) (из бд) +// CascadeType.REMOVE каскадно выполнится и над связанной сущностью s.save(spb); - - s.getTransaction().commit(); - log.debug("Transaction committed"); - + // если s.save(spb); выше закомментирован (60 строчка, то здесь выполнится следующий код) +// регион заапдейтися! +// - insert into public.jc_city (city_name, region_id) values (?, ?) +// - binding parameter [1] as [VARCHAR] - [Gatchina-1] +// - binding parameter [2] as [BIGINT] - [null] +// - ==================================================== +// - insert into public.jc_region (region_name) values (?) +// - binding parameter [1] as [VARCHAR] - [SPb-11] +// - update public.jc_city set city_name=?, region_id=? where city_id=? +// - binding parameter [1] as [VARCHAR] - [Gatchina-1] +// - binding parameter [2] as [BIGINT] - [48]s.getTransaction().commit(); +// - binding parameter [3] as [INTEGER] - [62]log.debug("Transaction committed"); +// - Transaction committed destroy(); } + private static void testLazyInit(Session s) { + Criteria criteria = s.createCriteria(City.class); + List cityList = criteria.list(); // только айдишники регионов, сами регионы не подтянули +//select this_.city_id as city_id1_0_0_, this_.city_name as city_nam2_0_0_, this_.region_id as region_i3_0_0_ from public.jc_city this_ + for (City city : cityList) { + log.debug("city id: {}", city.getCityId()); + log.debug("city name: {}", city.getCityName()); + log.debug("city class: {}", city.getClass().getCanonicalName()); + // выполнение запроса, подставляет айди региона city.getRegion().getRegionId() +// select region0_.region_id as region_i1_1_0_, region0_.region_name as region_n2_1_0_ from public.jc_region region0_ where region0_.region_id=? + // но, если нужен регион, который уже вытаскивался, запроса не будет, этот регион сохранится в кэше + log.debug("city region id: {}", city.getRegion().getRegionId()); + log.debug("city region name: {}", city.getRegion().getRegionName()); + log.debug("city region class: {}", city.getRegion().getClass().getCanonicalName()); + log.debug(""); + } + } + } diff --git a/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/Region.java b/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/Region.java index a6af348b..6eb91f44 100644 --- a/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/Region.java +++ b/Hibernate/part1/hibernate-many-to-one/src/main/java/edu/javacourse/hibernate/Region.java @@ -14,6 +14,7 @@ public class Region implements Serializable { private Long regionId; @Column(name = "region_name", nullable = true) private String regionName; + // здесь регионы не знают о городах // плюс добавлена join-колонка @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "region") @OrderBy(value = "cityName") private List cityList; diff --git a/Hibernate/part1/hibernate-many-to-one/src/main/resources/hibernate.cfg.xml b/Hibernate/part1/hibernate-many-to-one/src/main/resources/hibernate.cfg.xml index e29f603e..8d39d63c 100644 --- a/Hibernate/part1/hibernate-many-to-one/src/main/resources/hibernate.cfg.xml +++ b/Hibernate/part1/hibernate-many-to-one/src/main/resources/hibernate.cfg.xml @@ -8,8 +8,8 @@ org.postgresql.Driver jdbc:postgresql://127.0.0.1:5432/javacourse postgres - postgres - region + root + public 1 org.hibernate.dialect.PostgreSQL9Dialect thread diff --git a/Hibernate/part1/hibernate-many-to-one/src/main/resources/log4j.xml b/Hibernate/part1/hibernate-many-to-one/src/main/resources/log4j.xml index 303747e5..3766a3c9 100644 --- a/Hibernate/part1/hibernate-many-to-one/src/main/resources/log4j.xml +++ b/Hibernate/part1/hibernate-many-to-one/src/main/resources/log4j.xml @@ -6,7 +6,7 @@ - + @@ -23,7 +23,7 @@ - + diff --git a/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/CashPayment.java b/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/CashPayment.java index ca690a3b..864f7e6d 100644 --- a/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/CashPayment.java +++ b/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/CashPayment.java @@ -7,7 +7,7 @@ @Entity @Table(name = "jc_cash_payment") -@PrimaryKeyJoinColumn(name = "PAYMENT_ID") +@PrimaryKeyJoinColumn(name = "PAYMENT_ID") // колонка по которой связываться с родительской сущностью (эта колнка из CashPayment) public class CashPayment extends Payment { @Column(name = "CASH_DESK") diff --git a/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/HibernateInheritanceJoined.java b/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/HibernateInheritanceJoined.java index 16a0b8b3..6b2b5691 100644 --- a/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/HibernateInheritanceJoined.java +++ b/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/HibernateInheritanceJoined.java @@ -43,7 +43,7 @@ public static void main(String[] args) { payment.setAmount(123.12); session.save(payment); - CashPayment cashPayment = new CashPayment(); + CashPayment cashPayment = new CashPayment(); // два инсерта в две таблицы cashPayment.setAmount(423.1); cashPayment.setCashDesk("super cash desk"); session.save(cashPayment); @@ -58,7 +58,7 @@ public static void main(String[] args) { cardPayment.setCardNumber("1234567890"); session.save(cardPayment); - Criteria criteria = session.createCriteria(Payment.class); + Criteria criteria = session.createCriteria(Payment.class); // выберутся все наследники, три джойна List payments = criteria.list(); for (Payment pay: payments) { @@ -67,7 +67,7 @@ public static void main(String[] args) { log.info("========================================="); - criteria = session.createCriteria(CashPayment.class); + criteria = session.createCriteria(CashPayment.class); // делает джой к Payment payments = criteria.list(); for (Payment pay: payments) { diff --git a/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/Payment.java b/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/Payment.java index 6108ce3f..c8a2676d 100644 --- a/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/Payment.java +++ b/Hibernate/part2/hibernate-inheritance-joined/src/main/java/edu/javacourse/hibernate/Payment.java @@ -3,8 +3,9 @@ import javax.persistence.*; @Entity -@Table(name = "jc_payment") +@Table(name = "jc_payment") // таблица существует в бд @Inheritance(strategy = InheritanceType.JOINED) +// указываем, что будет применяться наследование и указываем его тип public class Payment { @Id diff --git a/Hibernate/part2/hibernate-inheritance-single-table/src/main/java/edu/javacourse/hibernate/HibernateInheritanceSingleTable.java b/Hibernate/part2/hibernate-inheritance-single-table/src/main/java/edu/javacourse/hibernate/HibernateInheritanceSingleTable.java index c5102ec3..2141659e 100644 --- a/Hibernate/part2/hibernate-inheritance-single-table/src/main/java/edu/javacourse/hibernate/HibernateInheritanceSingleTable.java +++ b/Hibernate/part2/hibernate-inheritance-single-table/src/main/java/edu/javacourse/hibernate/HibernateInheritanceSingleTable.java @@ -15,6 +15,7 @@ * Author: Georgy Gobozov * Date: 23.06.13 */ +// все данные хранятся в одной таблице, добавляется колонка, с указанием типа payment_type public class HibernateInheritanceSingleTable { private static final Logger log = LoggerFactory.getLogger(HibernateInheritanceSingleTable.class); diff --git a/Hibernate/part2/hibernate-inheritance-table-per-class/src/main/java/edu/javacourse/hibernate/CashPayment.java b/Hibernate/part2/hibernate-inheritance-table-per-class/src/main/java/edu/javacourse/hibernate/CashPayment.java index 0683eb7a..ef33e584 100644 --- a/Hibernate/part2/hibernate-inheritance-table-per-class/src/main/java/edu/javacourse/hibernate/CashPayment.java +++ b/Hibernate/part2/hibernate-inheritance-table-per-class/src/main/java/edu/javacourse/hibernate/CashPayment.java @@ -7,6 +7,7 @@ @AttributeOverrides({ @AttributeOverride(name = "amount", column = @Column(name = "amount")) }) +//в бд у таблицы есть amount, чтобы не делать джойны, соответственно, по одному инсерту public class CashPayment extends Payment { @Column(name = "CASH_DESK") diff --git a/Hibernate/part2/hibernate-inheritance-table-per-class/src/main/java/edu/javacourse/hibernate/HibernateInheritanceTablePerClass.java b/Hibernate/part2/hibernate-inheritance-table-per-class/src/main/java/edu/javacourse/hibernate/HibernateInheritanceTablePerClass.java index 99d2c119..2791a2ab 100644 --- a/Hibernate/part2/hibernate-inheritance-table-per-class/src/main/java/edu/javacourse/hibernate/HibernateInheritanceTablePerClass.java +++ b/Hibernate/part2/hibernate-inheritance-table-per-class/src/main/java/edu/javacourse/hibernate/HibernateInheritanceTablePerClass.java @@ -58,7 +58,7 @@ public static void main(String[] args) { cardPayment.setCardNumber("1234567890"); session.save(cardPayment); - Criteria criteria = session.createCriteria(Payment.class); + Criteria criteria = session.createCriteria(Payment.class); // будет union List payments = criteria.list(); for (Payment pay: payments) { diff --git a/Hibernate/part2/hibernate-second-level-cache/src/main/java/edu/javacourse/hibernate/HibernateSecondLevelCache.java b/Hibernate/part2/hibernate-second-level-cache/src/main/java/edu/javacourse/hibernate/HibernateSecondLevelCache.java index 574e1ddc..8ec14ddf 100644 --- a/Hibernate/part2/hibernate-second-level-cache/src/main/java/edu/javacourse/hibernate/HibernateSecondLevelCache.java +++ b/Hibernate/part2/hibernate-second-level-cache/src/main/java/edu/javacourse/hibernate/HibernateSecondLevelCache.java @@ -40,13 +40,21 @@ public static void main(String[] args) { // Делаем дважды для демонстрации - SELECT вызывается один раз или два // в зависимости от настроек кэша + // ДЛЯ ТЕСТИРОВАНИЯ QUERY CASH ОТКЛЮЧИТЬ SLC +// false checkQuery(sessionFactory); - checkQuery(sessionFactory); + log.info("============================="); + // в query cache сохранились айдишники регионов, кот мы доставали + checkQuery(sessionFactory); // здесь сделает селектов по каждому айдишников (чтобы достать остальные поля) + // ЕСЛИ ВКЛЮЧИТЬ SLC: + // айдишники сохранятся в кэше запросов, а сами объекты - в SLC + // то есть выполнится только один селекст, при первом вызове метода // Делаем дважды для демонстрации - SELECT вызывается один раз или два // в зависимости от настроек кэша - checkOne(sessionFactory); - checkOne(sessionFactory); +// checkOne(sessionFactory); +// checkOne(sessionFactory); // http://stackoverflow.com/questions/4040761/control-the-hibernate-sessionwhen-to-close-it-manually + // селект произойдёт только один, так как отработает кэш второго уровня, так как фэктори одна и та же // Обращение к статистике только при включенном кэше showStatistics(sessionFactory); @@ -64,6 +72,7 @@ private static void checkQuery(SessionFactory sessionFactory) throws HibernateEx // Если включить без кэша - то интересный эффект createQuery.setCacheable(true); List regionList1 = createQuery.list(); +// в кэше запросов сохранится только айдишники регионов for (Region r : regionList1) { log.info("Region: {}", r); } @@ -73,7 +82,9 @@ private static void checkQuery(SessionFactory sessionFactory) throws HibernateEx private static void checkOne(SessionFactory sessionFactory) { Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); - Region r = (Region) session.get(Region.class, 1L); + Region r = (Region) session.get(Region.class, 1L); // помещается в кэш-первого уровня + + log.info("session hash {}", session.hashCode()); log.info("Region: {}", r); session.getTransaction().commit(); } diff --git a/Hibernate/part2/hibernate-second-level-cache/src/main/java/edu/javacourse/hibernate/Region.java b/Hibernate/part2/hibernate-second-level-cache/src/main/java/edu/javacourse/hibernate/Region.java index d732dc7c..61eed80d 100644 --- a/Hibernate/part2/hibernate-second-level-cache/src/main/java/edu/javacourse/hibernate/Region.java +++ b/Hibernate/part2/hibernate-second-level-cache/src/main/java/edu/javacourse/hibernate/Region.java @@ -8,7 +8,13 @@ @Entity // Аннотация необходима для работы кжша. Отключать при отклюении кэша +// region - регион кэширования +//можно устанавливать время жизни +//в зависимости от типа сущности можно выставить настройки +// создаётся файл ehcache, в котором задаются настройки для регионов @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "CacheForRegion") +// будет смотреть изменения в flc, устанвливается блокировка при обновлении +// CacheConcurrencyStrategy.TRANSACTIONAL используется для кластера апп серверов, эхкэш не поддерживает @Table(name = "jc_region") public class Region implements Serializable { diff --git a/Hibernate/part2/hibernate-second-level-cache/src/main/resources/hibernate.cfg.xml b/Hibernate/part2/hibernate-second-level-cache/src/main/resources/hibernate.cfg.xml index 23f9b3f3..ce5d3be3 100644 --- a/Hibernate/part2/hibernate-second-level-cache/src/main/resources/hibernate.cfg.xml +++ b/Hibernate/part2/hibernate-second-level-cache/src/main/resources/hibernate.cfg.xml @@ -4,22 +4,28 @@ "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> - + org.postgresql.Driver jdbc:postgresql://127.0.0.1:5432/javacourse postgres - postgres + root region 1 org.hibernate.dialect.PostgreSQL9Dialect thread update - + + org.hibernate.cache.ehcache.EhCacheRegionFactory true + + + true true + + true diff --git a/Hibernate/part2/hibernate-second-level-cache/src/main/resources/log4j.xml b/Hibernate/part2/hibernate-second-level-cache/src/main/resources/log4j.xml index 303747e5..a6a1a3e5 100644 --- a/Hibernate/part2/hibernate-second-level-cache/src/main/resources/log4j.xml +++ b/Hibernate/part2/hibernate-second-level-cache/src/main/resources/log4j.xml @@ -6,7 +6,7 @@ - + diff --git a/JQuery/JQueryExampleN01/index.html b/JQuery/JQueryExampleN01/index.html index 0c2c1fc6..a05d9c07 100644 --- a/JQuery/JQueryExampleN01/index.html +++ b/JQuery/JQueryExampleN01/index.html @@ -5,11 +5,15 @@ + селектор - это конструкция, которая выбирает по каким-то критериям: по имени класса, по id, по количеству, покачеству + чаще всего выбирают по цсс-классам -
click me to hide
-
click me to hide slowly
-
click me to fadeout
-
click me to fadeout slowly
+
"q1" click me to hide
+
"q2" click me to hide slowly
+
"q3" click me to fadeout
+
"q4" click me to fadeout slowly


diff --git a/JQuery/JQueryExampleN03/index.html b/JQuery/JQueryExampleN03/index.html index d016c27f..128c925f 100644 --- a/JQuery/JQueryExampleN03/index.html +++ b/JQuery/JQueryExampleN03/index.html @@ -17,16 +17,24 @@ .even-aliceblue { background-color: aliceblue; } + + .coral { + background-color: coral; + } + diff --git a/JQuery/JQueryExampleN05/index.html b/JQuery/JQueryExampleN05/index.html index 906ec2f5..056fa26e 100644 --- a/JQuery/JQueryExampleN05/index.html +++ b/JQuery/JQueryExampleN05/index.html @@ -10,37 +10,37 @@ - + + + + Добавлено 0 параграфов
diff --git a/JQuery/JQueryExampleN10/pom.xml b/JQuery/JQueryExampleN10/pom.xml index 28d43dd7..9fb82ef9 100755 --- a/JQuery/JQueryExampleN10/pom.xml +++ b/JQuery/JQueryExampleN10/pom.xml @@ -20,9 +20,13 @@ javax javaee-web-api - 6.0 + 7.0 provided + + + + diff --git a/JQuery/JQueryExampleN10/src/main/webapp/index.jsp b/JQuery/JQueryExampleN10/src/main/webapp/index.jsp index a4ce680e..7cfb4218 100755 --- a/JQuery/JQueryExampleN10/src/main/webapp/index.jsp +++ b/JQuery/JQueryExampleN10/src/main/webapp/index.jsp @@ -9,12 +9,19 @@ diff --git a/JQuery/JQueryExampleN11/pom.xml b/JQuery/JQueryExampleN11/pom.xml index 8d7cd079..531060f5 100755 --- a/JQuery/JQueryExampleN11/pom.xml +++ b/JQuery/JQueryExampleN11/pom.xml @@ -20,7 +20,7 @@ javax javaee-web-api - 6.0 + 7.0 provided diff --git a/JQuery/JQueryExampleN11/src/main/webapp/index.jsp b/JQuery/JQueryExampleN11/src/main/webapp/index.jsp index 0a62488a..5f74eb4d 100755 --- a/JQuery/JQueryExampleN11/src/main/webapp/index.jsp +++ b/JQuery/JQueryExampleN11/src/main/webapp/index.jsp @@ -11,7 +11,7 @@ $('#button').click(function () { $.ajax({ "url": "GetRandom", - "timeout": 2000, + "timeout": 3500, "beforeSend": function () { $('#info').text("Requesting new random value..."); }, diff --git a/Logging/log4j/src/main/java/ru/test/logging/App.java b/Logging/log4j/src/main/java/ru/test/logging/App.java index 7e700286..91a338c3 100644 --- a/Logging/log4j/src/main/java/ru/test/logging/App.java +++ b/Logging/log4j/src/main/java/ru/test/logging/App.java @@ -3,6 +3,7 @@ import org.apache.log4j.Logger; public class App { +// App.class отражение категории private static final Logger log = Logger.getLogger(App.class); public static void main(String[] args) { diff --git a/Logging/log4j/src/main/resources/log4j.xml b/Logging/log4j/src/main/resources/log4j.xml index ab498997..07037e9a 100644 --- a/Logging/log4j/src/main/resources/log4j.xml +++ b/Logging/log4j/src/main/resources/log4j.xml @@ -3,6 +3,7 @@ + @@ -13,6 +14,7 @@ + diff --git a/Logging/slf4j/slf4j-target/pom.xml b/Logging/slf4j/slf4j-target/pom.xml index 49e6309e..08a3a02e 100644 --- a/Logging/slf4j/slf4j-target/pom.xml +++ b/Logging/slf4j/slf4j-target/pom.xml @@ -22,6 +22,9 @@ slf4j-source 1.0-SNAPSHOT + + + org.slf4j slf4j-log4j12 diff --git a/Spring/GS_Spring_17_JUnit/src/test/java/edu/javacourse/spring/test/SimpleTest.java b/Spring/GS_Spring_17_JUnit/src/test/java/edu/javacourse/spring/test/SimpleTest.java index 05c9a4e9..185db6ac 100644 --- a/Spring/GS_Spring_17_JUnit/src/test/java/edu/javacourse/spring/test/SimpleTest.java +++ b/Spring/GS_Spring_17_JUnit/src/test/java/edu/javacourse/spring/test/SimpleTest.java @@ -1,21 +1,24 @@ package edu.javacourse.spring.test; import edu.javacourse.spring.bean.RegionManager; -import junit.framework.TestCase; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import static org.junit.Assert.assertNotNull; + /** - * Author: Georgy Gobozov - * Date: 18.07.13 + * RunWith аннот junit. Вставляется класс, который junit будет использовать + * У спринга есть спец класс, зависимость spring-test */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:springExample.xml"}) -public class SimpleTest extends TestCase { - +public class SimpleTest { + @Autowired + ApplicationContext context; @Autowired RegionManager manager; diff --git a/Spring/GS_Spring_22_Hibernate/pom.xml b/Spring/GS_Spring_22_Hibernate/pom.xml index 7b557232..51a05529 100644 --- a/Spring/GS_Spring_22_Hibernate/pom.xml +++ b/Spring/GS_Spring_22_Hibernate/pom.xml @@ -9,15 +9,32 @@ http://maven.apache.org + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.7 + 1.7 + + + - + + org.springframework + spring-beans + 3.1.4.RELEASE + org.springframework spring-context 3.1.4.RELEASE + org.springframework spring-tx @@ -29,6 +46,7 @@ spring-jdbc 3.1.4.RELEASE + org.springframework spring-orm @@ -41,41 +59,26 @@ 3.6.9.Final - - org.hibernate - hibernate-annotations - 3.5.6-Final - + + + + + - - - javassist - javassist - 3.12.1.GA - + + + org.postgresql + postgresql + 9.4.1208.jre7 + - - mysql - mysql-connector-java - 5.1.18 - + + + + + + - - cglib - cglib - 2.2 - - - - org.aspectj - aspectjlib - 1.6.2 - - - org.aspectj - aspectjweaver - 1.7.3 - log4j log4j diff --git a/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/model/Region.java b/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/model/Region.java index 5206117e..710644fc 100644 --- a/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/model/Region.java +++ b/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/model/Region.java @@ -1 +1 @@ -package edu.javacourse.spring.model; import java.io.Serializable; /** * Author: Georgy Gobozov * Date: 21.07.13 */ @Entity @Table(name = "jc_region") public class Region implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "region_id") private Integer id; @Column(name = "region_name", nullable = false) private String name; public Region(String name) { this.name = name; } public Region() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } \ No newline at end of file +package edu.javacourse.spring.model; import javax.persistence.*; import java.io.Serializable; /** * Author: Georgy Gobozov * Date: 21.07.13 */ @Entity @Table(name = "jc_region") public class Region implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "region_id") private Integer id; @Column(name = "region_name", nullable = false) private String name; public Region(String name) { this.name = name; } public Region() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } \ No newline at end of file diff --git a/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/service/RegionService.java b/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/service/RegionService.java index bb41d852..6352a322 100644 --- a/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/service/RegionService.java +++ b/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/service/RegionService.java @@ -1 +1 @@ -package edu.javacourse.spring.service; import edu.javacourse.spring.model.Region; /** * Author: Georgy Gobozov * Date: 21.07.13 */ public interface RegionService { public Region createRegion(Region region); public void deleteRegion(Region region); public Region getRegionByName(String name); public void readOnly(String name); } \ No newline at end of file +package edu.javacourse.spring.service; import edu.javacourse.spring.model.Region; /** * Author: Georgy Gobozov * Date: 21.07.13 */ public interface RegionService { // интерфейс не обязателен для выполнения примера public Region createRegion(Region region); public void deleteRegion(Region region); public Region getRegionByName(String name); public void readOnly(String name); } \ No newline at end of file diff --git a/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/service/RegionServiceImpl.java b/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/service/RegionServiceImpl.java index fa4716f8..54a7a9a6 100644 --- a/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/service/RegionServiceImpl.java +++ b/Spring/GS_Spring_22_Hibernate/src/main/java/edu/javacourse/spring/service/RegionServiceImpl.java @@ -1 +1 @@ -package edu.javacourse.spring.service; import edu.javacourse.spring.dao.RegionDao; import edu.javacourse.spring.model.Region; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * Author: Georgy Gobozov * Date: 21.07.13 */ @Transactional public class RegionServiceImpl implements RegionService { RegionDao regionDao; public void setRegionDao(RegionDao regionDao) { this.regionDao = regionDao; } @Override @Transactional public Region createRegion(Region region) { int id = regionDao.createRegion(region); System.out.println("Region " + id + " : " + region.getName() + " created..."); return region; } @Override public void deleteRegion(Region region) { regionDao.deleteRegion(region); System.out.println("Region " + region.getName() + " deleted..."); } @Override public Region getRegionByName(String name) { return regionDao.getRegionByName(name); } @Override @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) public void readOnly(String name) { // write operation createRegion(new Region(name)); //read operation regionDao.getRegionByName(name); } } \ No newline at end of file +package edu.javacourse.spring.service; import edu.javacourse.spring.dao.RegionDao; import edu.javacourse.spring.model.Region; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; // уровень БЛ @Transactional // не нужно вручную открывать/и закрывать тр-кцию, ею управляет спринг // то есть мы не вызываем Сессию, то есть не используем конкретную реализацию public class RegionServiceImpl implements RegionService { RegionDao regionDao; public void setRegionDao(RegionDao regionDao) { this.regionDao = regionDao; } @Override @Transactional // все вызовы к дао будут выполняться в одной транзакции public Region createRegion(Region region) { int id = regionDao.createRegion(region); System.out.println("Region " + id + " : " + region.getName() + " created..."); return region; } @Override public void deleteRegion(Region region) { regionDao.deleteRegion(region); System.out.println("Region " + region.getName() + " deleted..."); } @Override public Region getRegionByName(String name) { return regionDao.getRegionByName(name); } @Override @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) public void readOnly(String name) { // write operation createRegion(new Region(name)); //read operation regionDao.getRegionByName(name); } } \ No newline at end of file diff --git a/Spring/GS_Spring_22_Hibernate/src/main/resources/log4j.properties b/Spring/GS_Spring_22_Hibernate/src/main/resources/log4j.properties index c1d8d7d0..26fe1df2 100644 --- a/Spring/GS_Spring_22_Hibernate/src/main/resources/log4j.properties +++ b/Spring/GS_Spring_22_Hibernate/src/main/resources/log4j.properties @@ -5,7 +5,7 @@ log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n +log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1}:%L - %m%n log4j.logger.org.springframework.transaction=DEBUG diff --git a/Spring/GS_Spring_22_Hibernate/src/main/resources/springExample.xml b/Spring/GS_Spring_22_Hibernate/src/main/resources/springExample.xml index b6359783..08d5fbd9 100644 --- a/Spring/GS_Spring_22_Hibernate/src/main/resources/springExample.xml +++ b/Spring/GS_Spring_22_Hibernate/src/main/resources/springExample.xml @@ -7,19 +7,20 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> - + - - - + + + - - + + + @@ -37,7 +38,7 @@ - hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect + hibernate.dialect=org.hibernate.dialect.PostgreSQL9Dialect hibernate.show_sql=true diff --git a/Spring/GS_Spring_3_AnnotationConfig/src/main/java/edu/javacourse/spring/config/ApplicationConfig.java b/Spring/GS_Spring_3_AnnotationConfig/src/main/java/edu/javacourse/spring/config/ApplicationConfig.java index 93ba0d6c..5991e92e 100644 --- a/Spring/GS_Spring_3_AnnotationConfig/src/main/java/edu/javacourse/spring/config/ApplicationConfig.java +++ b/Spring/GS_Spring_3_AnnotationConfig/src/main/java/edu/javacourse/spring/config/ApplicationConfig.java @@ -7,6 +7,9 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +/** + * настройки с помощью кода! + */ @Configuration @Import(CoreConfig.class) public class ApplicationConfig { diff --git a/Spring/IoC/IoC-01-Simple-Annotation/pom.xml b/Spring/IoC/IoC-01-Simple-Annotation/pom.xml new file mode 100644 index 00000000..d5b5b28d --- /dev/null +++ b/Spring/IoC/IoC-01-Simple-Annotation/pom.xml @@ -0,0 +1,34 @@ + + 4.0.0 + + + edu.javacourse + examples + 1.0-SNAPSHOT + ../../../ + + + edu.javacourse.spring.ioc + ioc-01-simple-annotation + 1.0-SNAPSHOT + jar + + Spring IoC 01 Simple Bean + + + + org.springframework + spring-context + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + + + + diff --git a/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/SimpleBeanExample.java b/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/SimpleBeanExample.java new file mode 100644 index 00000000..8ac50e06 --- /dev/null +++ b/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/SimpleBeanExample.java @@ -0,0 +1,31 @@ +package edu.javacourse.spring.ioc; + +import edu.javacourse.spring.ioc.beans.Car; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import java.util.Date; + +/** + * @author Artem Pronchakov | email/xmpp: artem.pronchakov@calisto.email + */ +public class SimpleBeanExample { + + private static Logger log = LoggerFactory.getLogger(SimpleBeanExample.class); + + public static void main(String[] args) { +// ApplicationContext контекст спринга!!! + ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"springContext.xml"}); + + log.debug("\n\n\n"); + + // id бина!! + final Car car = context.getBean("car", Car.class); + log.debug("Car owner: {}", car.getOwner()); + + context.getBean("currentDate", Date.class); + } + +} diff --git a/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/beans/Car.java b/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/beans/Car.java new file mode 100644 index 00000000..6fd62196 --- /dev/null +++ b/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/beans/Car.java @@ -0,0 +1,80 @@ +package edu.javacourse.spring.ioc.beans; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +import java.util.Date; + +/** + * @author Artem Pronchakov | email/xmpp: artem.pronchakov@calisto.email + */ +public class Car { + + private Long id; + private String model; + private int year; + private Date lastService; + + /* + ищет бин + имя свойства = id в контексет + потом ищет по типу, но если будет два типа подходящих, но будет рантайм эксепшн + +Аннотации работают только в том случае, если объект Car создаётся Спрингом! + */ + @Autowired + @Qualifier("person2") + private Person owner; + + public Car() { + System.out.println("Default co"); + } + + public Car(Long id, String model, int year, Date lastService, Person owner) { + this.id = id; + this.model = model; + this.year = year; + this.lastService = lastService; + this.owner = owner; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + + public Date getLastService() { + return lastService; + } + + public void setLastService(Date lastService) { + this.lastService = lastService; + } + + public Person getOwner() { + return owner; + } + + public void setOwner(Person owner) { + this.owner = owner; + } +} diff --git a/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/beans/Person.java b/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/beans/Person.java new file mode 100644 index 00000000..30374be2 --- /dev/null +++ b/Spring/IoC/IoC-01-Simple-Annotation/src/main/java/edu/javacourse/spring/ioc/beans/Person.java @@ -0,0 +1,45 @@ +package edu.javacourse.spring.ioc.beans; + +import java.util.Date; + +/** + * @author Artem Pronchakov | email/xmpp: artem.pronchakov@calisto.email + */ +public class Person { + private Long id; + private String name; + private Date birth; + + public Person() { + } + + public Person(Long id, String name, Date birth) { + this.id = id; + this.name = name; + this.birth = birth; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getBirth() { + return birth; + } + + public void setBirth(Date birth) { + this.birth = birth; + } +} diff --git a/Spring/IoC/IoC-01-Simple-Annotation/src/main/resources/log4j.xml b/Spring/IoC/IoC-01-Simple-Annotation/src/main/resources/log4j.xml new file mode 100644 index 00000000..89f04d92 --- /dev/null +++ b/Spring/IoC/IoC-01-Simple-Annotation/src/main/resources/log4j.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Spring/IoC/IoC-01-Simple-Annotation/src/main/resources/springContext.xml b/Spring/IoC/IoC-01-Simple-Annotation/src/main/resources/springContext.xml new file mode 100644 index 00000000..f78df5ba --- /dev/null +++ b/Spring/IoC/IoC-01-Simple-Annotation/src/main/resources/springContext.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Spring/IoC/IoC-01-Simple-Bean/src/main/java/edu/javacourse/spring/ioc/SimpleBeanExample.java b/Spring/IoC/IoC-01-Simple-Bean/src/main/java/edu/javacourse/spring/ioc/SimpleBeanExample.java index a490d60e..e836d3ab 100644 --- a/Spring/IoC/IoC-01-Simple-Bean/src/main/java/edu/javacourse/spring/ioc/SimpleBeanExample.java +++ b/Spring/IoC/IoC-01-Simple-Bean/src/main/java/edu/javacourse/spring/ioc/SimpleBeanExample.java @@ -6,6 +6,8 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; +import java.util.Date; + /** * @author Artem Pronchakov | email/xmpp: artem.pronchakov@calisto.email */ @@ -14,12 +16,16 @@ public class SimpleBeanExample { private static Logger log = LoggerFactory.getLogger(SimpleBeanExample.class); public static void main(String[] args) { +// ApplicationContext контекст спринга!!! ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"springContext.xml"}); log.debug("\n\n\n"); + // id бина!! final Car car = context.getBean("car", Car.class); log.debug("Car model: {}", car.getModel()); + + context.getBean("currentDate", Date.class); } } diff --git a/Spring/IoC/IoC-01-Simple-Bean/src/main/java/edu/javacourse/spring/ioc/beans/Car.java b/Spring/IoC/IoC-01-Simple-Bean/src/main/java/edu/javacourse/spring/ioc/beans/Car.java index 5b574a81..f8079902 100644 --- a/Spring/IoC/IoC-01-Simple-Bean/src/main/java/edu/javacourse/spring/ioc/beans/Car.java +++ b/Spring/IoC/IoC-01-Simple-Bean/src/main/java/edu/javacourse/spring/ioc/beans/Car.java @@ -14,6 +14,7 @@ public class Car { private Person owner; public Car() { + System.out.println("Default co"); } public Car(Long id, String model, int year, Date lastService, Person owner) { diff --git a/Spring/IoC/IoC-01-Simple-Bean/src/main/resources/springContext.xml b/Spring/IoC/IoC-01-Simple-Bean/src/main/resources/springContext.xml index 6b51e734..37632192 100644 --- a/Spring/IoC/IoC-01-Simple-Bean/src/main/resources/springContext.xml +++ b/Spring/IoC/IoC-01-Simple-Bean/src/main/resources/springContext.xml @@ -5,6 +5,8 @@ + + diff --git a/Spring/IoC/IoC-02-Inheritance/src/main/resources/springContext.xml b/Spring/IoC/IoC-02-Inheritance/src/main/resources/springContext.xml index 13a7a5c7..fe1b0ef8 100644 --- a/Spring/IoC/IoC-02-Inheritance/src/main/resources/springContext.xml +++ b/Spring/IoC/IoC-02-Inheritance/src/main/resources/springContext.xml @@ -5,18 +5,21 @@ + + + diff --git a/Spring/IoC/IoC-03-Instantiation/src/main/resources/springContext.xml b/Spring/IoC/IoC-03-Instantiation/src/main/resources/springContext.xml index 9ff8cc7c..f3e860db 100644 --- a/Spring/IoC/IoC-03-Instantiation/src/main/resources/springContext.xml +++ b/Spring/IoC/IoC-03-Instantiation/src/main/resources/springContext.xml @@ -26,10 +26,15 @@ - + - + diff --git a/Spring/IoC/IoC-04-Scope/src/main/resources/springContext.xml b/Spring/IoC/IoC-04-Scope/src/main/resources/springContext.xml index b3c8c6ab..9b3fa56d 100644 --- a/Spring/IoC/IoC-04-Scope/src/main/resources/springContext.xml +++ b/Spring/IoC/IoC-04-Scope/src/main/resources/springContext.xml @@ -5,6 +5,7 @@ + \ No newline at end of file diff --git a/Spring/IoC/IoC-05-Lazy-Init/src/main/resources/springContext.xml b/Spring/IoC/IoC-05-Lazy-Init/src/main/resources/springContext.xml index 8326eee2..01c05efb 100644 --- a/Spring/IoC/IoC-05-Lazy-Init/src/main/resources/springContext.xml +++ b/Spring/IoC/IoC-05-Lazy-Init/src/main/resources/springContext.xml @@ -3,9 +3,16 @@ xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd" default-lazy-init="false"> + - + + + + \ No newline at end of file diff --git a/Spring/IoC/IoC-06-Init-Destroy/src/main/java/edu/javacourse/spring/ioc/InitDestroyExample.java b/Spring/IoC/IoC-06-Init-Destroy/src/main/java/edu/javacourse/spring/ioc/InitDestroyExample.java index 95bb21ef..df730f28 100644 --- a/Spring/IoC/IoC-06-Init-Destroy/src/main/java/edu/javacourse/spring/ioc/InitDestroyExample.java +++ b/Spring/IoC/IoC-06-Init-Destroy/src/main/java/edu/javacourse/spring/ioc/InitDestroyExample.java @@ -12,6 +12,7 @@ public class InitDestroyExample { private static Logger log = LoggerFactory.getLogger(InitDestroyExample.class); public static void main(String[] args) throws InterruptedException { +// ClassPathXmlApplicationContext уточняем тип ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"springContext.xml"}); log.debug("\n\n\n"); @@ -19,6 +20,7 @@ public static void main(String[] args) throws InterruptedException { Thread.sleep(5000); log.debug("Destroying context..."); +// объект будут жить дальше, просто у них вызовется метод destroy context.destroy(); } diff --git a/Spring/IoC/IoC-06-Init-Destroy/src/main/java/edu/javacourse/spring/ioc/beans/AnnotationsInitBean.java b/Spring/IoC/IoC-06-Init-Destroy/src/main/java/edu/javacourse/spring/ioc/beans/AnnotationsInitBean.java index 881dada8..59b79b25 100644 --- a/Spring/IoC/IoC-06-Init-Destroy/src/main/java/edu/javacourse/spring/ioc/beans/AnnotationsInitBean.java +++ b/Spring/IoC/IoC-06-Init-Destroy/src/main/java/edu/javacourse/spring/ioc/beans/AnnotationsInitBean.java @@ -13,12 +13,14 @@ public class AnnotationsInitBean { private static Logger log = LoggerFactory.getLogger(AnnotationsInitBean.class); +// javax.annotation.PostConstruct; @PostConstruct public void annotatedInitMethod() { log.debug(""); log.debug("annotatedInitMethod invoked"); } +// javax.annotation.PreDestroy; @PreDestroy public void annotatedDestroyMethod() { log.debug(""); diff --git a/Spring/IoC/IoC-06-Init-Destroy/src/main/resources/springContext.xml b/Spring/IoC/IoC-06-Init-Destroy/src/main/resources/springContext.xml index 0a439695..d72e595f 100644 --- a/Spring/IoC/IoC-06-Init-Destroy/src/main/resources/springContext.xml +++ b/Spring/IoC/IoC-06-Init-Destroy/src/main/resources/springContext.xml @@ -8,7 +8,11 @@ default-destroy-method="someDefaultDestroyMethod"> - + + + @@ -18,6 +22,7 @@ + \ No newline at end of file diff --git a/Spring/MVC/GS_Spring_003/src/main/java/com/gemini/spring/controller/AjaxController.java b/Spring/MVC/GS_Spring_003/src/main/java/com/gemini/spring/controller/AjaxController.java index 2b87b8b1..145aa850 100755 --- a/Spring/MVC/GS_Spring_003/src/main/java/com/gemini/spring/controller/AjaxController.java +++ b/Spring/MVC/GS_Spring_003/src/main/java/com/gemini/spring/controller/AjaxController.java @@ -24,7 +24,8 @@ public String getAjaxPage() { } @RequestMapping(value = "/plus", method = RequestMethod.GET) - public @ResponseBody String plus(@RequestParam String d1, @RequestParam String d2, HttpServletResponse response) { + @ResponseBody // возвращаемое значение будет записываться в респонс + public String plus(@RequestParam String d1, @RequestParam String d2, HttpServletResponse response) { try { return String.valueOf(Integer.parseInt(d1) + Integer.parseInt(d2)); } catch (Exception e) { diff --git a/Spring/MVC/GS_Spring_003/src/main/webapp/index.jsp b/Spring/MVC/GS_Spring_003/src/main/webapp/index.jsp index a68d66a8..c748c8fc 100755 --- a/Spring/MVC/GS_Spring_003/src/main/webapp/index.jsp +++ b/Spring/MVC/GS_Spring_003/src/main/webapp/index.jsp @@ -8,6 +8,7 @@ $("#helloLink").click(function() { $.ajax({ + // по дефолту пост-запрос! "url": "helloajax", "timeout": 2000, "success": function (data, textStatus, jqXHR) { diff --git a/Spring/pom.xml b/Spring/pom.xml index af5fd024..74d854af 100644 --- a/Spring/pom.xml +++ b/Spring/pom.xml @@ -16,6 +16,7 @@ MVC Spring-JMS WS + GS_Spring_22_Hibernate diff --git a/f.sql b/f.sql new file mode 100644 index 00000000..91be123e --- /dev/null +++ b/f.sql @@ -0,0 +1,49 @@ +CREATE TABLE jc_author +( + author_id INTEGER PRIMARY KEY NOT NULL, + author_name VARCHAR(255) +); +CREATE TABLE jc_book +( + book_id INTEGER PRIMARY KEY NOT NULL, + book_name VARCHAR(255) +); +CREATE TABLE jc_book_author +( + book_id INTEGER NOT NULL, + author_id INTEGER NOT NULL, + CONSTRAINT pk PRIMARY KEY (book_id, author_id), + CONSTRAINT jc_book__fk FOREIGN KEY (book_id) REFERENCES jc_book (book_id), + CONSTRAINT jc_author___fk FOREIGN KEY (author_id) REFERENCES jc_author (author_id) +); + +CREATE TABLE jc_city +( + city_id INTEGER PRIMARY KEY NOT NULL, + city_name VARCHAR(255), + region_id BIGINT, + CONSTRAINT jc_city_region_id_fkey FOREIGN KEY (region_id) REFERENCES jc_region (region_id) +); +CREATE TABLE jc_region +( + region_id INTEGER PRIMARY KEY NOT NULL, + region_name VARCHAR(255) +); +CREATE TABLE jc_region_standalone +( + region_id INTEGER PRIMARY KEY NOT NULL, + region_name VARCHAR(255) +); +-- CREATE TABLE jc_city_city_id_seq +-- ( +-- sequence_name VARCHAR NOT NULL, +-- last_value BIGINT NOT NULL, +-- start_value BIGINT NOT NULL, +-- increment_by BIGINT NOT NULL, +-- max_value BIGINT NOT NULL, +-- min_value BIGINT NOT NULL, +-- cache_value BIGINT NOT NULL, +-- log_cnt BIGINT NOT NULL, +-- is_cycled BOOLEAN NOT NULL, +-- is_called BOOLEAN NOT NULL +-- ); \ No newline at end of file