diff --git a/boot/pom.xml b/boot/pom.xml new file mode 100644 index 0000000..3061051 --- /dev/null +++ b/boot/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + com.max + boot + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 1.5.9.RELEASE + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + + + mysql + mysql-connector-java + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-actuator + + + \ No newline at end of file diff --git a/boot/src/main/java/com/max/Main.java b/boot/src/main/java/com/max/Main.java new file mode 100644 index 0000000..c3a2fb0 --- /dev/null +++ b/boot/src/main/java/com/max/Main.java @@ -0,0 +1,33 @@ +package com.max; + +import com.max.interfaces.MyComponent; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; + +@SpringBootApplication//(scanBasePackages = "com.max") +//@EnableAutoConfiguration +//@Configuration +//@ComponentScan("com.max") +public class Main { + @Autowired + MyComponent myComponent; + @Autowired + ApplicationContext context; + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + } + @Bean + public CommandLineRunner commandLineRunner(ApplicationContext ctx) { + return args -> { + MyComponent bean1 = context.getBean(MyComponent.class); + bean1.print(); + MyComponent bean = ctx.getBean(MyComponent.class); + bean.print(); + myComponent.print(); + }; + } +} diff --git a/boot/src/main/java/com/max/MainDb.java b/boot/src/main/java/com/max/MainDb.java new file mode 100644 index 0000000..9892c11 --- /dev/null +++ b/boot/src/main/java/com/max/MainDb.java @@ -0,0 +1,25 @@ +package com.max; + + +import com.max.entities.User; +import com.max.interfaces.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +@SpringBootApplication +public class MainDb { + @Autowired + UserRepository userRepository; + public static void main(String[] args) { + SpringApplication.run(MainDb.class, args); + } + @Bean + public CommandLineRunner commandLineRunner() { + return args -> { + userRepository.save(new User("Max")); + }; + } +} diff --git a/boot/src/main/java/com/max/MainWeb.java b/boot/src/main/java/com/max/MainWeb.java new file mode 100644 index 0000000..5183d71 --- /dev/null +++ b/boot/src/main/java/com/max/MainWeb.java @@ -0,0 +1,12 @@ +package com.max; + + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MainWeb { + public static void main(String[] args) { + SpringApplication.run(MainWeb.class, args); + } +} diff --git a/boot/src/main/java/com/max/controllers/WebController.java b/boot/src/main/java/com/max/controllers/WebController.java new file mode 100644 index 0000000..731b2e5 --- /dev/null +++ b/boot/src/main/java/com/max/controllers/WebController.java @@ -0,0 +1,12 @@ +package com.max.controllers; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class WebController { + @GetMapping("webBoot") + public String webBoot() { + return "Hello world"; + } +} diff --git a/boot/src/main/java/com/max/entities/User.java b/boot/src/main/java/com/max/entities/User.java new file mode 100644 index 0000000..1c464d5 --- /dev/null +++ b/boot/src/main/java/com/max/entities/User.java @@ -0,0 +1,36 @@ +package com.max.entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.io.Serializable; + +@Entity +public class User implements Serializable { + @GeneratedValue(strategy = GenerationType.AUTO) + @Id + int id; + String name; + + public User() {} + public User(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/boot/src/main/java/com/max/impl/MyComponentImpl.java b/boot/src/main/java/com/max/impl/MyComponentImpl.java new file mode 100644 index 0000000..54e5ea8 --- /dev/null +++ b/boot/src/main/java/com/max/impl/MyComponentImpl.java @@ -0,0 +1,12 @@ +package com.max.impl; + +import com.max.interfaces.MyComponent; +import org.springframework.stereotype.Component; + +@Component +public class MyComponentImpl implements MyComponent { + @Override + public void print() { + System.out.println("Hello world"); + } +} diff --git a/boot/src/main/java/com/max/interfaces/MyComponent.java b/boot/src/main/java/com/max/interfaces/MyComponent.java new file mode 100644 index 0000000..cfb07c4 --- /dev/null +++ b/boot/src/main/java/com/max/interfaces/MyComponent.java @@ -0,0 +1,5 @@ +package com.max.interfaces; + +public interface MyComponent { + void print(); +} diff --git a/boot/src/main/java/com/max/interfaces/UserRepository.java b/boot/src/main/java/com/max/interfaces/UserRepository.java new file mode 100644 index 0000000..7531ef5 --- /dev/null +++ b/boot/src/main/java/com/max/interfaces/UserRepository.java @@ -0,0 +1,9 @@ +package com.max.interfaces; + +import com.max.entities.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public interface UserRepository extends JpaRepository { +} diff --git a/boot/src/main/resources/application.properties b/boot/src/main/resources/application.properties new file mode 100644 index 0000000..37823b5 --- /dev/null +++ b/boot/src/main/resources/application.properties @@ -0,0 +1,7 @@ +spring.jpa.hibernate.ddl-auto=create-drop +spring.datasource.url=jdbc:mysql://localhost:3306/Lessons +spring.datasource.username=root +spring.datasource.password=1 +management.security.enabled=false +logging.level.org.hibernate.SQL=DEBUG +spring.jpa.properties.hibernate.show_sql=true \ No newline at end of file diff --git a/boot/src/test/java/BootTest.java b/boot/src/test/java/BootTest.java new file mode 100644 index 0000000..c6e7eaf --- /dev/null +++ b/boot/src/test/java/BootTest.java @@ -0,0 +1,24 @@ +import com.max.interfaces.MyComponent; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BootTest.Config.class) +//@TestConfiguration +public class BootTest { + @Autowired +// @MockBean + MyComponent bean; + @Test + public void test() { + bean.print(); + } + @SpringBootConfiguration + @ComponentScan("com.max") + static class Config {} +} diff --git a/ee/src/servlets/GetIp.java b/ee/src/servlets/GetIp.java new file mode 100644 index 0000000..b170c85 --- /dev/null +++ b/ee/src/servlets/GetIp.java @@ -0,0 +1,16 @@ +package servlets; + +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("/getIp") +public class GetIp extends HttpServlet { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + resp.getWriter().write(req.getRemoteAddr()); + } +} diff --git a/hiber/resources/entities/Book.hbm.xml b/hiber/resources/entities/Book.hbm.xml new file mode 100644 index 0000000..0c6c69e --- /dev/null +++ b/hiber/resources/entities/Book.hbm.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/hiber/resources/entities/Student.hbm.xml b/hiber/resources/entities/Student.hbm.xml new file mode 100644 index 0000000..2e4c0eb --- /dev/null +++ b/hiber/resources/entities/Student.hbm.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/hiber/resources/hibernate.cfg.xml b/hiber/resources/hibernate.cfg.xml new file mode 100644 index 0000000..9046ae3 --- /dev/null +++ b/hiber/resources/hibernate.cfg.xml @@ -0,0 +1,30 @@ + + + + + + + + + jdbc:mysql://localhost:3306/Lessons + com.mysql.jdbc.Driver + root + 1 + org.hibernate.dialect.MySQL5Dialect + + true + org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory + + true + update + + + + + + + + + + + \ No newline at end of file diff --git a/hiber/resources/hibernate.properties b/hiber/resources/hibernate.properties new file mode 100644 index 0000000..44b7e51 --- /dev/null +++ b/hiber/resources/hibernate.properties @@ -0,0 +1 @@ +#hibernate.connection.url = jdbc:mysql://localhost:3306/Lessons \ No newline at end of file diff --git a/hiber/src/ConfigHiberLesson.java b/hiber/src/ConfigHiberLesson.java new file mode 100644 index 0000000..ab31378 --- /dev/null +++ b/hiber/src/ConfigHiberLesson.java @@ -0,0 +1,21 @@ +import entities.Student; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +public class ConfigHiberLesson { + public static void main(String[] args) { + Configuration cfg = new Configuration() + .setProperty("hibernate.dialect", "org.hibernate.dialect.MariaDBDialect") + .setProperty("hibernate.connection.username", "root") + .setProperty("hibernate.connection.password", "1") + .setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/Lessons") + .configure(); + try(SessionFactory sessionFactory = cfg.buildSessionFactory(); + Session session = sessionFactory.openSession()) { + session.beginTransaction(); + session.save(new Student("Max")); + session.getTransaction().commit(); + } + } +} diff --git a/hiber/src/HelloWorld.java b/hiber/src/HelloWorld.java new file mode 100644 index 0000000..14a561a --- /dev/null +++ b/hiber/src/HelloWorld.java @@ -0,0 +1,55 @@ +import entities.HomeAddress; +import entities.Person; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class HelloWorld { + public static void main(String[] args) { + StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); + try(SessionFactory sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory(); + Session session = sessionFactory.openSession()) { + session.beginTransaction(); + + HomeAddress homeAddress = new HomeAddress("Lenina"); + List list = new ArrayList<>(); + list.add(homeAddress); + list.add(new HomeAddress("Gukova")); + + List marks = new ArrayList<>(); + marks.add(1); + marks.add(3); + marks.add(2); + +// Map map = new HashMap<>(); +// map.put("one", "1"); +// map.put("two", "2"); + + Person person = new Person("Max", list, marks, "123"); +// session.persist(homeAddress); + session.persist(person); + + Map book = new HashMap<>(); + book.put( "isbn", "978-9730228236" ); + book.put( "title", "High-Performance Java Persistence" ); + book.put( "author", "Vlad Mihalcea" ); + + session.save( "Book", book ); + + Person iCode = session.byNaturalId(Person.class).using("iCode", "123").getReference(); + System.out.println(iCode); + + Person load = session.load(Person.class, 85); +// System.out.println(load.getMarks()); +// List homeAddress = load.getHomeAddress(); + session.getTransaction().commit(); + } + } +} diff --git a/hiber/src/Main.java b/hiber/src/Main.java new file mode 100644 index 0000000..46374f2 --- /dev/null +++ b/hiber/src/Main.java @@ -0,0 +1,118 @@ +import entities.hierarchies.Car; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.query.NativeQuery; + +import java.util.List; + +public class Main { + public static void main(String[] args) throws InterruptedException { + StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); + try(SessionFactory sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory(); + Session session = sessionFactory.openSession()) { + + session.beginTransaction(); + NativeQuery nativeQuery = session.createNativeQuery("select * from Car", Car.class); + List resultList = nativeQuery.getResultList(); + for (Car car : resultList) { + System.out.println("id " + car.getId() + " number " + car.getNumber()); + } + session.getTransaction().commit(); + +// session.beginTransaction(); +// Query query = session.createNamedQuery("getCarByNumber"); +// query.setParameter("number", "123"); +// Car car = (Car) query.uniqueResult(); +// System.out.println(car.getId()); +// session.getTransaction().commit(); + +// session.beginTransaction(); +// session.createQuery("update Car c set c.number = '234' where c.id = 247").executeUpdate(); +// session.createQuery("insert into Car (id,number) select c.id + 4, concat(c.number, '1') from Car c where c.id = 247").executeUpdate(); +// session.createQuery("delete Car c where c.id = 251").executeUpdate(); +// session.getTransaction().commit(); + +// session.beginTransaction(); +// Query query = session.createQuery("from Car c where c.number != '123'"); +// =, >, >=, <, <=, <>, != +// Query query = session.createQuery("from Car c where c.number is not null"); +// Query query = session.createQuery("from Car c where c.number like '%123%'"); +// Query query = session.createQuery("from Car c where number BETWEEN 1 and 1000"); +// Query query = session.createQuery("from Car c where number in (123,1234)"); +// Query query = session.createQuery("from Car c where c.number is empty"); +// Query query = session.createQuery("from Car c where c.number = '123' or c.number = '2' and c.number = '3'"); +// Query query = session.createQuery("from Car c where number = 123L"); +// Query query = session.createQuery("from Car c where number = 123.0"); +// Query query = session.createQuery("from Car c where number = 123.0F"); +// Query query = session.createQuery("from Car c where number = 120 + 3"); +// Query query = session.createQuery("from Car c where number = 12 || 3"); +// List list = query.list(); +// for (Car car : list) { +// System.out.println(car.getNumber()); +// } +// session.getTransaction().commit(); + +// session.beginTransaction(); +// User user = new User("Max"); +// Role admin = new Role("admin"); +// Role moderator = new Role("moderator"); +// List roles = new ArrayList<>(); +// roles.add(admin); +// roles.add(moderator); +// user.setRoleList(roles); +// session.persist(user); +// session.getTransaction().commit(); + +// session.beginTransaction(); +//// Query query = session.createQuery("from User"); +// Query query = session.createQuery("select distinct u from User u join fetch u.roleList"); +// List list = query.list(); +// session.getTransaction().commit(); +// +// for (User user : list) { +// System.out.println(user.getName()); +// System.out.println(user.getRoleList().size()); +// } + +// session.beginTransaction(); +// Query query = session.createQuery("select max(id) from Car c"); +// Query query = session.createQuery("select min(id) from Car c"); +// Query query = session.createQuery("select count(id) from Car c"); +// Query query = session.createQuery("select sum(id) from Car c"); +// Query query = session.createQuery("select avg(id) from Car c"); +// jpql +// Query query = session.createQuery("select concat(id, ' id') from Car c"); +// Query query = session.createQuery("select substring(c.number, 0,1) from Car c"); +// Query query = session.createQuery("select upper(c.number) from Car c"); +// Query query = session.createQuery("select lower(c.number) from Car c"); +// Query query = session.createQuery("select trim(c.number) from Car c"); +// Query query = session.createQuery("select length(c.number) from Car c"); +// Query query = session.createQuery("select locate('1', c.number) from Car c"); +// Query query = session.createQuery("select abs(number) from Car c"); +// Query query = session.createQuery("select mod(number, 10) from Car c"); +// Query query = session.createQuery("select sqrt(number) from Car c"); +// Query query = session.createQuery("select current_date from Car c"); +// Query query = session.createQuery("select current_time from Car c"); +// Query query = session.createQuery("select current_timestamp from Car c"); +// hql +// Query query = session.createQuery("select bit_length(c.number) from Car c"); +// Query query = session.createQuery("select cast(c.number as string) from Car c"); +// Query query = session.createQuery("select extract(YEAR from current_timestamp) from Car c"); +// Query query = session.createQuery("select year(current_timestamp) from Car c"); +// Query query = session.createQuery("select DAY(current_timestamp) from Car c"); +// Query query = session.createQuery("select MONTH(current_timestamp) from Car c"); +// Query query = session.createQuery("select HOUR(current_timestamp) from Car c"); +// Query query = session.createQuery("select MINUTE(current_timestamp) from Car c"); +// Query query = session.createQuery("select SECOND(current_timestamp) from Car c"); +// Query query = session.createQuery("select STR(current_timestamp) from Car c"); +// List list = query.list(); +// for (String str : list) { +// System.out.println(str); +// } +// session.getTransaction().commit(); + } + } +} diff --git a/hiber/src/entities/Address.java b/hiber/src/entities/Address.java new file mode 100644 index 0000000..97e0a49 --- /dev/null +++ b/hiber/src/entities/Address.java @@ -0,0 +1,37 @@ +package entities; + +import javax.persistence.Embeddable; +import java.io.Serializable; + +@Embeddable +//@Access(AccessType.FIELD) +public class Address implements Serializable { + + public Address() {} + + public Address(String street, int number) { + this.street = street; + this.number = number; + } + + String street; + int number; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Address address = (Address) o; + + if (number != address.number) return false; + return street != null ? street.equals(address.street) : address.street == null; + } + + @Override + public int hashCode() { + int result = street != null ? street.hashCode() : 0; + result = 31 * result + number; + return result; + } +} diff --git a/hiber/src/entities/EntityStates.java b/hiber/src/entities/EntityStates.java new file mode 100644 index 0000000..3a455b7 --- /dev/null +++ b/hiber/src/entities/EntityStates.java @@ -0,0 +1,38 @@ +package entities; + +import entities.hierarchies.Car; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; + +public class EntityStates { + public static void main(String[] args) { + StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); + try(SessionFactory sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory(); + Session session = sessionFactory.openSession()) { + session.beginTransaction(); + + session.getTransaction().commit(); + Car car = new Car("123"); + System.out.println(car.getId()); + session.persist(car); + session.flush(); + System.out.println(car.getId()); +// car.setNumber("321"); +// session.detach(car); +// car.setNumber("456"); +//// session.merge(car); +// session.update(car); +// session.remove(car); +// System.out.println(car.getId()); +// System.out.println(car.getNumber()); + car.setNumber("789"); + session.refresh(car); + System.out.println(car.getNumber()); + + session.getTransaction().commit(); + } + } +} diff --git a/hiber/src/entities/HomeAddress.java b/hiber/src/entities/HomeAddress.java new file mode 100644 index 0000000..7dfafdc --- /dev/null +++ b/hiber/src/entities/HomeAddress.java @@ -0,0 +1,23 @@ +package entities; + +import javax.persistence.Embeddable; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +//@Entity +@Embeddable +public class HomeAddress { +// @Id +// @GeneratedValue +// int id; + String street; + + public HomeAddress() {} + public HomeAddress(String street) { + this.street = street; + } + + public String getStreet() { + return street; + } +} diff --git a/hiber/src/entities/LockExample.java b/hiber/src/entities/LockExample.java new file mode 100644 index 0000000..5299b72 --- /dev/null +++ b/hiber/src/entities/LockExample.java @@ -0,0 +1,48 @@ +package entities; + +import entities.hierarchies.Car; +import org.hibernate.LockMode; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; + +public class LockExample { + public static void main(String[] args) throws InterruptedException { + StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); + try(SessionFactory sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory(); + Session session = sessionFactory.openSession(); + Session session2 = sessionFactory.openSession()) { + + session.beginTransaction(); + Car car = new Car("123"); + session.persist(car); + session.getTransaction().commit(); + + final int carId = car.getId(); + + new Thread() { + @Override + public void run() { + session.beginTransaction(); + Car car = session.load(Car.class, carId, LockMode.PESSIMISTIC_WRITE); + car.setNumber(car.getNumber() + "4"); + try {Thread.sleep(400);} catch (InterruptedException e) {} + session.getTransaction().commit(); + } + }.start(); + + new Thread() { + @Override + public void run() { + session2.beginTransaction(); + Car car = session2.load(Car.class, carId, LockMode.PESSIMISTIC_WRITE); + car.setNumber(car.getNumber() + "5"); + session2.getTransaction().commit(); + } + }.start(); + Thread.sleep(600); + } + } +} diff --git a/hiber/src/entities/Person.java b/hiber/src/entities/Person.java new file mode 100644 index 0000000..e5816df --- /dev/null +++ b/hiber/src/entities/Person.java @@ -0,0 +1,64 @@ +package entities; + +import org.hibernate.annotations.NaturalId; + +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.List; + +@Entity +public class Person { + @Id + @GeneratedValue + private int id; + private String name; + @ElementCollection + private List homeAddress; + @ElementCollection +// @OrderBy("marks") +// @OrderColumn +// @org.hibernate.annotations.OrderBy(clause = "marks DESC") +// @SortComparator(MyComparator.class) + private List marks; + + @NaturalId + private String iCode; + +// @ElementCollection +// @CollectionTable(name = "PersonMap") +// @Column(name = "name") +// @MapKeyColumn(name = "'key'") +// private Map map; + + public Person() {} + public Person(String name, List homeAddress) { + this.name = name; + this.homeAddress = homeAddress; + } + + public Person(String name, List homeAddress, List marks) { + this.name = name; + this.homeAddress = homeAddress; + this.marks = marks; + } + + public Person(String name, List homeAddress, List marks, String iCode) { + this.name = name; + this.homeAddress = homeAddress; + this.marks = marks; + this.iCode = iCode; + } + + @Override + public String toString() { + return "Person{" + + "id=" + id + + ", name='" + name + '\'' + + ", homeAddress=" + homeAddress + + ", marks=" + marks + + ", iCode='" + iCode + '\'' + + '}'; + } +} diff --git a/hiber/src/entities/Role.java b/hiber/src/entities/Role.java new file mode 100644 index 0000000..dc916dc --- /dev/null +++ b/hiber/src/entities/Role.java @@ -0,0 +1,34 @@ +package entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Role { + @Id + @GeneratedValue + int id; + String name; + + public Role() {} + public Role(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/hiber/src/entities/Student.java b/hiber/src/entities/Student.java new file mode 100644 index 0000000..0fe11f3 --- /dev/null +++ b/hiber/src/entities/Student.java @@ -0,0 +1,96 @@ +package entities; + +import enums.Days; +import org.hibernate.annotations.Formula; +import org.hibernate.annotations.UpdateTimestamp; + +import javax.persistence.*; +import java.util.Date; + +@Entity +//@Table(name = "stud") +public final class Student { +// @Id +// @GeneratedValue +// private int id; + +// private int id; +// @Basic(optional = false, fetch = FetchType.LAZY) +// @Column(name = "StudentName", unique = true, nullable = false, updatable = false) +// @Type(type = "text") + @Access(AccessType.FIELD) + private String name; + + @Enumerated(EnumType.STRING) + private Days days; + +// @Temporal(TemporalType.DATE) +// @CreationTimestamp + @UpdateTimestamp + private Date date; + + @EmbeddedId + private Address address; + + private int age = 20; + + @Formula("id + age") + private int idPlusAge; + + public Student() {} + + public Student(String name) { + this.name = name; + } + + public Student(String name, Days days) { + this.name = name; + this.days = days; + } + + public Student(String name, Days days, Date date) { + this.name = name; + this.days = days; + this.date = date; + } + +// public int getId() { +// return id; +// } +// +// public void setId(int id) { +// this.id = id; +// } + + public String getName() { + return "Mr. " + name; + } + + public void setName(String name) { + this.name = name; + } + + public Days getDays() { + return days; + } + + public void setDays(Days days) { + this.days = days; + } + + public int getIdPlusAge() { + return idPlusAge; + } + + public void setIdPlusAge(int idPlusAge) { + this.idPlusAge = idPlusAge; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } +} diff --git a/hiber/src/entities/User.java b/hiber/src/entities/User.java new file mode 100644 index 0000000..a7a0dec --- /dev/null +++ b/hiber/src/entities/User.java @@ -0,0 +1,43 @@ +package entities; + +import javax.persistence.*; +import java.util.List; + +@Entity +public class User { + @Id + @GeneratedValue + int id; + String name; + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + List roleList; + + public User() {} + public User(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getRoleList() { + return roleList; + } + + public void setRoleList(List roleList) { + this.roleList = roleList; + } +} diff --git a/hiber/src/entities/hierarchies/Car.java b/hiber/src/entities/hierarchies/Car.java new file mode 100644 index 0000000..f4d0462 --- /dev/null +++ b/hiber/src/entities/hierarchies/Car.java @@ -0,0 +1,66 @@ +package entities.hierarchies; + +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; +import org.hibernate.annotations.NamedQueries; +import org.hibernate.annotations.NamedQuery; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +//@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +//@MappedSuperclass +//@OptimisticLocking(type = OptimisticLockType.VERSION) +//@Cacheable +//@Cache(usage = CacheConcurrencyStrategy.READ_ONLY) +@NamedQueries(@NamedQuery(name = "getCarByNumber", query = "select c from Car c where c.number = :number")) +public class Car { + @Id + @GeneratedValue + private int id; + @Fetch(FetchMode.SELECT) + private String number; +// @Version +// int version; + + public Car() {} + public Car(String number) { + this.number = number; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Car car = (Car) o; + + if (id != car.id) return false; + return number != null ? number.equals(car.number) : car.number == null; + } + + @Override + public int hashCode() { + int result = id; + result = 31 * result + (number != null ? number.hashCode() : 0); + return result; + } +} diff --git a/hiber/src/entities/hierarchies/Opel.java b/hiber/src/entities/hierarchies/Opel.java new file mode 100644 index 0000000..2828da3 --- /dev/null +++ b/hiber/src/entities/hierarchies/Opel.java @@ -0,0 +1,13 @@ +package entities.hierarchies; + +import javax.persistence.Entity; + +@Entity +public class Opel extends Car { + private int price; + + public Opel(String number, int price) { + super(number); + this.price = price; + } +} diff --git a/hiber/src/entities/hierarchies/Toyota.java b/hiber/src/entities/hierarchies/Toyota.java new file mode 100644 index 0000000..5b5b1ae --- /dev/null +++ b/hiber/src/entities/hierarchies/Toyota.java @@ -0,0 +1,13 @@ +package entities.hierarchies; + +import javax.persistence.Entity; + +@Entity +public class Toyota extends Car { + private String maxSpeed; + + public Toyota(String number, String maxSpeed) { + super(number); + this.maxSpeed = maxSpeed; + } +} diff --git a/hiber/src/enums/Days.java b/hiber/src/enums/Days.java new file mode 100644 index 0000000..e5db738 --- /dev/null +++ b/hiber/src/enums/Days.java @@ -0,0 +1,5 @@ +package enums; + +public enum Days { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY +} diff --git a/kotln/src/com/max/Annotations.kt b/kotln/src/com/max/Annotations.kt new file mode 100644 index 0000000..6e207b3 --- /dev/null +++ b/kotln/src/com/max/Annotations.kt @@ -0,0 +1,12 @@ +package com.max + +fun main(args: Array) { + +} +const val message = "" +@Deprecated(message) +@MyAnnotation("") +fun test() {} + +@Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) +annotation class MyAnnotation(val name: String) \ No newline at end of file diff --git a/kotln/src/com/max/BasicTypes.kt b/kotln/src/com/max/BasicTypes.kt new file mode 100644 index 0000000..f3373fa --- /dev/null +++ b/kotln/src/com/max/BasicTypes.kt @@ -0,0 +1,18 @@ +package com.max + +fun main(args: Array) { + val i: Int = 1 + val j: Int? = null + val l: Long = i.toLong() + val list: List = listOf(1, 2, 3) + l.toInt() in list + var any: Any = 5 + var any2: Any = "Str" + var any3: Any? = null + var unit: Unit +} +fun f(): Unit { } +fun fail(): Nothing { +// return Nothing() + throw IllegalStateException() +} \ No newline at end of file diff --git a/kotln/src/com/max/CallFunctions.kt b/kotln/src/com/max/CallFunctions.kt new file mode 100644 index 0000000..8b93b27 --- /dev/null +++ b/kotln/src/com/max/CallFunctions.kt @@ -0,0 +1,43 @@ +package com.max + +//import CallFunction.lastChar as last + +var i = 5; +fun main(args: Array) { + print(message = i) + def() +// print("ho".lastChar()) +// print("String".lastChar) + print("Hello " concat "world!" ) + print(arrayOf(1,2,3).size) + + //lot of code + print(i + 1) + //more code + + //lot of code + print(i + 2) + //more code + fun prnt(j: Int) { + //lot of code + print(i + j) + //more code + } + prnt(i + 1) + prnt(i + 2) +} +fun def(s: String = "hello") { + print(s) +} +//fun String.lastChar(): Char = get(length - 1)//don't work on inheritance +//fun String.lastChar(): Char = this.get(this.length - 1) +//val String.lastChar: Char get() = get(length - 1) +infix fun String.concat(other: String) = this + other + +fun arrayOf(vararg vals: Int): IntArray { + val array = IntArray(vals.size) + for(i in 0..vals.size - 1) { + array.set(i, vals[i]) + } + return array +} diff --git a/kotln/src/com/max/Classes.kt b/kotln/src/com/max/Classes.kt new file mode 100644 index 0000000..56bd562 --- /dev/null +++ b/kotln/src/com/max/Classes.kt @@ -0,0 +1,7 @@ +package com.max + +fun main(args: Array) { + var user = User("Max", 22) +} + +class User(name:String, age: Int) \ No newline at end of file diff --git a/kotln/src/com/max/Collections.kt b/kotln/src/com/max/Collections.kt new file mode 100644 index 0000000..09ef25c --- /dev/null +++ b/kotln/src/com/max/Collections.kt @@ -0,0 +1,12 @@ +package com.max +fun main(args: Array) { + val set = setOf(1, 1, 2) + val list = listOf(1, 2, 3) + val map = mapOf(1 to "one", 2 to "two") + print(set.first()) + print(set.last()) + print(set.size) + print(set.max()) + print(set.average()) + print(set) +} diff --git a/kotln/src/com/max/CollectionsArrays.kt b/kotln/src/com/max/CollectionsArrays.kt new file mode 100644 index 0000000..2853e44 --- /dev/null +++ b/kotln/src/com/max/CollectionsArrays.kt @@ -0,0 +1,15 @@ +package com.max + +fun main(args: Array) { + val result = ArrayList() + ///// + val arr1 = arrayOf(1,2,3) + val arr2 = arrayOfNulls(10) + val arr3 = Array(26) { i -> ('a' + i).toString() } + val arr4 = IntArray(5) + val arr5 = intArrayOf(0, 0, 0, 0, 0) + val arr6 = IntArray(5) { i -> (i+1) * (i+1) } +} +fun arrays(numbers: List) {} +fun arrays2(numbers: List?) {} +fun copyElements(source: Collection, target: MutableCollection, list: List, mutableList: MutableList) {} \ No newline at end of file diff --git a/kotln/src/com/max/Constructors.kt b/kotln/src/com/max/Constructors.kt new file mode 100644 index 0000000..fc69e4d --- /dev/null +++ b/kotln/src/com/max/Constructors.kt @@ -0,0 +1,71 @@ +package com.max + +fun main(args: Array) { +// var v = User2() +// v.name = "Mike" +// print(v.name) + var k = Client("Max", 1) + print(k) +} + +class Student(name: String) + +class Student2 constructor(_name: String = "Max") { + val name: String + init { + name = _name + } +} +class Student3(_nickname: String) +{ val nickname = _nickname} + +open class Student4 (val nickname: String) +class Student5(nickname: String) : Student4(nickname) + +open class Student6 +class Student7: Student6() + +class Student8 private constructor() + +open class Student9 { + constructor() + constructor(i: Int) +} + +//class Student10: Student9() { +class Student10: Student9 { +// constructor() + constructor(): this(5) + constructor(i: Int): super(5) {} +} + +///////////////// +interface User1 { + abstract val name: String + val nickname: String get() = name.substringBefore(' ') +} +class PrivateUser(override val name: String) : User1 +class SubscribingUser(val famiryName: String) : User1 { + override val name: String get() = famiryName.substringBefore(' ') +} +class User2 { + private var name: String = "Max" + get() = field + private set(value: String) { + field = value + } +} +/////////////// +data class Client(val name: String, val postalCode: Int) { +// override fun toString() = "Client(name=$name, postalCode=$postalCode)" +// override fun equals(other: Any?): Boolean { +// if (other == null || other !is Client) +// return false +// return name == other.name && postalCode == other.postalCode +// } +// override fun hashCode(): Int = name.hashCode() * 31 + postalCode +// fun copy(name: String = this.name, postalCode: Int = this.postalCode) = Client(name, postalCode) +} +/////////// +class DelegatingCollection(innerList: Collection = ArrayList()): Collection by innerList {} +//////////////// \ No newline at end of file diff --git a/kotln/src/com/max/ControlFlow.kt b/kotln/src/com/max/ControlFlow.kt new file mode 100644 index 0000000..2b94121 --- /dev/null +++ b/kotln/src/com/max/ControlFlow.kt @@ -0,0 +1,22 @@ +package com.max + +fun main(args: Array) { +// lookForAlice(people) +} + +fun lookForAlice(people: List) { + people.forEach label@{ + if (it.name == "Alice") return@label + } + println("Alice might be somewhere") +} + +fun lookForAlice2(people: List) { + people.forEach { + if (it.name == "Alice") { + println("Found!") + return@forEach + } + } + println("Alice is not found") +} \ No newline at end of file diff --git a/kotln/src/com/max/DelegatingProperties.kt b/kotln/src/com/max/DelegatingProperties.kt new file mode 100644 index 0000000..55437db --- /dev/null +++ b/kotln/src/com/max/DelegatingProperties.kt @@ -0,0 +1,18 @@ +package com.max + +import kotlin.reflect.KProperty + +fun main(args: Array) { + val foo = Foo() + print(foo.p) + foo.p = 6 + print(foo.p) +} +class Foo { + var p: Int by Delegate(5) +} + +class Delegate(var value: Int) { + operator fun getValue(foo: Foo, kProperty: KProperty<*>) :Int { return value } + operator fun setValue(foo: Foo, kProperty: KProperty<*>, value: Int) { this.value = value } +} \ No newline at end of file diff --git a/kotln/src/com/max/Enums.kt b/kotln/src/com/max/Enums.kt new file mode 100644 index 0000000..9a39342 --- /dev/null +++ b/kotln/src/com/max/Enums.kt @@ -0,0 +1,22 @@ +package com.max + +fun main(args: Array) { + val color = Color.BLUE + when(color) { + Color.RED,Color.GREEN -> print("red") + Color.BLUE -> print("blue") + } + print(bigger(5, 6)) +} + +fun bigger(a: Int, b: Int) = if(a > b) a else b + +enum class Color { + RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET +} +enum class Color2(val r: Int, val g: Int, val b: Int) { + RED(255, 0, 0), ORANGE(255, 165, 0), + YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255), + INDIGO(75, 0, 130), VIOLET(238, 130, 238); + fun rgb() = (r * 256 + g) * 256 + b +} diff --git a/kotln/src/com/max/Exceptions.kt b/kotln/src/com/max/Exceptions.kt new file mode 100644 index 0000000..00c4d4b --- /dev/null +++ b/kotln/src/com/max/Exceptions.kt @@ -0,0 +1,18 @@ +package com.max + +import java.io.IOException + +fun main(args: Array) { + var i = try { + throw IOException("hello") + throw Exception("hello") + 1 + } catch (e: Exception) { + print("catch") + 2 + } finally { + print("finaly") + 3 + } + print(i as Int) +} \ No newline at end of file diff --git a/kotln/src/com/max/Functions.kt b/kotln/src/com/max/Functions.kt new file mode 100644 index 0000000..4e203e5 --- /dev/null +++ b/kotln/src/com/max/Functions.kt @@ -0,0 +1,5 @@ +package com.max +fun main(args: Array) { + +} +fun add(a: Int, b: Int) = a + b; \ No newline at end of file diff --git a/kotln/src/com/max/GenericVarience.kt b/kotln/src/com/max/GenericVarience.kt new file mode 100644 index 0000000..a164b59 --- /dev/null +++ b/kotln/src/com/max/GenericVarience.kt @@ -0,0 +1,20 @@ +package com.max + +fun main(args: Array) { + var list :List = ArrayList() + var producer :Producer = Producer() + var producer2 :Producer2 = Producer2() + var producer3 :Producer<*> = Producer() + var producer4 :Producer2<*> = Producer2() +} +class Producer { +// operator fun invoke():T +} +class Producer2 { + fun produce(t: T) {} +} +class Producer3 { +// operator fun invoke(t: T): R +} +open class Animal {} +class Cat : Animal() {} \ No newline at end of file diff --git a/kotln/src/com/max/Generics.kt b/kotln/src/com/max/Generics.kt new file mode 100644 index 0000000..46a33e1 --- /dev/null +++ b/kotln/src/com/max/Generics.kt @@ -0,0 +1,22 @@ +package com.max + +fun main(args: Array) { + val authors = listOf("Dmitry", "Svetlana") + val authors2 = listOf("Dmitry", 2) + val authors3: List = listOf("Dmitry", "Sveta") +// val authors4: List = listOf("Dmitry", "Sveta") +} + +fun gen(t: T, predicate: (T) -> T): T { + return t +} +interface MyList { + operator fun get(t: T): T = t +} +class StringList: MyList { +} +class GenericList: MyList { +} +fun oneHalf(value: T): Double { + return value.toDouble() / 2.0 +} \ No newline at end of file diff --git a/kotln/src/com/max/GenericsInRuntime.kt b/kotln/src/com/max/GenericsInRuntime.kt new file mode 100644 index 0000000..9d54a21 --- /dev/null +++ b/kotln/src/com/max/GenericsInRuntime.kt @@ -0,0 +1,18 @@ +package com.max + +import java.util.* +import javax.xml.ws.Service + +fun main(args: Array) { + var value: List = ArrayList() + check(value) + + val items = listOf("one", 2, "three") + println(items.filterIsInstance()) +} +fun check(value: Any) { +// value is List + value is List<*> +} +//fun isA(value: Any) = value is T +inline fun isA(value: Any) = value is T \ No newline at end of file diff --git a/kotln/src/com/max/Hierarhies.kt b/kotln/src/com/max/Hierarhies.kt new file mode 100644 index 0000000..12125d3 --- /dev/null +++ b/kotln/src/com/max/Hierarhies.kt @@ -0,0 +1,42 @@ +package com.max + +fun main(args: Array) { + var b: Clickable + b = Button(5) +} +interface Clickable{ + fun click(); + fun showOff() = println("I'm clickable!") +} +interface Focusable { + fun showOff() = println("focus") +} + +class Button(i:Int) : Clickable, Focusable { + override fun click() = println("I was clicked") + override fun showOff() = println("I'm Button!") +} + +open class RichButton : Clickable { + final override fun click() {} +} + +abstract class Animated { + abstract fun animate() + open fun stopAnimating() {} + private fun animateTwice() {} +} + +internal open class TalkativeButton : Focusable +{ private fun yell() = println("Hey!") + protected fun whisper() = println("Let's talk!") +} +var two = One().Two(); +class One { + inner class Two{} +} + +sealed class Expr { + class Num(val value: Int) : Expr() {} +} +class Sum() : Expr() {} \ No newline at end of file diff --git a/kotln/src/com/max/HighOrderFunctions.kt b/kotln/src/com/max/HighOrderFunctions.kt new file mode 100644 index 0000000..f959f05 --- /dev/null +++ b/kotln/src/com/max/HighOrderFunctions.kt @@ -0,0 +1,23 @@ +package com.max + +fun main(args: Array) { + val sum = { x: Int, y: Int -> x + y } + val action = { println(42) } + val sum2: (Int, Int) -> Int = { x, y -> x + y } + val action2: () -> Unit = { println(42) } + + twoAndThree { a, b -> a + b } + twoAndThree { a, b -> a * b } +} +fun twoAndThree(operation: (Int, Int) -> Int) { + val result = operation(2, 3) + println("The result is $result") +} +fun toString(transform: (it: Int) -> String? = { it.toString() }) {} + +fun getShippingCostCalculator(bool: Boolean): (i: Int) -> Double { + if (bool) { + return { i -> i * 1.5 } + } + return { i -> i * 1.3 } +} \ No newline at end of file diff --git a/kotln/src/com/max/InlineFunctions.kt b/kotln/src/com/max/InlineFunctions.kt new file mode 100644 index 0000000..2c91090 --- /dev/null +++ b/kotln/src/com/max/InlineFunctions.kt @@ -0,0 +1,30 @@ +package com.max + +import java.util.concurrent.locks.Lock + +fun main(args: Array) { + println(people.filter { it.age < 30 }) +} +inline fun synchronized(lock: Lock, noinline action: () -> T): T { + lock.lock() + try { + test(action) + return action() + } + finally { + lock.unlock() + } +} +fun test(action: () -> T) {} + +fun foo(l: Lock) { + println("Before sync") + synchronized(l) { + println("Action") + } + println("Action") +} +///////////collections +data class Person2(val name: String, val age: Int) +val people = listOf(Person2("Alice", 29), Person2("Bob", 31)) + diff --git a/kotln/src/com/max/Lambda.kt b/kotln/src/com/max/Lambda.kt new file mode 100644 index 0000000..fdfeab9 --- /dev/null +++ b/kotln/src/com/max/Lambda.kt @@ -0,0 +1,53 @@ +package com.max + +fun main(args: Array) { + val sum = { x: Int, y: Int -> x + y } + sum(1,2); + { println(42) }() + run { println(42) }; + { x: Int, y: Int -> print(x + y); print("" + x + y) }(1,2) + val getAge = { person: P -> person.age() } + val getAge2 = P::age + fun salute() = println("Salute!") + run(::salute) +// val action = { s: String, integer: Int -> +// two(s, integer) +// } +// val nextAction = ::two + val personContructor = ::P + val person = personContructor() + person.age() + + fun P.isAdult() = age() >= 21 + val predicate = P::isAdult + person.isAdult() +} +//fun two(s: String, integer: Int){} +class P() { + fun age(): Int = 5 +} +////////////////////// +class Person(var name: String, var age: Int) +fun collection() { + val list = listOf(1, 2, 3, 4) + list.filter { it % 2 == 0 } + list.map { it * it } + + val people = listOf(Person("Alice", 29), Person("Bob", 31)) + people.map { it.age > 30 } + people.map(Person::name) + + people.filter { it.age > 30 }.map(Person::name) + people.asSequence().filter { it.age > 30 }.map(Person::name).toList() + + val numbers = mapOf(0 to "zero", 1 to "one") + println(numbers.mapValues { it.value.toUpperCase() }) + + val canBeInClub27 = { p: Person -> p.age <= 27 } + println(people.all(canBeInClub27)) + println(people.any(canBeInClub27)) + println(!people.any(canBeInClub27)) + println(people.count(canBeInClub27)) + println(people.find(canBeInClub27))//first matching or null + println(people.groupBy { it.age }) +} \ No newline at end of file diff --git a/kotln/src/com/max/Loop.kt b/kotln/src/com/max/Loop.kt new file mode 100644 index 0000000..6249805 --- /dev/null +++ b/kotln/src/com/max/Loop.kt @@ -0,0 +1,14 @@ +package com.max +fun main(args: Array) { + var i = 1..10 + for(j in i) + print(j) + for(i in 10 downTo 1 step 1) + print(i) + for(i in 1..10) + print(i) + for(i in 1 until 10) + print(i) + for(j in i) + if(j !in 5..10) print(j) +} diff --git a/kotln/src/com/max/Main.kt b/kotln/src/com/max/Main.kt new file mode 100644 index 0000000..90cc8ee --- /dev/null +++ b/kotln/src/com/max/Main.kt @@ -0,0 +1,3 @@ +package com.max + +fun main(args: Array) {} \ No newline at end of file diff --git a/kotln/src/com/max/ObjectKeyword.kt b/kotln/src/com/max/ObjectKeyword.kt new file mode 100644 index 0000000..2824ab3 --- /dev/null +++ b/kotln/src/com/max/ObjectKeyword.kt @@ -0,0 +1,31 @@ +package com.max + +fun main(args: Array) { +// Bar.i = 6 +// Bar.printI() +// Bar2.Foo +// Bar2.getI() + var bar = Bar2.getBar() + var runnable = object : Runnable { + override fun run() { + //new thread + } + } +} + +object Bar { + var i = 5 + fun printI() { + print(i) + } + object Foo {} +} + +class Bar2 { + private constructor() + companion object Foo { + fun getBar() { + Bar2() + } + } +} \ No newline at end of file diff --git a/kotln/src/com/max/OverloadOperations.kt b/kotln/src/com/max/OverloadOperations.kt new file mode 100644 index 0000000..6052dea --- /dev/null +++ b/kotln/src/com/max/OverloadOperations.kt @@ -0,0 +1,60 @@ +package com.max + +import java.math.BigDecimal + +fun main(args: Array) { + val p1 = Point(10, 20) + val p2 = Point(30, 40) + println(p1 + p2) + var point = Point(1, 2) + point += Point(3, 4) + println(point) + + val list = arrayListOf(1, 2) + list += 3 + val newList = list + listOf(4, 5) + println(list) + println(newList) + + val p = Point(10, 20) + println(-p) + + /////compare + print(Point(0,0) == Point(0,0)) + print(Point(0,0) === Point(0,0)) + print(Point(0,0).equals(Point(0,0))) + + print(Point(0,0) > (Point(0,0))) + + ////collections and arrays + println(p[1]) + println(5 in Point(20, 30)) + + //destructing declaration +// val (x, y) = p +// println(x) +// println(y) +} +data class Point(val x: Int, val y: Int) : Comparable { + operator fun plus(other: Point): Point { + return Point(x + other.x, y + other.y) + } + operator fun unaryMinus(): Point { + return Point(-x, -y) + } +// operator fun inc(): Point { +// return Point(--x, --y) +// } + override fun compareTo(other: Point): Int { + return compareValuesBy(this, other, Point::x, Point::y) + } + operator fun get(index: Int): Int { + return when(index) {0 -> x 1 -> y else -> throw IndexOutOfBoundsException("Invalid coordinate $index") } + } + operator fun contains(i: Int): Boolean { + return i in this.x until this.y + } +// operator fun component1() = x +// operator fun component2() = y +} +operator fun BigDecimal.inc() = this + BigDecimal.ONE \ No newline at end of file diff --git a/kotln/src/com/max/Reflection.kt b/kotln/src/com/max/Reflection.kt new file mode 100644 index 0000000..8f4985d --- /dev/null +++ b/kotln/src/com/max/Reflection.kt @@ -0,0 +1,31 @@ +package com.max + +import kotlin.reflect.KFunction +import kotlin.reflect.full.memberProperties + +fun main(args: Array) { + val person = Person33("Alice", 29) + val kClass = person.javaClass.kotlin + println(kClass.simpleName) + kClass.memberProperties.forEach { println(it.name) } + + val kFunction = ::foo22 + kFunction.call(42) + + val kFunction2 = ::sum22 + println(kFunction2.invoke(1, 2) + kFunction2(3, 4)) + + val kProperty = ::counter + kProperty.setter.call(21) + println(kProperty.get()) + + val memberProperty = Person33::age + println(memberProperty.get(person)) +} + +class Person33(val name: String, val age: Int) + +fun foo22(x: Int) = println(x) +fun sum22(x: Int, y: Int) = x + y + +var counter = 0 \ No newline at end of file diff --git a/kotln/src/com/max/TypeSystem.kt b/kotln/src/com/max/TypeSystem.kt new file mode 100644 index 0000000..fa13f39 --- /dev/null +++ b/kotln/src/com/max/TypeSystem.kt @@ -0,0 +1,27 @@ +package com.max + +fun main(args: Array) { + var n: String? + n = "" +// n = null + strLen(n) + val x: String? = null +// var y: String = x + strLen2(x) + strLen2(x ?: "")//if null set "" + + var str = n as? String + val sNotNull: String = str!!//null pointer exception + + val s: String? = "" +// strLen(s) + s?.let { s -> strLen(s)} +} +fun strLen(s: String) = s.length +fun strLen2(s: String?) = if (s != null) s.length else 0 +fun strLen3(s: String?) = s?.length +class TypeSystem { + private lateinit var myString: String +} +fun String?.isNullOrBlank(): Boolean = + this == null || this.isBlank() \ No newline at end of file diff --git a/kotln/src/com/max/Variables.kt b/kotln/src/com/max/Variables.kt new file mode 100644 index 0000000..1aba14a --- /dev/null +++ b/kotln/src/com/max/Variables.kt @@ -0,0 +1,6 @@ +package com.max +fun main(args: Array) { + var a: Int + var b: String + var c = 5 +} diff --git a/mongo/resources/META-INF/persistence.xml b/mongo/resources/META-INF/persistence.xml new file mode 100644 index 0000000..7bd5823 --- /dev/null +++ b/mongo/resources/META-INF/persistence.xml @@ -0,0 +1,18 @@ + + + + org.eclipse.persistence.jpa.PersistenceProvider + entity.User + + + + + + + + + \ No newline at end of file diff --git a/mongo/src/ArrayInsert.java b/mongo/src/ArrayInsert.java new file mode 100644 index 0000000..e31aa6c --- /dev/null +++ b/mongo/src/ArrayInsert.java @@ -0,0 +1,26 @@ +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import org.bson.Document; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class ArrayInsert { + public static void main(String args[]) { + try { + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection coll = db.getCollection("users"); + List documents = new ArrayList(); + for (int i = 0; i < 10; i++) { + documents.add(new Document("key", UUID.randomUUID().toString())); + } + coll.insertMany(documents); + } catch (Exception e) { + System.err.println(e.getClass().getName() + ": " + + e.getMessage()); + } + } +} diff --git a/mongo/src/BulkInsert.java b/mongo/src/BulkInsert.java new file mode 100644 index 0000000..ffbb74c --- /dev/null +++ b/mongo/src/BulkInsert.java @@ -0,0 +1,25 @@ +import com.mongodb.MongoClient; +import com.mongodb.bulk.BulkWriteResult; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.InsertOneModel; +import com.mongodb.client.model.WriteModel; +import org.bson.Document; + +import java.util.ArrayList; +import java.util.List; + +public class BulkInsert { + public static void main(String[] args) { + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection users = db.getCollection("users"); + + List> documents = new ArrayList<>(); + documents.add(new InsertOneModel<>(new Document("name", "Den").append("age", 33))); + documents.add(new InsertOneModel<>(new Document("name", "Yen").append("age", 44))); + + BulkWriteResult bulkWriteResult = users.bulkWrite(documents); + System.out.println(bulkWriteResult.getMatchedCount()); + } +} diff --git a/mongo/src/EmbeddedInsert.java b/mongo/src/EmbeddedInsert.java new file mode 100644 index 0000000..8bce17a --- /dev/null +++ b/mongo/src/EmbeddedInsert.java @@ -0,0 +1,20 @@ +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import org.bson.Document; + +public class EmbeddedInsert { + public static void main( String args[] ){ + try{ + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection coll = db.getCollection("users"); + Document doc = new Document("name", "louis").append("age", 29).append("info", + new Document("email", "louis@mail.com").append("phone", "876-134-667")); + coll.insertOne(doc); + } + catch(Exception e){ + System.err.println( e.getClass().getName() + ": " + e.getMessage() ); + } + } +} diff --git a/mongo/src/HelloMongo.java b/mongo/src/HelloMongo.java new file mode 100644 index 0000000..7e37b2d --- /dev/null +++ b/mongo/src/HelloMongo.java @@ -0,0 +1,15 @@ +import com.mongodb.MongoClient; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.MongoIterable; + +public class HelloMongo { + public static void main( String args[] ){ + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + db.createCollection("myCollection"); + MongoIterable strings = db.listCollectionNames(); + for (String name : strings) { + System.out.println(name); + } + } +} diff --git a/mongo/src/HiberExample.java b/mongo/src/HiberExample.java new file mode 100644 index 0000000..61b812b --- /dev/null +++ b/mongo/src/HiberExample.java @@ -0,0 +1,19 @@ +import entity.User; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +public class HiberExample { + public static void main(String[] args) throws InterruptedException { + EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("mongo-ogm"); + EntityManager entityManager = entityManagerFactory.createEntityManager(); + + entityManager.getTransaction().begin(); + entityManager.persist(new User("Max3", 33)); + entityManager.getTransaction().commit(); + + entityManager.close(); + entityManagerFactory.close(); + } +} \ No newline at end of file diff --git a/mongo/src/Indexes.java b/mongo/src/Indexes.java new file mode 100644 index 0000000..ee84fda --- /dev/null +++ b/mongo/src/Indexes.java @@ -0,0 +1,20 @@ +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import org.bson.Document; + +import static com.mongodb.client.model.Filters.eq; + +public class Indexes { + public static void main(String[] args) { + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection users = db.getCollection("users"); + users.createIndex(new BasicDBObject("name",1).append("age", 1)); + users.createIndex(new BasicDBObject("name", "text")); + DBObject search = new BasicDBObject("$search", "mytext"); + users.find(eq("$text", search)); + } +} diff --git a/mongo/src/Main.java b/mongo/src/Main.java new file mode 100644 index 0000000..dffc123 --- /dev/null +++ b/mongo/src/Main.java @@ -0,0 +1,12 @@ +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import org.bson.Document; + +public class Main { + public static void main(String[] args) { + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection users = db.getCollection("users"); + } +} \ No newline at end of file diff --git a/mongo/src/MongoAuth.java b/mongo/src/MongoAuth.java new file mode 100644 index 0000000..84d67d6 --- /dev/null +++ b/mongo/src/MongoAuth.java @@ -0,0 +1,18 @@ +import com.mongodb.MongoClient; +import com.mongodb.MongoCredential; +import com.mongodb.ServerAddress; +import com.mongodb.client.MongoDatabase; + +import java.util.Arrays; +import java.util.List; + +public class MongoAuth { + public static void main( String args[] ){ + MongoCredential credential = MongoCredential.createPlainCredential("root", "test", "1".toCharArray()); + List mongoCredentials = Arrays.asList(credential); + ServerAddress serverAddress = new ServerAddress("localhosst", 27017); + MongoClient mongoClient = new MongoClient(serverAddress, mongoCredentials); + MongoDatabase db = mongoClient.getDatabase("test");; + System.out.println("Successfully connected to MongoDB"); + } +} diff --git a/mongo/src/SampleDelete.java b/mongo/src/SampleDelete.java new file mode 100644 index 0000000..9e238e4 --- /dev/null +++ b/mongo/src/SampleDelete.java @@ -0,0 +1,19 @@ +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.result.DeleteResult; +import org.bson.Document; + +import static com.mongodb.client.model.Filters.eq; + +public class SampleDelete { + public static void main( String args[] ){ + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection users = db.getCollection("users"); + users.deleteOne(eq("name", "max")); + DeleteResult deleteResult = users.deleteMany(eq("name", "max")); + System.out.println(deleteResult.getDeletedCount()); + users.drop(); + } +} diff --git a/mongo/src/SampleInsert.java b/mongo/src/SampleInsert.java new file mode 100644 index 0000000..3fb6cc5 --- /dev/null +++ b/mongo/src/SampleInsert.java @@ -0,0 +1,19 @@ +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import org.bson.Document; + +public class SampleInsert { + public static void main( String args[] ){ + try{ + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection coll = db.getCollection("users"); + Document doc = new Document("name", "Max").append("age", 25) .append("phone", "321-654-987"); + coll.insertOne(doc); + } + catch(Exception e){ + System.err.println( e.getClass().getName() + ": " + e.getMessage() ); + } + } +} diff --git a/mongo/src/SampleQuery.java b/mongo/src/SampleQuery.java new file mode 100644 index 0000000..aba651b --- /dev/null +++ b/mongo/src/SampleQuery.java @@ -0,0 +1,23 @@ +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.MongoDatabase; +import org.bson.Document; + +public class SampleQuery { + public static void main( String args[] ){ + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection coll = db.getCollection("users"); + System.out.println(coll.count()); + + MongoCursor cursor = coll.find().iterator(); +// MongoCursor cursor1 = coll.find().skip(100).limit(5).iterator(); +// MongoCursor cursor2 = coll.find(eq("name", "john")).iterator(); +// MongoCursor cursor3 = coll.find(and(gt("age", 20), lte("age", 40))).iterator(); + while (cursor.hasNext()) { + Document doc = cursor.next(); + System.out.println(doc.toJson()); + } + } +} diff --git a/mongo/src/SampleUpdate.java b/mongo/src/SampleUpdate.java new file mode 100644 index 0000000..f9dc60d --- /dev/null +++ b/mongo/src/SampleUpdate.java @@ -0,0 +1,18 @@ +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.result.UpdateResult; +import org.bson.Document; + +import static com.mongodb.client.model.Filters.eq; + +public class SampleUpdate { + public static void main( String args[] ){ + MongoClient mongoClient = new MongoClient("localhost", 27017); + MongoDatabase db = mongoClient.getDatabase("test"); + MongoCollection coll = db.getCollection("users"); + coll.updateOne(eq("name", "max"), new Document("$set", new Document("age", 50))); + UpdateResult updateResult = coll.updateMany(eq("name", "john"), new Document("$set", new Document("age", 50))); + System.out.println(updateResult.getModifiedCount()); + } +} diff --git a/mongo/src/entity/User.java b/mongo/src/entity/User.java new file mode 100644 index 0000000..439cb49 --- /dev/null +++ b/mongo/src/entity/User.java @@ -0,0 +1,52 @@ +package entity; + +import org.eclipse.persistence.nosql.annotations.DataFormatType; +import org.eclipse.persistence.nosql.annotations.Field; +import org.eclipse.persistence.nosql.annotations.NoSql; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +@NoSql(dataFormat= DataFormatType.MAPPED) +public class User { + @Id + @GeneratedValue + @Field(name="_id") + private String id; + String name; + int age; + + public User() { + } + + public User(String name, int age) { + this.name = name; + this.age = age; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } +} diff --git a/spark/pom.xml b/spark/pom.xml new file mode 100644 index 0000000..23d89e0 --- /dev/null +++ b/spark/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + com.max + spark + 1.0-SNAPSHOT + jar + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + org.apache.spark + spark-core_2.11 + 2.2.0 + + + org.apache.spark + spark-hive_2.11 + 2.2.0 + + + mysql + mysql-connector-java + 6.0.6 + + + org.apache.spark + spark-streaming_2.11 + 2.2.0 + + + + \ No newline at end of file diff --git a/spark/src/main/java/com/max/BasicActions.java b/spark/src/main/java/com/max/BasicActions.java new file mode 100644 index 0000000..0a8b36b --- /dev/null +++ b/spark/src/main/java/com/max/BasicActions.java @@ -0,0 +1,26 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; + +import java.util.Arrays; + +public class BasicActions { + public static void main(String[] args) { + SparkConf conf = new SparkConf().setMaster("local").setAppName("wordCount"); + JavaSparkContext sc = new JavaSparkContext(conf); + + JavaRDD list = sc.parallelize(Arrays.asList(1, 2, 3)); + System.out.println(list.reduce((x,y) -> x + y)); + System.out.println(list.fold(0, (x,y) -> x + y)); +// System.out.println(list.aggregate(0, (x,y) -> x + y)); + System.out.println(list.collect()); + System.out.println(list.take(2)); + System.out.println(list.top(2)); + System.out.println(list.takeSample(false, 2)); + list.foreach(x -> System.out.print(x)); + System.out.println(list.count()); + System.out.println(list.countByValue()); + } +} diff --git a/spark/src/main/java/com/max/BasicTransformations.java b/spark/src/main/java/com/max/BasicTransformations.java new file mode 100644 index 0000000..856ca58 --- /dev/null +++ b/spark/src/main/java/com/max/BasicTransformations.java @@ -0,0 +1,35 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; + +import java.util.ArrayList; +import java.util.Arrays; + +public class BasicTransformations { + public static void main(String[] args) { + SparkConf conf = new SparkConf().setMaster("local").setAppName("wordCount"); + JavaSparkContext sc = new JavaSparkContext(conf); + + JavaRDD list = sc.parallelize(Arrays.asList(1, 2, 3)); + System.out.println("list"); + list.foreach(f -> System.out.println(f)); + JavaRDD map = list.map(i -> i * i); + System.out.println("map"); + map.foreach(f -> System.out.println(f)); + JavaRDD filter = map.filter(i -> i != 1); + System.out.println("filter"); + filter.foreach(f -> System.out.println(f)); + JavaRDD flatMap = filter.flatMap(s -> new ArrayList(Arrays.asList(s, s + s)).iterator()); + System.out.println("flatMap"); + flatMap.foreach(f -> System.out.println(f)); + + JavaRDD list1 = sc.parallelize(Arrays.asList(1, 1, 2, 3)); + JavaRDD list2 = sc.parallelize(Arrays.asList(3, 4)); + list1.distinct().foreach(x -> System.out.println(x)); + list1.union(list2).foreach(x -> System.out.println(x)); + list1.intersection(list2).foreach(x -> System.out.println(x)); + list1.subtract(list2).foreach(x -> System.out.println(x)); + } +} diff --git a/spark/src/main/java/com/max/CachLesson.java b/spark/src/main/java/com/max/CachLesson.java new file mode 100644 index 0000000..3e41b70 --- /dev/null +++ b/spark/src/main/java/com/max/CachLesson.java @@ -0,0 +1,26 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.storage.StorageLevel; + +import java.util.Arrays; + +public class CachLesson { + public static void main(String[] args) { + SparkConf conf = new SparkConf().setMaster("local").setAppName("wordCount"); + JavaSparkContext sc = new JavaSparkContext(conf); + + JavaRDD list = sc.parallelize(Arrays.asList(1, 2, 3)); + list.persist(StorageLevel.MEMORY_ONLY()); + list.persist(StorageLevel.MEMORY_ONLY_SER()); + list.persist(StorageLevel.MEMORY_AND_DISK()); + list.persist(StorageLevel.MEMORY_AND_DISK_SER()); + list.persist(StorageLevel.DISK_ONLY()); + System.out.println(list.count()); + System.out.println(list.collect()); + list.unpersist(); + System.out.println(list.count()); + } +} diff --git a/spark/src/main/java/com/max/FileSystem.java b/spark/src/main/java/com/max/FileSystem.java new file mode 100644 index 0000000..7435c06 --- /dev/null +++ b/spark/src/main/java/com/max/FileSystem.java @@ -0,0 +1,46 @@ +package com.max; + +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapred.SequenceFileOutputFormat; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import scala.Tuple2; + +public class FileSystem { + public static void main(String[] args) { + SparkConf conf = new SparkConf().setMaster("local").setAppName("wordCount"); + JavaSparkContext sc = new JavaSparkContext(conf); + + JavaRDD textFile = sc.textFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/test.txt"); + JavaPairRDD wholeTextFiles = sc.wholeTextFiles("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/test.txt"); + textFile.saveAsTextFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/test2.txt"); + wholeTextFiles.saveAsTextFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/test3.txt"); + JavaRDD textFile2 = sc.textFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/test2.txt"); + System.out.println(textFile2.collect()); + + textFile2.saveAsObjectFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/object"); + JavaRDD objectJavaRDD = sc.objectFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/object"); + System.out.println(objectJavaRDD.collect()); + + JavaPairRDD sequence = textFile2.mapToPair(record -> new Tuple2(new Text(record), new IntWritable())); + sequence.saveAsHadoopFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/haddop", + Text.class, IntWritable.class, SequenceFileOutputFormat.class); + + JavaPairRDD sequenceFile = sc.sequenceFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/haddop", + Text.class, IntWritable.class); + sequenceFile.map(f -> f._1().toString()).foreach(x -> System.out.println(x)); + +// sequence.saveAsNewAPIHadoopFile("/home/max/IdeaProjects/JavaLessons/spark/src/main/resources/haddop", +// Text.class, IntWritable.class, KeyValueTextInputFormat.class); +// sc.hadoopFile("", KeyValueTextInputFormat.class, IntWritable.class); + + sc.textFile("file://test.txt"); + sc.textFile("s3n://test.txt"); + sc.textFile("hdfs://test.txt"); + + + } +} diff --git a/spark/src/main/java/com/max/JdbcLesson.java b/spark/src/main/java/com/max/JdbcLesson.java new file mode 100644 index 0000000..e764e2d --- /dev/null +++ b/spark/src/main/java/com/max/JdbcLesson.java @@ -0,0 +1,24 @@ +package com.max; + +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SparkSession; + +public class JdbcLesson { + public static void main(String[] args) { + SparkSession spark = SparkSession + .builder() + .master("local") + .appName("Java Spark SQL basic example") + .getOrCreate(); + Dataset jdbcDF = spark.read() + .format("jdbc") + .option("driver", "com.mysql.jdbc.Driver") + .option("url", "jdbc:mysql://localhost:3306/Lessons") + .option("dbtable", "user") + .option("user", "root") + .option("password", "1") + .load(); + jdbcDF.show(); + } +} diff --git a/spark/src/main/java/com/max/Main.java b/spark/src/main/java/com/max/Main.java new file mode 100644 index 0000000..e48b05b --- /dev/null +++ b/spark/src/main/java/com/max/Main.java @@ -0,0 +1,19 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.streaming.Durations; +import org.apache.spark.streaming.api.java.JavaReceiverInputDStream; +import org.apache.spark.streaming.api.java.JavaStreamingContext; + +import java.io.FileNotFoundException; + +public class Main { + public static void main(String[] args) throws FileNotFoundException, InterruptedException { + SparkConf conf = new SparkConf().setMaster("local").setAppName("SparkApp"); + JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(2)); + JavaReceiverInputDStream locahost = jssc.socketTextStream("localhost", 9999); + locahost.foreachRDD(x -> System.out.println(x.collect())); + jssc.start(); + jssc.awaitTermination(); + } +} \ No newline at end of file diff --git a/spark/src/main/java/com/max/PairRddLesson.java b/spark/src/main/java/com/max/PairRddLesson.java new file mode 100644 index 0000000..cc42673 --- /dev/null +++ b/spark/src/main/java/com/max/PairRddLesson.java @@ -0,0 +1,50 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import scala.Tuple2; + +import java.util.Arrays; +import java.util.List; + +public class PairRddLesson { + public static void main(String[] args) { + SparkConf conf = new SparkConf().setMaster("local").setAppName("SparkApp"); + JavaSparkContext sc = new JavaSparkContext(conf); + +// Tuple2 tuple2 = new Tuple2("one", "two"); +// System.out.println(tuple2._1()); +// System.out.println(tuple2._2()); + + //reduceByKey + List> list = Arrays.asList(new Tuple2("one", "two"), new Tuple2("three", "four")); + JavaPairRDD listMapPair = sc.parallelizePairs(list); + + JavaRDD lines = sc.parallelize(Arrays.asList("one", "two", "three", "four")); + JavaPairRDD mapPair = lines.mapToPair(s -> new Tuple2(s, s)); + + System.out.println(listMapPair.collect()); + System.out.println(mapPair.collect()); + + JavaPairRDD notOne = listMapPair.filter((x) -> !x._1().equals("one")); + System.out.println(notOne.collect()); + + JavaPairRDD reducePairMap = sc.parallelizePairs(Arrays.asList(new Tuple2("one", "1"), new Tuple2("one", "2"), new Tuple2("two", "3"))); + JavaPairRDD reduceByKey = reducePairMap.reduceByKey((x,y) -> x + y, 5); + System.out.println(reduceByKey.collect()); + + JavaPairRDD> groupByKey = reducePairMap.groupByKey(); + System.out.println(groupByKey.collect()); + + JavaPairRDD join1 = sc.parallelizePairs(Arrays.asList(new Tuple2("one", "1"), new Tuple2("two", "2"))); + JavaPairRDD join2 = sc.parallelizePairs(Arrays.asList(new Tuple2("one", "3"))); + JavaPairRDD> join = join1.join(join2); + System.out.println(join.collect()); + + JavaPairRDD sort = sc.parallelizePairs(Arrays.asList(new Tuple2("a", "1"), new Tuple2("c", "3"), new Tuple2("b", "2"))); + JavaPairRDD sortByKey = sort.sortByKey(); + System.out.println(sortByKey.collect()); + } +} diff --git a/spark/src/main/java/com/max/Person.java b/spark/src/main/java/com/max/Person.java new file mode 100644 index 0000000..5a7b01c --- /dev/null +++ b/spark/src/main/java/com/max/Person.java @@ -0,0 +1,30 @@ +package com.max; + +import java.io.Serializable; + +public class Person implements Serializable { + String name; + int age; + + public Person() {} + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } +} diff --git a/spark/src/main/java/com/max/RddLesson.java b/spark/src/main/java/com/max/RddLesson.java new file mode 100644 index 0000000..87cc82e --- /dev/null +++ b/spark/src/main/java/com/max/RddLesson.java @@ -0,0 +1,22 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; + +import java.util.Arrays; + +public class RddLesson { + public static void main(String[] args) { + SparkConf conf = new SparkConf().setMaster("local").setAppName("wordCount"); + JavaSparkContext sc = new JavaSparkContext(conf); + + JavaRDD input = sc.textFile("spark/src/main/resources/test.txt"); + JavaRDD parallelize = sc.parallelize(Arrays.asList("hello", "world")); + JavaRDD world = input.filter(s -> s.contains("world")); + System.out.println(parallelize.count()); + System.out.println(input.count()); + System.out.println(world.count()); + System.out.println(input.first()); + } +} diff --git a/spark/src/main/java/com/max/SharedVariables.java b/spark/src/main/java/com/max/SharedVariables.java new file mode 100644 index 0000000..5ed27e9 --- /dev/null +++ b/spark/src/main/java/com/max/SharedVariables.java @@ -0,0 +1,22 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.util.LongAccumulator; + +import java.util.Arrays; + +public class SharedVariables { + public static void main(String[] args) { + SparkConf conf = new SparkConf().setMaster("local").setAppName("wordCount"); + JavaSparkContext sc = new JavaSparkContext(conf); + +// Broadcast broadcastVar = sc.broadcast(new int[] {1, 2, 3}); +// System.out.println(broadcastVar.value()); + + LongAccumulator accum = sc.sc().longAccumulator(); +// sc.parallelize(Arrays.asList(1, 2, 3, 4)).foreach(x -> accum.add(x)); + sc.parallelize(Arrays.asList(1, 2, 3, 4)).map(x -> {accum.add(x);return x * 2;}).collect(); + System.out.println(accum.value()); + } +} diff --git a/spark/src/main/java/com/max/SqlLesson.java b/spark/src/main/java/com/max/SqlLesson.java new file mode 100644 index 0000000..a2c1b49 --- /dev/null +++ b/spark/src/main/java/com/max/SqlLesson.java @@ -0,0 +1,49 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SparkSession; + +import java.util.Arrays; + +import static org.apache.spark.sql.functions.col; + +public class SqlLesson { + public static void main(String[] args) { + SparkSession spark = SparkSession + .builder() + .master("local") + .appName("Java Spark SQL basic example") + .getOrCreate(); + Dataset df = spark.read().json("spark/src/main/resources/users.json"); + df.show(); + df.printSchema(); + df.select("name").show(); + df.select(col("name"), col("age").plus(1)).show(); + df.filter(col("age").gt(25)).show(); + df.groupBy("age").count().show(); + + df.createOrReplaceTempView("people"); + + Dataset sqlDF = spark.sql("SELECT * FROM people"); + sqlDF.show(); + + JavaRDD peopleRDD = spark.read().textFile("spark/src/main/resources/users.txt") + .javaRDD() + .map(line -> { + String[] parts = line.split(","); + Person person = new Person(); + person.setName(parts[0]); + person.setAge(Integer.parseInt(parts[1].trim())); + return person; + }); + SparkConf conf = new SparkConf().setMaster("local").setAppName("wordCount"); + JavaSparkContext sc = new JavaSparkContext(conf); + JavaRDD peopleRDD2 = sc.parallelize(Arrays.asList(new Person("Max", 22), new Person("Mike", 33))); + Dataset peopleDF = spark.createDataFrame(peopleRDD, Person.class); + peopleDF.show(); + } +} diff --git a/spark/src/main/java/com/max/StreamingLesson.java b/spark/src/main/java/com/max/StreamingLesson.java new file mode 100644 index 0000000..05cc041 --- /dev/null +++ b/spark/src/main/java/com/max/StreamingLesson.java @@ -0,0 +1,35 @@ +package com.max; + +import org.apache.spark.SparkConf; +import org.apache.spark.streaming.Durations; +import org.apache.spark.streaming.api.java.JavaDStream; +import org.apache.spark.streaming.api.java.JavaPairDStream; +import org.apache.spark.streaming.api.java.JavaReceiverInputDStream; +import org.apache.spark.streaming.api.java.JavaStreamingContext; +import scala.Tuple2; + +import java.util.Arrays; + +public class StreamingLesson { + public static void main(String[] args) throws InterruptedException { +// SparkConf conf = new SparkConf().setMaster("local").setAppName("wordCount"); +// JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(1)); +// JavaDStream lines = jssc.socketTextStream("localhost", 7777); +// JavaDStream errorLines = lines.filter(x -> x.contains("error")); +// errorLines.print(); +// jssc.start(); +// jssc.awaitTermination(); + + SparkConf conf = new SparkConf().setMaster("local").setAppName("NetworkWordCount"); + JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(1)); + JavaReceiverInputDStream lines = jssc.socketTextStream("localhost", 9999); +// JavaDStream logData = jssc.textFileStream("dirrectory"); + JavaDStream words = lines.flatMap(x -> Arrays.asList(x.split(" ")).iterator()); + JavaPairDStream pairs = words.mapToPair(s -> new Tuple2<>(s, 1)); + JavaPairDStream wordCounts = pairs.reduceByKey((i1, i2) -> i1 + i2); + wordCounts.print(); +// lines.foreachRDD(x -> System.out.println(x.collect())); + jssc.start(); + jssc.awaitTermination(); + } +} diff --git a/spark/src/main/resources/test.txt b/spark/src/main/resources/test.txt new file mode 100644 index 0000000..9db7df0 --- /dev/null +++ b/spark/src/main/resources/test.txt @@ -0,0 +1,2 @@ +hello +world \ No newline at end of file diff --git a/spark/src/main/resources/users.json b/spark/src/main/resources/users.json new file mode 100644 index 0000000..eee9408 --- /dev/null +++ b/spark/src/main/resources/users.json @@ -0,0 +1,2 @@ +{"name": "Max", "age": "22"} +{"name": "Mike", "age": "33"} \ No newline at end of file diff --git a/spark/src/main/resources/users.txt b/spark/src/main/resources/users.txt new file mode 100644 index 0000000..5ebc96f --- /dev/null +++ b/spark/src/main/resources/users.txt @@ -0,0 +1,2 @@ +Max,22 +Mike,33 \ No newline at end of file diff --git a/springweb/pom.xml b/springweb/pom.xml new file mode 100644 index 0000000..4ec4341 --- /dev/null +++ b/springweb/pom.xml @@ -0,0 +1,141 @@ + + + 4.0.0 + + com.max.web + springweb + 1.0-SNAPSHOT + war + + + + + org.eclipse.jetty + jetty-maven-plugin + 9.4.0.M0 + + src/main/resources/jetty.xml + + + + mysql + mysql-connector-java + 8.0.8-dmr + + + commons-dbcp + commons-dbcp + 1.2.2 + + + + + + + + + org.springframework + spring-context + 5.0.1.RELEASE + + + javax.inject + javax.inject + 1 + + + + org.springframework + spring-webmvc + 5.0.1.RELEASE + + + + javax.servlet + javax.servlet-api + 4.0.0 + provided + + + + org.springframework.webflow + spring-webflow + 2.4.6.RELEASE + + + + + org.springframework.security + spring-security-core + 5.0.0.M5 + + + + org.springframework.security + spring-security-web + 5.0.0.M5 + + + + org.springframework.security + spring-security-config + 5.0.0.M5 + + + + + commons-dbcp + commons-dbcp + 1.2.2 + + + + org.springframework + spring-jdbc + 5.0.1.RELEASE + + + + com.h2database + h2 + 1.4.196 + + + + mysql + mysql-connector-java + 8.0.8-dmr + + + + org.springframework + spring-orm + 5.0.1.RELEASE + + + + org.hibernate + hibernate-search-orm + 5.8.2.Final + + + org.springframework.data + spring-data-jpa + 2.0.1.RELEASE + + + + + spring-snapshot + Spring Snapshot Repository + http://repo.spring.io/snapshot + + + spring-milestone + Spring Milestone Repository + http://repo.spring.io/milestone + + + \ No newline at end of file diff --git a/springweb/src/main/java/com/max/web/MyFlowBean.java b/springweb/src/main/java/com/max/web/MyFlowBean.java new file mode 100644 index 0000000..c46f6a3 --- /dev/null +++ b/springweb/src/main/java/com/max/web/MyFlowBean.java @@ -0,0 +1,20 @@ +package com.max.web; + +import com.max.web.repo.User; +import org.springframework.stereotype.Component; + +@Component +public class MyFlowBean { + public void printHello() { + System.out.println("hello world"); + } + public boolean trueOrFalse() { + return false; + } + public void printUser(User user) { + System.out.println(user.getName()); + } + public void printI(int i) { + System.out.println(i); + } +} diff --git a/springweb/src/main/java/com/max/web/WebFlowActions.java b/springweb/src/main/java/com/max/web/WebFlowActions.java new file mode 100644 index 0000000..6bf3599 --- /dev/null +++ b/springweb/src/main/java/com/max/web/WebFlowActions.java @@ -0,0 +1,28 @@ +package com.max.web; + +import com.max.web.repo.User; +import org.springframework.stereotype.Component; + +@Component +public class WebFlowActions { + boolean b = true; + public void printHello() { + System.out.println("hello world"); + } + public void printI(int i) { + System.out.println(i); + } + public boolean isAvailable() { + b = !b; + return b; + } + public int getI() { + return 4; + } + public void printUser(User user) { + System.out.println(user.getName()); + } + public void printEnd() { + System.out.println("end"); + } +} diff --git a/springweb/src/main/java/com/max/web/config/DbConfig.java b/springweb/src/main/java/com/max/web/config/DbConfig.java new file mode 100644 index 0000000..fcab2e0 --- /dev/null +++ b/springweb/src/main/java/com/max/web/config/DbConfig.java @@ -0,0 +1,37 @@ +package com.max.web.config; + +//@Configuration +//@Import(HiberConfig.class) +//@Import(JpaConfig.class) +public class DbConfig { +// @Bean +// public DataSource dataSource() { +// DriverManagerDataSource ds = new DriverManagerDataSource(); +// ds.setDriverClassName("com.mysql.jdbc.Driver"); +// ds.setUrl("jdbc:mysql://localhost:3306/Lessons"); +// ds.setUsername("root"); +// ds.setPassword("1"); +// return ds; +// } +// @Bean +// public DataSource dataSource() { +// DriverManagerDataSource ds = new DriverManagerDataSource(); +// ds.setDriverClassName("org.h2.Driver"); +// ds.setUrl("jdbc:h2:~/test"); +// ds.setUsername("sa"); +// ds.setPassword(""); +// return ds; +// } +// @Bean +// public JndiObjectFactoryBean dataSource() { +// JndiObjectFactoryBean dataSource = new JndiObjectFactoryBean(); +// dataSource.setJndiName("jdbc/testDB"); +// dataSource.setResourceRef(true); +// dataSource.setProxyInterface(DataSource.class); +// return dataSource; +// } +// @Bean +// public JdbcTemplate jdbcTemplate(DataSource dataSource) { +// return new JdbcTemplate(dataSource); +// } +} diff --git a/springweb/src/main/java/com/max/web/config/HiberConfig.java b/springweb/src/main/java/com/max/web/config/HiberConfig.java new file mode 100644 index 0000000..21d6a00 --- /dev/null +++ b/springweb/src/main/java/com/max/web/config/HiberConfig.java @@ -0,0 +1,24 @@ +package com.max.web.config; + +//@Configuration +//@EnableTransactionManagement +public class HiberConfig { +// @Bean +// public LocalSessionFactoryBean sessionFactory(DataSource dataSource) { +// LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); +// localSessionFactoryBean.setDataSource(dataSource); +// localSessionFactoryBean.setPackagesToScan(new String[] { "com.max.web.entities" }); +// Properties props = new Properties(); +// props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); +// props.setProperty("hibernate.show_sql", "true"); +// props.setProperty("hibernate.hbm2ddl.auto", "create-drop"); +// localSessionFactoryBean.setHibernateProperties(props); +// return localSessionFactoryBean; +// } +// @Bean("myTransaction") +// public HibernateTransactionManager txManager(SessionFactory sessionFactory) { +// HibernateTransactionManager txManager = new HibernateTransactionManager(); +// txManager.setSessionFactory(sessionFactory); +// return txManager; +// } +} diff --git a/springweb/src/main/java/com/max/web/config/JpaConfig.java b/springweb/src/main/java/com/max/web/config/JpaConfig.java new file mode 100644 index 0000000..ba077d9 --- /dev/null +++ b/springweb/src/main/java/com/max/web/config/JpaConfig.java @@ -0,0 +1,29 @@ +package com.max.web.config; + +//@Configuration +//@EnableTransactionManagement +//@EnableJpaRepositories("com.max.web") +public class JpaConfig { +// @Bean +// public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) { +// LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean(); +// bean.setDataSource(dataSource); +// bean.setJpaVendorAdapter(jpaVendorAdapter); +// bean.setPackagesToScan("com.max.web.entities"); +// bean.setPersistenceUnitName("localJpa"); +// return bean; +// } +// @Bean +// public JpaTransactionManager txManager() { +// return new JpaTransactionManager(); +// } +// @Bean +// public JpaVendorAdapter jpaVendorAdapter() { +// HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); +// adapter.setDatabase(Database.MYSQL); +// adapter.setShowSql(true); +// adapter.setGenerateDdl(true); +// adapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect"); +// return adapter; +// } +} diff --git a/springweb/src/main/java/com/max/web/config/MyWebConfig.java b/springweb/src/main/java/com/max/web/config/MyWebConfig.java new file mode 100644 index 0000000..07d71dc --- /dev/null +++ b/springweb/src/main/java/com/max/web/config/MyWebConfig.java @@ -0,0 +1,40 @@ +package com.max.web.config; + +import com.max.web.webconfig.MySecurityConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.view.InternalResourceViewResolver; + +@Configuration +@EnableWebMvc +@ComponentScan({"com.max.web","com.max.web.controllers"}) +@Import(MySecurityConfig.class) +public class MyWebConfig { + @Bean + public ViewResolver getViewResolver() { + InternalResourceViewResolver resolver = new InternalResourceViewResolver(); + resolver.setPrefix("/WEB-INF/views/"); + resolver.setSuffix(".jsp"); + resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class); + return resolver; + } + +// @Bean +// public MultipartResolver multipartResolver() throws IOException { +// return new StandardServletMultipartResolver(); +// } + +// @Bean +// public MultipartResolver multipartResolver() { +// return new CommonsMultipartResolver(); +// CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); +// multipartResolver.setUploadTempDir(new FileSystemResource("/tmp/spittr/uploads")); +// multipartResolver.setMaxUploadSize(2097152); +// multipartResolver.setMaxInMemorySize(0); +// return multipartResolver; +// } +} \ No newline at end of file diff --git a/springweb/src/main/java/com/max/web/config/RootConfig.java b/springweb/src/main/java/com/max/web/config/RootConfig.java new file mode 100644 index 0000000..ab010e6 --- /dev/null +++ b/springweb/src/main/java/com/max/web/config/RootConfig.java @@ -0,0 +1,6 @@ +package com.max.web.config; + +//@Configuration +//@ComponentScan(basePackages={"com.max.web"}) +public class RootConfig { +} diff --git a/springweb/src/main/java/com/max/web/config/WebConfig.java b/springweb/src/main/java/com/max/web/config/WebConfig.java new file mode 100644 index 0000000..5d3e91c --- /dev/null +++ b/springweb/src/main/java/com/max/web/config/WebConfig.java @@ -0,0 +1,23 @@ +package com.max.web.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.view.InternalResourceViewResolver; + +//@Configuration +//@ComponentScan("com.max.web") +public class WebConfig implements WebMvcConfigurer { + @Bean + public ViewResolver viewResolver() { + InternalResourceViewResolver resolver = new InternalResourceViewResolver(); + resolver.setPrefix("/src/main/webapp/WEB-INF/views/"); + resolver.setSuffix(".jsp"); + resolver.setExposeContextBeansAsAttributes(true); + return resolver; + } + public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { + configurer.enable(); + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/DbController.java b/springweb/src/main/java/com/max/web/controllers/DbController.java new file mode 100644 index 0000000..6dcf5c5 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/DbController.java @@ -0,0 +1,18 @@ +package com.max.web.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class DbController { +// @Autowired +// JdbcOperations jdbcOperations; + + @GetMapping("createTable") + @ResponseBody + public String createTeble() { +// jdbcOperations.execute("CREATE TABLE IF NOT EXISTS Books (id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id))"); + return "table was created"; + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/ExceptionController.java b/springweb/src/main/java/com/max/web/controllers/ExceptionController.java new file mode 100644 index 0000000..aae113a --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/ExceptionController.java @@ -0,0 +1,17 @@ +package com.max.web.controllers; + +//@Controller +public class ExceptionController { +// @GetMapping("exception") +// public void getException() { +//// throw new RuntimeException("some error"); +// throw new UserNotFoundException(); +// } +//// @ExceptionHandler(UserNotFoundException.class) +//// @ResponseBody +//// public String handleDuplicateSpittle() { +//// return "some error"; +//// } +// @ResponseStatus(value= HttpStatus.NOT_FOUND, reason="User Not Found") +// public class UserNotFoundException extends RuntimeException {} +} diff --git a/springweb/src/main/java/com/max/web/controllers/FileController.java b/springweb/src/main/java/com/max/web/controllers/FileController.java new file mode 100644 index 0000000..27c33de --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/FileController.java @@ -0,0 +1,30 @@ +package com.max.web.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.Part; +import java.io.IOException; + +import static org.springframework.web.bind.annotation.RequestMethod.POST; + +@Controller +public class FileController { + @GetMapping("file") + public String fileForm() { + return "file"; + } + + @RequestMapping(value="/file", method=POST) + @ResponseBody +// public String processRegistration(@RequestPart("file") byte file) throws IOException { +// public String processRegistration(@RequestPart("file") MultipartFile file) throws IOException { + public String processRegistration(@RequestPart("file") Part file) throws IOException { +// file.transferTo(new File(file.getOriginalFilename())); + file.write(file.getSubmittedFileName()); + return "hello"; + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/HelloWorldController.java b/springweb/src/main/java/com/max/web/controllers/HelloWorldController.java new file mode 100644 index 0000000..0c8e3fa --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/HelloWorldController.java @@ -0,0 +1,27 @@ +package com.max.web.controllers; + +import com.max.web.repo.User; +import com.max.web.repo.UserRepo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +//@RequestMapping("home") +public class HelloWorldController { + @Autowired + UserRepo userRepository; +// @RequestMapping(value= {"hello", "world"}, method = RequestMethod.GET, params = "!myParam") +// @GetMapping(value = "hello") + @GetMapping(value = "home") +// public User home(Model model) { +// public User home(Map model) { + public User home() { +// model.addAttribute("Max"); +// model.addAttribute("name", "Mike"); +// model.addAttribute(userRepository.getUser()); +// model.put("name", "Max"); +// return "home"; + return userRepository.getUser(); + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/HiberController.java b/springweb/src/main/java/com/max/web/controllers/HiberController.java new file mode 100644 index 0000000..e880f3f --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/HiberController.java @@ -0,0 +1,19 @@ +package com.max.web.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class HiberController { +// @Autowired +// UserAutoRepository userAutoRepository; +// MyRepo myRepo; + @GetMapping("hiber") + @ResponseBody + public String saveUser() { +// userAutoRepository.findAll(); +// myRepo.saveUser(new User("Max")); + return "user was saved"; + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/MethodArguments.java b/springweb/src/main/java/com/max/web/controllers/MethodArguments.java new file mode 100644 index 0000000..52d6598 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/MethodArguments.java @@ -0,0 +1,31 @@ +package com.max.web.controllers; + +import com.max.web.repo.User; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import java.io.IOException; + +@Controller +//@SessionAttributes("user") +public class MethodArguments { + @GetMapping("/args") +// @ResponseBody + public void getParams(Model model, + ServletRequest request, + ServletResponse response, + //Writer writer, + //OutputStream outputStream, + @CookieValue("JSESSIONID") String cookie, + @RequestHeader("Accept-Encoding") String encoding, + @SessionAttribute User user + ) throws IOException { +// writer.write("hello world"); +// response.getWriter().write("hello world"); + response.getWriter().write(cookie + " " + encoding + " " + user.getName()); +// return "hello world"; + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/ModelViewController.java b/springweb/src/main/java/com/max/web/controllers/ModelViewController.java new file mode 100644 index 0000000..6951cd1 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/ModelViewController.java @@ -0,0 +1,15 @@ +package com.max.web.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class ModelViewController { + @GetMapping("modelView") + public ModelAndView getMethod() { + ModelAndView modelAndView = new ModelAndView("modelView"); + modelAndView.addObject("userName", "Max"); + return modelAndView; + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/MyExceptionHandler.java b/springweb/src/main/java/com/max/web/controllers/MyExceptionHandler.java new file mode 100644 index 0000000..0372261 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/MyExceptionHandler.java @@ -0,0 +1,10 @@ +package com.max.web.controllers; + +//@ControllerAdvice +public class MyExceptionHandler { +// @ExceptionHandler(ExceptionController.UserNotFoundException.class) +// @ResponseBody +// public String duplicateSpittleHandler() { +// return "some error"; +// } +} diff --git a/springweb/src/main/java/com/max/web/controllers/MyLogin.java b/springweb/src/main/java/com/max/web/controllers/MyLogin.java new file mode 100644 index 0000000..d09d27c --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/MyLogin.java @@ -0,0 +1,12 @@ +package com.max.web.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class MyLogin { + @GetMapping("mylogin") + public String MyLogin() { + return "mylogin"; + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/ParametersController.java b/springweb/src/main/java/com/max/web/controllers/ParametersController.java new file mode 100644 index 0000000..55458f7 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/ParametersController.java @@ -0,0 +1,58 @@ +package com.max.web.controllers; + +import com.max.web.repo.User; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +@Controller +//@RequestMapping("vars/{userId}") +public class ParametersController { + @GetMapping("param") + @ResponseBody + public String getParams(@RequestParam(value = "one", defaultValue = "five") String one, + @RequestParam int three) { + return "hello world " + one + " " + three; + } + +// @GetMapping("{id}") + @GetMapping("vars/{userId}/{userName}") +// @GetMapping("vars/{name:[a-z-]+}") + @ResponseBody + public String getVars(@PathVariable("userId") Long userId, @PathVariable("userName") String userName) { + return "hello world " + userId + " " + userName; + } + +// @GetMapping("/matrix/") +// @ResponseBody +//// public String getMatrix(@MatrixVariable("name") String name, @MatrixVariable("age") int age) { +// public String getMatrix(@MatrixVariable String q) { +// return "hello world " + q;// + " " + age; +// } + + @GetMapping("form") + public String getForm() { + return "myForm"; + } + + @PostMapping("form") +// @ResponseBody +// public String postForm(@RequestParam String name, @RequestParam int age) { +// public String postForm(User user) { + public String postForm(User user, RedirectAttributes model) { +// public String postForm(User user, HttpSession session) { +// return name + " " + age; +// return user.getName() + " " + user.getAge(); + model.addFlashAttribute("user", user); +// session.setAttribute("user", user); + return "redirect:/spring/redirTo"; +// return "forward:/spring/redirTo"; + } + +// @PostMapping("json") +// @JsonView(User.class) +// public String jsonExmple(User user) { +//// return name + " " + age; +// return user.getName() + " " + user.getAge(); +// } +} diff --git a/springweb/src/main/java/com/max/web/controllers/RedirectController.java b/springweb/src/main/java/com/max/web/controllers/RedirectController.java new file mode 100644 index 0000000..e6e6899 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/RedirectController.java @@ -0,0 +1,23 @@ +package com.max.web.controllers; + +import com.max.web.repo.User; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +@Controller +public class RedirectController { + @RequestMapping("myRedirect") + public String redirectMe(@RequestParam String one) { + return "redirect:/spring/redirectTo"; +// return "forward:/spring/redirectTo"; + } + @RequestMapping("redirectTo") + @ResponseBody +// public String redirectTo(@RequestParam(required = false) String one) { +// public String redirectTo(User user) { +// public String redirectTo(Model model) { + public String redirectTo(@SessionAttribute User user) { + return "new page " + user.getName(); +// return "new page " + ((User)model.asMap().get("user")).getName(); + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/SpringLibController.java b/springweb/src/main/java/com/max/web/controllers/SpringLibController.java new file mode 100644 index 0000000..392cb09 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/SpringLibController.java @@ -0,0 +1,15 @@ +package com.max.web.controllers; + +import com.max.web.repo.User; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class SpringLibController { + @GetMapping("/springLib") + public String getParams(Model model) { + model.addAttribute("user", new User()); + return "springLib"; + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/TestController.java b/springweb/src/main/java/com/max/web/controllers/TestController.java new file mode 100644 index 0000000..83a30c3 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/TestController.java @@ -0,0 +1,14 @@ +package com.max.web.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class TestController { + @RequestMapping("test") + @ResponseBody + public String test() { + return "test"; + } +} diff --git a/springweb/src/main/java/com/max/web/controllers/TestController2.java b/springweb/src/main/java/com/max/web/controllers/TestController2.java new file mode 100644 index 0000000..54b8094 --- /dev/null +++ b/springweb/src/main/java/com/max/web/controllers/TestController2.java @@ -0,0 +1,14 @@ +package com.max.web.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class TestController2 { + @GetMapping("test2") + @ResponseBody + public String test() { + return "test2"; + } +} \ No newline at end of file diff --git a/springweb/src/main/java/com/max/web/entities/User.java b/springweb/src/main/java/com/max/web/entities/User.java new file mode 100644 index 0000000..701d9b7 --- /dev/null +++ b/springweb/src/main/java/com/max/web/entities/User.java @@ -0,0 +1,35 @@ +package com.max.web.entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class User { + @GeneratedValue(strategy = GenerationType.AUTO) + @Id + int id; + String name; + + public User() {} + public User(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/springweb/src/main/java/com/max/web/repo/MyRepo.java b/springweb/src/main/java/com/max/web/repo/MyRepo.java new file mode 100644 index 0000000..a956942 --- /dev/null +++ b/springweb/src/main/java/com/max/web/repo/MyRepo.java @@ -0,0 +1,7 @@ +package com.max.web.repo; + +import com.max.web.entities.User; + +public interface MyRepo { + void saveUser(User user); +} diff --git a/springweb/src/main/java/com/max/web/repo/Repo.java b/springweb/src/main/java/com/max/web/repo/Repo.java new file mode 100644 index 0000000..c37db31 --- /dev/null +++ b/springweb/src/main/java/com/max/web/repo/Repo.java @@ -0,0 +1,5 @@ +package com.max.web.repo; + +public interface Repo { + User getUser(); +} diff --git a/springweb/src/main/java/com/max/web/repo/User.java b/springweb/src/main/java/com/max/web/repo/User.java new file mode 100644 index 0000000..52628b6 --- /dev/null +++ b/springweb/src/main/java/com/max/web/repo/User.java @@ -0,0 +1,32 @@ +package com.max.web.repo; + +import org.springframework.lang.NonNull; + +public class User { + @NonNull + String name; + int age; + + public User() {} + + public User(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } +} diff --git a/springweb/src/main/java/com/max/web/repo/UserAutoRepository.java b/springweb/src/main/java/com/max/web/repo/UserAutoRepository.java new file mode 100644 index 0000000..150ad89 --- /dev/null +++ b/springweb/src/main/java/com/max/web/repo/UserAutoRepository.java @@ -0,0 +1,8 @@ +package com.max.web.repo; + +import org.springframework.data.jpa.repository.JpaRepository; +import com.max.web.entities.User; + +public interface UserAutoRepository extends JpaRepository { + User findByName(String name); +} diff --git a/springweb/src/main/java/com/max/web/repo/UserRepo.java b/springweb/src/main/java/com/max/web/repo/UserRepo.java new file mode 100644 index 0000000..cdd9e8b --- /dev/null +++ b/springweb/src/main/java/com/max/web/repo/UserRepo.java @@ -0,0 +1,12 @@ +package com.max.web.repo; + +import org.springframework.stereotype.Component; + +import java.io.Serializable; + +@Component +public class UserRepo implements Repo, Serializable { + public User getUser() { + return new User("Max", 22); + } +} diff --git a/springweb/src/main/java/com/max/web/repo/UserRepository.java b/springweb/src/main/java/com/max/web/repo/UserRepository.java new file mode 100644 index 0000000..156f2f0 --- /dev/null +++ b/springweb/src/main/java/com/max/web/repo/UserRepository.java @@ -0,0 +1,16 @@ +package com.max.web.repo; + +import com.max.web.entities.User; +import org.hibernate.Session; +import org.hibernate.SessionFactory; + +//@Repository +public class UserRepository implements MyRepo { +// @Autowired + SessionFactory sessionFactory; +// @Transactional + public void saveUser(User user) { + Session currentSession = sessionFactory.getCurrentSession(); + currentSession.save(user); + } +} diff --git a/springweb/src/main/java/com/max/web/repo/UserRepository2.java b/springweb/src/main/java/com/max/web/repo/UserRepository2.java new file mode 100644 index 0000000..6fb3603 --- /dev/null +++ b/springweb/src/main/java/com/max/web/repo/UserRepository2.java @@ -0,0 +1,13 @@ +package com.max.web.repo; + +import com.max.web.entities.User; + +//@Repository +//@Transactional +public class UserRepository2 implements MyRepo { +// @PersistenceContext +// EntityManager entityManager; + public void saveUser(User user) { +// entityManager.persist(user); + } +} diff --git a/springweb/src/main/java/com/max/web/webconfig/MySecurityConfig.java b/springweb/src/main/java/com/max/web/webconfig/MySecurityConfig.java new file mode 100644 index 0000000..820c07a --- /dev/null +++ b/springweb/src/main/java/com/max/web/webconfig/MySecurityConfig.java @@ -0,0 +1,20 @@ +package com.max.web.webconfig; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableWebSecurity +public class MySecurityConfig extends WebSecurityConfigurerAdapter { + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication().withUser("user").password("1").roles("ADMIN").and() + .withUser("root").password("1").roles("ADMIN"); + } + @Override + protected void configure(HttpSecurity http) throws Exception { + } +} \ No newline at end of file diff --git a/springweb/src/main/java/com/max/web/webconfig/MyWebAppInitializer2.java b/springweb/src/main/java/com/max/web/webconfig/MyWebAppInitializer2.java new file mode 100644 index 0000000..20eb8b4 --- /dev/null +++ b/springweb/src/main/java/com/max/web/webconfig/MyWebAppInitializer2.java @@ -0,0 +1,18 @@ +package com.max.web.webconfig; + +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.XmlWebApplicationContext; + +public class MyWebAppInitializer2 {//} extends AbstractDispatcherServletInitializer { + protected WebApplicationContext createRootApplicationContext() { + return null; + } + protected WebApplicationContext createServletApplicationContext() { + XmlWebApplicationContext cxt = new XmlWebApplicationContext(); + cxt.setConfigLocation("/WEB-INF/helloSpring-servlet.xml"); + return cxt; + } + protected String[] getServletMappings() { + return new String[] { "/qwe/*" }; + } +} \ No newline at end of file diff --git a/springweb/src/main/java/com/max/web/webconfig/MyWebApplicationInitializer.java b/springweb/src/main/java/com/max/web/webconfig/MyWebApplicationInitializer.java new file mode 100644 index 0000000..160160d --- /dev/null +++ b/springweb/src/main/java/com/max/web/webconfig/MyWebApplicationInitializer.java @@ -0,0 +1,30 @@ +package com.max.web.webconfig; + +import org.springframework.web.context.support.XmlWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; + +public class MyWebApplicationInitializer {//} implements WebApplicationInitializer { + public void onStartup(ServletContext servletContext) throws ServletException {; +// ServletRegistration.Dynamic myServlet = servletContext.addServlet("myservlet", MyServlet.class); +// myServlet.addMapping("/myservlet/*"); +// FilterRegistration.Dynamic filter = servletContext.addFilter("myFilter", MyFilter.class); +// filter.addMappingForUrlPatterns(null, false, "/custom/*"); + +// AnnotationConfigWebApplicationContext cxt = new AnnotationConfigWebApplicationContext(); +// cxt.register(MyWebConfig.class); +// cxt.refresh(); + XmlWebApplicationContext cxt = new XmlWebApplicationContext(); + cxt.setConfigLocation("/WEB-INF/helloSpring-servlet.xml"); + + DispatcherServlet servlet = new DispatcherServlet(cxt); + + ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet); + registration.setLoadOnStartup(1); + registration.addMapping("/app/*"); +// registration.setMultipartConfig(new MultipartConfigElement("/tmp/app/uploads")); + } +} diff --git a/springweb/src/main/java/com/max/web/webconfig/SecurityConfig.java b/springweb/src/main/java/com/max/web/webconfig/SecurityConfig.java new file mode 100644 index 0000000..5047547 --- /dev/null +++ b/springweb/src/main/java/com/max/web/webconfig/SecurityConfig.java @@ -0,0 +1,39 @@ +package com.max.web.webconfig; + +//@Configuration +//@EnableWebSecurity +public class SecurityConfig {// extends WebSecurityConfigurerAdapter { +// @Autowired +// DataSource dataSource; +// @Override +// protected void configure(AuthenticationManagerBuilder auth) throws Exception { +// auth.inMemoryAuthentication() +// .withUser("user").password("1").roles("USER").and() +// .withUser("admin").password("2").roles("USER", "ADMIN"); +// auth.jdbcAuthentication().dataSource(dataSource) +//// .withDefaultSchema().withUser("user").password("1").roles("MODERATOR"); +// .usersByUsernameQuery("select username, password, enabled from users where username = ?") +// .authoritiesByUsernameQuery("select username, authority from authorities where username = ?"); +//// .passwordEncoder(new StandardPasswordEncoder()); +// } +//// @Override +// protected void configure(HttpSecurity http) throws Exception { +//// http.authorizeRequests().antMatchers("/spring/test").hasRole("ADMIN").anyRequest().permitAll() +//// .and().formLogin().and().requiresChannel().antMatchers("/spring/test").requiresSecure(); +//// http.authorizeRequests() +////// .antMatchers("/spring/me", "/spring/bla").authenticated() +////// .antMatchers(HttpMethod.POST, "/spring").authenticated() +////// .regexMatchers("/spring/.*").authenticated() +////// .antMatchers("/spring/me").hasAuthority("ROLE_ADMIN") +////// .antMatchers("/spring/me").hasRole("ADMIN") +//// .antMatchers("/spring/*").hasRole("ADMIN") +//// .antMatchers("/spring/*").access("hasRole('ROLE_ADMIN')") +//// .anyRequest().permitAll(); +// http +// .authorizeRequests() +// .anyRequest().authenticated() +// .and() +// .formLogin().and() +// .httpBasic(); +// } +} diff --git a/springweb/src/main/java/com/max/web/webconfig/SecurityWebInitializer.java b/springweb/src/main/java/com/max/web/webconfig/SecurityWebInitializer.java new file mode 100644 index 0000000..57e64c9 --- /dev/null +++ b/springweb/src/main/java/com/max/web/webconfig/SecurityWebInitializer.java @@ -0,0 +1,5 @@ +package com.max.web.webconfig; + +import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; + +public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer {} \ No newline at end of file diff --git a/springweb/src/main/java/com/max/web/webconfig/WebAppInitializer.java b/springweb/src/main/java/com/max/web/webconfig/WebAppInitializer.java new file mode 100644 index 0000000..c16921a --- /dev/null +++ b/springweb/src/main/java/com/max/web/webconfig/WebAppInitializer.java @@ -0,0 +1,28 @@ +package com.max.web.webconfig; + +import com.max.web.config.MyWebConfig; +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +import javax.servlet.MultipartConfigElement; +import javax.servlet.ServletRegistration; + +public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { + protected Class>[] getRootConfigClasses() { + return null; + } + + protected Class>[] getServletConfigClasses() { + return new Class>[] { MyWebConfig.class}; + } + + protected String[] getServletMappings() { + return new String[] { "/spring/*" }; + } + + @Override + protected void customizeRegistration(ServletRegistration.Dynamic registration) { + super.customizeRegistration(registration); + registration.setMultipartConfig(new MultipartConfigElement("/tmp/app/uploads")); +// registration.setMultipartConfig(new MultipartConfigElement("/tmp/app/uploads", 2097152, 4194304, 0)); + } +} diff --git a/springweb/src/main/java/com/max/web/webconfig/WebFlowConfig.java b/springweb/src/main/java/com/max/web/webconfig/WebFlowConfig.java new file mode 100644 index 0000000..e7fdb56 --- /dev/null +++ b/springweb/src/main/java/com/max/web/webconfig/WebFlowConfig.java @@ -0,0 +1,53 @@ +package com.max.web.webconfig; + +//@Configuration +//@EnableWebMvc +//@ComponentScan("com.max.web") +//@Import(SecurityConfig.class) +public class WebFlowConfig {//} extends AbstractFlowConfiguration { + +// @Autowired +// private MyWebConfig myWebConfig; +// +// @Bean +// public FlowDefinitionRegistry flowRegistry() { +// return getFlowDefinitionRegistryBuilder(flowBuilderServices()) +// .addFlowLocation("/WEB-INF/flows/hello-flow.xml", "helloFlow") +// .addFlowLocation("/WEB-INF/flows/first-flow.xml", "firstFlow") +// .build(); +// } +// +// @Bean +// public FlowExecutor flowExecutor() { +// return getFlowExecutorBuilder(flowRegistry()).build(); +// } +// +// @Bean +// public FlowBuilderServices flowBuilderServices() { +// return getFlowBuilderServicesBuilder().setViewFactoryCreator(mvcViewFactoryCreator()).setDevelopmentMode(true).build(); +// } +// +// @Bean +// public MvcViewFactoryCreator mvcViewFactoryCreator() { +// MvcViewFactoryCreator factoryCreator = new MvcViewFactoryCreator(); +// factoryCreator.setViewResolvers(Collections.singletonList(myWebConfig.getViewResolver())); +// factoryCreator.setUseSpringBeanBinding(true); +// return factoryCreator; +// } +// +// @Bean +// public FlowHandlerMapping flowHandlerMapping() { +// FlowHandlerMapping handlerMapping = new FlowHandlerMapping(); +// handlerMapping.setOrder(-1); +// handlerMapping.setFlowRegistry(flowRegistry()); +// return handlerMapping; +// } +// +// @Bean +// public FlowHandlerAdapter flowHandlerAdapter() { +// FlowHandlerAdapter handlerAdapter = new FlowHandlerAdapter(); +// handlerAdapter.setFlowExecutor(flowExecutor()); +// handlerAdapter.setSaveOutputToFlashScopeOnRedirect(true); +// return handlerAdapter; +// } +} \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/applicationContext.xml b/springweb/src/main/java/webapp/WEB-INF/applicationContext.xml new file mode 100644 index 0000000..bc0329e --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/applicationContext.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/flows/first-flow.xml b/springweb/src/main/java/webapp/WEB-INF/flows/first-flow.xml new file mode 100644 index 0000000..abb7e87 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/flows/first-flow.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/flows/hello-flow.xml b/springweb/src/main/java/webapp/WEB-INF/flows/hello-flow.xml new file mode 100644 index 0000000..a5fb32b --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/flows/hello-flow.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/helloSpring-servlet.xml b/springweb/src/main/java/webapp/WEB-INF/helloSpring-servlet.xml new file mode 100644 index 0000000..875af66 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/helloSpring-servlet.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/activation.jsp b/springweb/src/main/java/webapp/WEB-INF/views/activation.jsp new file mode 100644 index 0000000..4ed2a9e --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/activation.jsp @@ -0,0 +1,16 @@ + + +Hello World! + + + + + + + + + + + + + diff --git a/springweb/src/main/java/webapp/WEB-INF/views/end.jsp b/springweb/src/main/java/webapp/WEB-INF/views/end.jsp new file mode 100644 index 0000000..42c73e8 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/end.jsp @@ -0,0 +1,9 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + + This is END!!! + + diff --git a/springweb/src/main/java/webapp/WEB-INF/views/failure.jsp b/springweb/src/main/java/webapp/WEB-INF/views/failure.jsp new file mode 100644 index 0000000..c094565 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/failure.jsp @@ -0,0 +1,5 @@ + + +Activation Failed + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/file.jsp b/springweb/src/main/java/webapp/WEB-INF/views/file.jsp new file mode 100644 index 0000000..14ce2b7 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/file.jsp @@ -0,0 +1,12 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + + + + + + + diff --git a/springweb/src/main/java/webapp/WEB-INF/views/first.jsp b/springweb/src/main/java/webapp/WEB-INF/views/first.jsp new file mode 100644 index 0000000..50618f7 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/first.jsp @@ -0,0 +1,12 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + + + + + + + diff --git a/springweb/src/main/java/webapp/WEB-INF/views/home.jsp b/springweb/src/main/java/webapp/WEB-INF/views/home.jsp new file mode 100644 index 0000000..b8ce930 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/home.jsp @@ -0,0 +1,9 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Hello text + + + hello world ${user.age} ${test} + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/modelView.jsp b/springweb/src/main/java/webapp/WEB-INF/views/modelView.jsp new file mode 100644 index 0000000..d396f6f --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/modelView.jsp @@ -0,0 +1,9 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + + ${userName} + + diff --git a/springweb/src/main/java/webapp/WEB-INF/views/myForm.jsp b/springweb/src/main/java/webapp/WEB-INF/views/myForm.jsp new file mode 100644 index 0000000..4018623 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/myForm.jsp @@ -0,0 +1,13 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Hello text + + + + + + + + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/mylogin.jsp b/springweb/src/main/java/webapp/WEB-INF/views/mylogin.jsp new file mode 100644 index 0000000..b6fc4c6 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/mylogin.jsp @@ -0,0 +1 @@ +hello \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/second.jsp b/springweb/src/main/java/webapp/WEB-INF/views/second.jsp new file mode 100644 index 0000000..b1b20d7 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/second.jsp @@ -0,0 +1,9 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + + second + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/springLib.jsp b/springweb/src/main/java/webapp/WEB-INF/views/springLib.jsp new file mode 100644 index 0000000..3815038 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/springLib.jsp @@ -0,0 +1,14 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %> + + + Title + + + + Name: + Age: + + + + diff --git a/springweb/src/main/java/webapp/WEB-INF/views/start.jsp b/springweb/src/main/java/webapp/WEB-INF/views/start.jsp new file mode 100644 index 0000000..0e1b5eb --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/start.jsp @@ -0,0 +1,13 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + +This is start! + + + + + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/success.jsp b/springweb/src/main/java/webapp/WEB-INF/views/success.jsp new file mode 100644 index 0000000..00894c6 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/success.jsp @@ -0,0 +1,9 @@ + + +Activation Successful! + + + + + + \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/test.jsp b/springweb/src/main/java/webapp/WEB-INF/views/test.jsp new file mode 100644 index 0000000..c62afa7 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/test.jsp @@ -0,0 +1 @@ +test world \ No newline at end of file diff --git a/springweb/src/main/java/webapp/WEB-INF/views/third.jsp b/springweb/src/main/java/webapp/WEB-INF/views/third.jsp new file mode 100644 index 0000000..544eaab --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/views/third.jsp @@ -0,0 +1,9 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + +third + + diff --git a/springweb/src/main/java/webapp/WEB-INF/web.xml b/springweb/src/main/java/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..e57eb69 --- /dev/null +++ b/springweb/src/main/java/webapp/WEB-INF/web.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/springweb/src/main/resources/jetty.xml b/springweb/src/main/resources/jetty.xml new file mode 100644 index 0000000..b8cc698 --- /dev/null +++ b/springweb/src/main/resources/jetty.xml @@ -0,0 +1,14 @@ + + + + jdbc/testDB + + + com.mysql.jdbc.Driver + jdbc:mysql://localhost:3306/Lessons + root + 1 + + + + \ No newline at end of file diff --git a/springweb2/pom.xml b/springweb2/pom.xml new file mode 100644 index 0000000..fa2d7c6 --- /dev/null +++ b/springweb2/pom.xml @@ -0,0 +1,140 @@ + + + 4.0.0 + + com.max + springweb2 + 1.0-SNAPSHOT + war + + + + + org.eclipse.jetty + jetty-maven-plugin + 9.4.0.M0 + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + org.springframework + spring-webmvc + 5.0.1.RELEASE + + + javax.servlet + javax.servlet-api + 4.0.0 + provided + + + org.springframework.security + spring-security-core + 5.0.0.M5 + + + org.springframework.security + spring-security-web + 5.0.0.M5 + + + org.springframework.security + spring-security-config + 5.0.0.M5 + + + + org.springframework.security + spring-security-taglibs + 5.0.0.M5 + + + javax.annotation + jsr250-api + 1.0 + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + 2.9.2 + + + org.apache.activemq + activemq-core + 5.7.0 + + + org.springframework + spring-jms + 5.0.2.RELEASE + + + org.springframework.amqp + spring-rabbit + 2.0.0.RELEASE + + + org.springframework + spring-websocket + 4.0.0.RELEASE + + + org.springframework + spring-test + 5.0.1.RELEASE + test + + + junit + junit + 4.12 + test + + + org.hibernate + hibernate-search-orm + 5.8.2.Final + + + org.springframework.data + spring-data-jpa + 2.0.1.RELEASE + + + mysql + mysql-connector-java + 8.0.8-dmr + + + com.jayway.jsonpath + json-path + 2.2.0 + test + + + + + + spring-snapshot + Spring Snapshot Repository + http://repo.spring.io/snapshot + + + spring-milestone + Spring Milestone Repository + http://repo.spring.io/milestone + + + \ No newline at end of file diff --git a/springweb2/src/main/java/com/max/Main.java b/springweb2/src/main/java/com/max/Main.java new file mode 100644 index 0000000..6f4754b --- /dev/null +++ b/springweb2/src/main/java/com/max/Main.java @@ -0,0 +1,15 @@ +package com.max; + +import com.max.entities.User; +import org.springframework.web.client.RestTemplate; + +public class Main { + public static void main(String[] args) { + RestTemplate rest = new RestTemplate(); + User user = rest.getForObject("http://localhost:8080/userest", User.class); + System.out.println(user.getName()); +// ApplicationContext context = new AnnotationConfigApplicationContext(SoapClientConfig.class); +// SoapService bean = context.getBean(SoapService.class); +// bean.printMessage("Hello world"); + } +} diff --git a/springweb2/src/main/java/com/max/MyHandler.java b/springweb2/src/main/java/com/max/MyHandler.java new file mode 100644 index 0000000..2aaa605 --- /dev/null +++ b/springweb2/src/main/java/com/max/MyHandler.java @@ -0,0 +1,15 @@ +package com.max; + +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +import java.io.IOException; + +public class MyHandler extends TextWebSocketHandler { + @Override + public void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException { + System.out.println(message.getPayload()); + session.sendMessage(new TextMessage("World")); + } +} diff --git a/springweb2/src/main/java/com/max/config/AmqpConfig.java b/springweb2/src/main/java/com/max/config/AmqpConfig.java new file mode 100644 index 0000000..5685f48 --- /dev/null +++ b/springweb2/src/main/java/com/max/config/AmqpConfig.java @@ -0,0 +1,19 @@ +package com.max.config; + +//@Configuration +public class AmqpConfig { +// @Bean +// public ConnectionFactory connectionFactory() { +// return new CachingConnectionFactory("localhost"); +// } +// @Bean +// public RabbitTemplate rabbitTemplate() { +// RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory()); +// rabbitTemplate.setQueue("myqueue"); +// return rabbitTemplate; +// } +// @Bean +// public Queue myQueue() { +// return new Queue("myqueue"); +// } +} diff --git a/springweb2/src/main/java/com/max/config/JmsConfig.java b/springweb2/src/main/java/com/max/config/JmsConfig.java new file mode 100644 index 0000000..44e2991 --- /dev/null +++ b/springweb2/src/main/java/com/max/config/JmsConfig.java @@ -0,0 +1,51 @@ +package com.max.config; + +//@Configuration +//@EnableJms +public class JmsConfig { +// @Bean +// public ActiveMQConnectionFactory activeMQConnectionFactory() { +// ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(); +//// activeMQConnectionFactory.setBrokerURL("tcp://localhost:61616"); +// return activeMQConnectionFactory; +// } +// @Bean +// public ActiveMQQueue activeMQQueue() { +// ActiveMQQueue activeMQQueue = new ActiveMQQueue(); +// activeMQQueue.setPhysicalName("queueName"); +// return activeMQQueue; +// } +//// @Bean +//// public ActiveMQTopic activeMQTopic() { +//// ActiveMQTopic activeMQTopic = new ActiveMQTopic(); +//// activeMQTopic.setPhysicalName("topicName"); +//// return activeMQTopic; +//// } +// @Bean +// public JmsTemplate jmsTemplate(ActiveMQConnectionFactory connectionFactory) { +// JmsTemplate jmsTemplate = new JmsTemplate(); +// jmsTemplate.setConnectionFactory(connectionFactory); +// jmsTemplate.setDefaultDestinationName("queueName"); +// return jmsTemplate; +// } +// +// @Bean +// public MessageConverter messageConverter() { +// return new MappingJackson2MessageConverter(); +// } +// +// @Bean("myFactory") +// JmsListenerContainerFactory> myFactory(ConnectionFactory connectionFactory) { +// DefaultJmsListenerContainerFactory listenerContainerFactory = new DefaultJmsListenerContainerFactory(); +// listenerContainerFactory.setConnectionFactory(connectionFactory); +// return listenerContainerFactory; +// } + +// @Bean +// JmsInvokerServiceExporter jmsInvokerServiceExporter() { +// JmsInvokerServiceExporter jmsInvokerServiceExporter = new JmsInvokerServiceExporter(); +// jmsInvokerServiceExporter.setMessageConverter(messageConverter()); +// jmsInvokerServiceExporter.setServiceInterface(JmsService.class); +// return jmsInvokerServiceExporter; +// } +} diff --git a/springweb2/src/main/java/com/max/config/RestConfig.java b/springweb2/src/main/java/com/max/config/RestConfig.java new file mode 100644 index 0000000..9b5c7b5 --- /dev/null +++ b/springweb2/src/main/java/com/max/config/RestConfig.java @@ -0,0 +1,22 @@ +package com.max.config; + +//@Configuration +public class RestConfig {//} implements WebMvcConfigurer { +// public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { +// configurer.defaultContentType(MediaType.TEXT_HTML); +// } +// @Bean +// public ViewResolver cnViewResolver(ContentNegotiationManager cnm) { +// ContentNegotiatingViewResolver cnvr = new ContentNegotiatingViewResolver(); +// cnvr.setContentNegotiationManager(cnm); +// return cnvr; +// } +// @Bean +// public ViewResolver beanNameViewResolver() { +// return new BeanNameViewResolver(); +// } +// @Bean +// public View user() { +// return new MappingJackson2JsonView(); +// } +} diff --git a/springweb2/src/main/java/com/max/config/WebAppInitializer.java b/springweb2/src/main/java/com/max/config/WebAppInitializer.java new file mode 100644 index 0000000..9a3948a --- /dev/null +++ b/springweb2/src/main/java/com/max/config/WebAppInitializer.java @@ -0,0 +1,15 @@ +package com.max.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { + protected Class>[] getRootConfigClasses() {return null;} + + protected Class>[] getServletConfigClasses() { + return new Class>[] { WebConfig.class}; + } + + protected String[] getServletMappings() { + return new String[] { "/" }; + } +} diff --git a/springweb2/src/main/java/com/max/config/WebConfig.java b/springweb2/src/main/java/com/max/config/WebConfig.java new file mode 100644 index 0000000..469336e --- /dev/null +++ b/springweb2/src/main/java/com/max/config/WebConfig.java @@ -0,0 +1,24 @@ +package com.max.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.view.InternalResourceViewResolver; + +@Configuration +@EnableWebMvc +@ComponentScan("com.max") +@Import(WebSocketConfig.class) +public class WebConfig { + @Bean + public ViewResolver getViewResolver() { + InternalResourceViewResolver resolver = new InternalResourceViewResolver(); + resolver.setPrefix("/WEB-INF/views/"); + resolver.setSuffix(".jsp"); + resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class); + return resolver; + } +} diff --git a/springweb2/src/main/java/com/max/config/WebSocketConfig.java b/springweb2/src/main/java/com/max/config/WebSocketConfig.java new file mode 100644 index 0000000..7b8c766 --- /dev/null +++ b/springweb2/src/main/java/com/max/config/WebSocketConfig.java @@ -0,0 +1,13 @@ +package com.max.config; + +import com.max.MyHandler; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; + +//@Configuration +//@EnableWebSocket +public class WebSocketConfig implements WebSocketConfigurer { + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(new MyHandler(), "/myHandler"); + } +} \ No newline at end of file diff --git a/springweb2/src/main/java/com/max/config/security/MethodSecurityConfig.java b/springweb2/src/main/java/com/max/config/security/MethodSecurityConfig.java new file mode 100644 index 0000000..4a47997 --- /dev/null +++ b/springweb2/src/main/java/com/max/config/security/MethodSecurityConfig.java @@ -0,0 +1,5 @@ +package com.max.config.security; + +//@Configuration +//@EnableGlobalMethodSecurity(securedEnabled=true, jsr250Enabled=true, prePostEnabled = true) +public class MethodSecurityConfig {}// extends GlobalMethodSecurityConfiguration {} diff --git a/springweb2/src/main/java/com/max/config/security/SecurityConfig.java b/springweb2/src/main/java/com/max/config/security/SecurityConfig.java new file mode 100644 index 0000000..0f6f28b --- /dev/null +++ b/springweb2/src/main/java/com/max/config/security/SecurityConfig.java @@ -0,0 +1,24 @@ +package com.max.config.security; + +//@Configuration +//@EnableWebSecurity +//@Import(MethodSecurityConfig.class) +public class SecurityConfig {// extends WebSecurityConfigurerAdapter implements WebMvcConfigurer { +// @Override +// protected void configure(AuthenticationManagerBuilder auth) throws Exception { +// auth.inMemoryAuthentication().withUser("user").password("1").roles("ADMIN").and() +// .withUser("root").password("1").roles("ADMIN"); +// } +// @Override +// protected void configure(HttpSecurity http) throws Exception { +// http.authorizeRequests().antMatchers("/test").authenticated() +// .anyRequest().permitAll().and().formLogin().loginPage("/login").permitAll() +// .and().rememberMe().tokenValiditySeconds(9999999).key("secretKey") +// .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")) +// .logoutSuccessUrl("/home"); +// } +// +// public void addViewControllers(ViewControllerRegistry registry) { +// registry.addViewController("/login"); +// } +} diff --git a/springweb2/src/main/java/com/max/config/security/SecurityWebInitializer.java b/springweb2/src/main/java/com/max/config/security/SecurityWebInitializer.java new file mode 100644 index 0000000..54bcf24 --- /dev/null +++ b/springweb2/src/main/java/com/max/config/security/SecurityWebInitializer.java @@ -0,0 +1,3 @@ +package com.max.config.security; + +public class SecurityWebInitializer {}// extends AbstractSecurityWebApplicationInitializer {} \ No newline at end of file diff --git a/springweb2/src/main/java/com/max/config/soap/SoapClientConfig.java b/springweb2/src/main/java/com/max/config/soap/SoapClientConfig.java new file mode 100644 index 0000000..8da224e --- /dev/null +++ b/springweb2/src/main/java/com/max/config/soap/SoapClientConfig.java @@ -0,0 +1,15 @@ +package com.max.config.soap; + +//@Configuration +public class SoapClientConfig { +// @Bean +// JaxWsPortProxyFactoryBean portProxyFactoryBean() throws MalformedURLException { +// JaxWsPortProxyFactoryBean bean = new JaxWsPortProxyFactoryBean(); +// bean.setWsdlDocumentUrl(new URL("http://localhost:8889/SoapService?wsdl")); +// bean.setServiceName("SoapService"); +// bean.setServiceInterface(SoapService.class); +// bean.setPortName("SoapServiceEndpointPort"); +// bean.setNamespaceUri("http://soap.max.com/"); +// return bean; +// } +} diff --git a/springweb2/src/main/java/com/max/config/soap/SoapServlerConfig.java b/springweb2/src/main/java/com/max/config/soap/SoapServlerConfig.java new file mode 100644 index 0000000..c25322b --- /dev/null +++ b/springweb2/src/main/java/com/max/config/soap/SoapServlerConfig.java @@ -0,0 +1,15 @@ +package com.max.config.soap; + +//@Configuration +public class SoapServlerConfig { +// @Bean +// SoapService soapService() { +// return new SoapServiceImpl(); +// } +// @Bean +// SimpleJaxWsServiceExporter exporter() { +// SimpleJaxWsServiceExporter exporter = new SimpleJaxWsServiceExporter(); +// exporter.setBaseAddress("http://localhost:8889/"); +// return exporter; +// } +} diff --git a/springweb2/src/main/java/com/max/controllers/AmqpController.java b/springweb2/src/main/java/com/max/controllers/AmqpController.java new file mode 100644 index 0000000..6d63a6e --- /dev/null +++ b/springweb2/src/main/java/com/max/controllers/AmqpController.java @@ -0,0 +1,20 @@ +package com.max.controllers; + +import org.springframework.amqp.rabbit.core.RabbitOperations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; + +//@RestController +public class AmqpController { + @Autowired + RabbitOperations rabbitOperations; + @GetMapping("sendAmqpMessage") + public String sendMessage() { + rabbitOperations.convertAndSend("myqueue", "Hello, world!"); + return "message was sent"; + } + @GetMapping("readAmqpMessage") + public String readMessage() { + return rabbitOperations.receiveAndConvert("myqueue").toString(); + } +} diff --git a/springweb2/src/main/java/com/max/controllers/HomeControllers.java b/springweb2/src/main/java/com/max/controllers/HomeControllers.java new file mode 100644 index 0000000..2dd46a3 --- /dev/null +++ b/springweb2/src/main/java/com/max/controllers/HomeControllers.java @@ -0,0 +1,12 @@ +package com.max.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class HomeControllers { + @GetMapping("home") + public String home() { + return "home"; + } +} diff --git a/springweb2/src/main/java/com/max/controllers/JmsController.java b/springweb2/src/main/java/com/max/controllers/JmsController.java new file mode 100644 index 0000000..62d55b6 --- /dev/null +++ b/springweb2/src/main/java/com/max/controllers/JmsController.java @@ -0,0 +1,22 @@ +package com.max.controllers; + +import com.max.entities.User; +import com.max.interfaces.JmsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; + +//@RestController +public class JmsController { + @Autowired + JmsService jmsService; + @GetMapping("sendMessage") + public String sendMessage() { + jmsService.sendMessage(new User("Max")); + return "message was send"; + } + @GetMapping("getMessage") + public String getMessage() { + User user = (User) jmsService.receiveMessage(); + return user.getName(); + } +} diff --git a/springweb2/src/main/java/com/max/controllers/TestController.java b/springweb2/src/main/java/com/max/controllers/TestController.java new file mode 100644 index 0000000..04730b4 --- /dev/null +++ b/springweb2/src/main/java/com/max/controllers/TestController.java @@ -0,0 +1,19 @@ +package com.max.controllers; + +import com.max.interfaces.Repo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +import java.io.IOException; + +@Controller +public class TestController { + @Autowired + Repo repo; + @GetMapping("test") + public String test() throws IOException { +// repo.createTable(); + return "test"; + } +} diff --git a/springweb2/src/main/java/com/max/controllers/UserRestController.java b/springweb2/src/main/java/com/max/controllers/UserRestController.java new file mode 100644 index 0000000..fd7bd5c --- /dev/null +++ b/springweb2/src/main/java/com/max/controllers/UserRestController.java @@ -0,0 +1,58 @@ +package com.max.controllers; + +import com.max.entities.User; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +//@Controller +@RestController +public class UserRestController { + @GetMapping("restGet") +// @ResponseBody + public User restGet() { + return new User("Max"); + } + @PutMapping("restPut") +// @ResponseBody + public User user(@RequestBody User user) { + user.setName("Mike"); + return user; + } + @GetMapping(value = "requestEntity", consumes = "application/json") + public ResponseEntity requestEntity() { +// return new ResponseEntity(new Error("message", 404), HttpStatus.BAD_REQUEST); + return new ResponseEntity(new User("Max"), HttpStatus.OK); + } + static class Error { + String message; + int errorCode; + + public Error() { + } + + public Error(String message, int errorCode) { + this.message = message; + this.errorCode = errorCode; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getErrorCode() { + return errorCode; + } + + public void setErrorCode(int errorCode) { + this.errorCode = errorCode; + } + } +} diff --git a/springweb2/src/main/java/com/max/entities/User.java b/springweb2/src/main/java/com/max/entities/User.java new file mode 100644 index 0000000..7141e5e --- /dev/null +++ b/springweb2/src/main/java/com/max/entities/User.java @@ -0,0 +1,19 @@ +package com.max.entities; + +import java.io.Serializable; + +public class User implements Serializable { + String name; + + public User() {} + public User(String name) { + this.name = name; + } + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/springweb2/src/main/java/com/max/impl/JmsServiceImpl.java b/springweb2/src/main/java/com/max/impl/JmsServiceImpl.java new file mode 100644 index 0000000..c3456de --- /dev/null +++ b/springweb2/src/main/java/com/max/impl/JmsServiceImpl.java @@ -0,0 +1,35 @@ +package com.max.impl; + +import com.max.entities.User; +import com.max.interfaces.JmsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jms.annotation.JmsListener; +import org.springframework.jms.core.JmsOperations; + +//@Component +public class JmsServiceImpl implements JmsService { + @Autowired + JmsOperations jmsOperations; + public void sendMessage(final User user) { +// jmsOperations.send("queueName",new MessageCreator() { +// public Message createMessage(Session session) throws JMSException { +// return session.createObjectMessage(user); +// } +// }); + jmsOperations.convertAndSend(user); + } + public User receiveMessage() { +// try { +// ObjectMessage receivedMessage = (ObjectMessage) jmsOperations.receive(); +// return (User) receivedMessage.getObject(); +// } catch (JMSException jmsException) { +// throw JmsUtils.convertJmsAccessException(jmsException); +// } + return (User) jmsOperations.receiveAndConvert(); + } + + @JmsListener(destination = "queueName", containerFactory = "myFactory") + public void listen(User user) { + System.out.println(user.getName()); + } +} diff --git a/springweb2/src/main/java/com/max/impl/UserRepo.java b/springweb2/src/main/java/com/max/impl/UserRepo.java new file mode 100644 index 0000000..f8f9987 --- /dev/null +++ b/springweb2/src/main/java/com/max/impl/UserRepo.java @@ -0,0 +1,15 @@ +package com.max.impl; + +import com.max.interfaces.Repo; +import org.springframework.stereotype.Repository; + +@Repository +public class UserRepo implements Repo { +// @Secured("ROLE_ADMIN") +// @RolesAllowed("ROLE_ADMIN") +// @PreAuthorize("hasRole('ROLE_ADMIN')") +// @PostAuthorize("hasRole('ROLE_ADMIN')") + public void createTable() { + System.out.println("user table was created"); + } +} diff --git a/springweb2/src/main/java/com/max/interfaces/JmsService.java b/springweb2/src/main/java/com/max/interfaces/JmsService.java new file mode 100644 index 0000000..4824662 --- /dev/null +++ b/springweb2/src/main/java/com/max/interfaces/JmsService.java @@ -0,0 +1,9 @@ +package com.max.interfaces; + +import com.max.entities.User; + +public interface JmsService { + void sendMessage(User user); + User receiveMessage(); + void listen(User user); +} diff --git a/springweb2/src/main/java/com/max/interfaces/Repo.java b/springweb2/src/main/java/com/max/interfaces/Repo.java new file mode 100644 index 0000000..0d9e934 --- /dev/null +++ b/springweb2/src/main/java/com/max/interfaces/Repo.java @@ -0,0 +1,5 @@ +package com.max.interfaces; + +public interface Repo { + void createTable(); +} diff --git a/springweb2/src/main/java/com/max/soap/SoapService.java b/springweb2/src/main/java/com/max/soap/SoapService.java new file mode 100644 index 0000000..4cf1d10 --- /dev/null +++ b/springweb2/src/main/java/com/max/soap/SoapService.java @@ -0,0 +1,8 @@ +package com.max.soap; + +import javax.jws.WebService; + +@WebService(serviceName = "SoapService") +public interface SoapService { + void printMessage(String s); +} diff --git a/springweb2/src/main/java/com/max/soap/SoapServiceEndpoint.java b/springweb2/src/main/java/com/max/soap/SoapServiceEndpoint.java new file mode 100644 index 0000000..41ef3f5 --- /dev/null +++ b/springweb2/src/main/java/com/max/soap/SoapServiceEndpoint.java @@ -0,0 +1,13 @@ +package com.max.soap; + +import javax.jws.WebService; + +//@Component +@WebService(serviceName = "SoapService") +public class SoapServiceEndpoint { +// @Autowired +// SoapService soapService; + public void printMessage(String s) { +// soapService.printMessage(s); + } +} diff --git a/springweb2/src/main/java/com/max/soap/SoapServiceImpl.java b/springweb2/src/main/java/com/max/soap/SoapServiceImpl.java new file mode 100644 index 0000000..e53df29 --- /dev/null +++ b/springweb2/src/main/java/com/max/soap/SoapServiceImpl.java @@ -0,0 +1,7 @@ +package com.max.soap; + +public class SoapServiceImpl implements SoapService { + public void printMessage(String s) { + System.out.println(s); + } +} diff --git a/springweb2/src/main/java/com/max/test/controllers/MyController.java b/springweb2/src/main/java/com/max/test/controllers/MyController.java new file mode 100644 index 0000000..d274e6a --- /dev/null +++ b/springweb2/src/main/java/com/max/test/controllers/MyController.java @@ -0,0 +1,22 @@ +package com.max.test.controllers; + +import com.max.test.entities.User; +import org.springframework.web.bind.annotation.*; + +@RestController +public class MyController { + @GetMapping("myTest") + public String test() { + return "test!!!"; + } + @PostMapping("testJson") + public User json() { + return new User("Max"); + } + @PutMapping("testParam") + public String testParams(@RequestParam int id) { +// @PutMapping("testParam/{id}") +// public String testParams(@PathVariable int id) { + return "" + id; + } +} diff --git a/springweb2/src/main/java/com/max/test/controllers/TestController.java b/springweb2/src/main/java/com/max/test/controllers/TestController.java new file mode 100644 index 0000000..39b352a --- /dev/null +++ b/springweb2/src/main/java/com/max/test/controllers/TestController.java @@ -0,0 +1,22 @@ +package com.max.test.controllers; + +import com.max.test.entities.User; +import org.springframework.web.bind.annotation.*; + +@RestController +public class TestController { + @GetMapping("test") + public String test() { + return "test!!!"; + } + @PostMapping(value = "testPost") + public User testPost() { + return new User("Max"); + } +// @GetMapping("testParams/{id}") +// public String testParams(@PathVariable int id) { + @GetMapping("testParams") + public String testParams(@RequestParam int id) { + return "" + id; + } +} diff --git a/springweb2/src/main/java/com/max/test/entities/User.java b/springweb2/src/main/java/com/max/test/entities/User.java new file mode 100644 index 0000000..8d983dc --- /dev/null +++ b/springweb2/src/main/java/com/max/test/entities/User.java @@ -0,0 +1,36 @@ +package com.max.test.entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.io.Serializable; + +@Entity +public class User implements Serializable { + @GeneratedValue(strategy = GenerationType.AUTO) + @Id + int id; + String name; + + public User() {} + public User(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/springweb2/src/main/java/com/max/test/impl/TestRepoImpl.java b/springweb2/src/main/java/com/max/test/impl/TestRepoImpl.java new file mode 100644 index 0000000..c42347c --- /dev/null +++ b/springweb2/src/main/java/com/max/test/impl/TestRepoImpl.java @@ -0,0 +1,24 @@ +package com.max.test.impl; + +import com.max.test.entities.User; +import com.max.test.interfaces.TestRepo; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +public class TestRepoImpl implements TestRepo { +// @Autowired +// SessionFactory sessionFactory; + @Override + @Transactional + public void saveUser(User user) { +// sessionFactory.getCurrentSession().save(user); + } + + @Override + public User findUser() { +// TypedQuery query = sessionFactory.getCurrentSession().createQuery("from User", User.class); +// return query.getSingleResult(); + return new User(); + } +} diff --git a/springweb2/src/main/java/com/max/test/impl/Toyota.java b/springweb2/src/main/java/com/max/test/impl/Toyota.java new file mode 100644 index 0000000..ddfe304 --- /dev/null +++ b/springweb2/src/main/java/com/max/test/impl/Toyota.java @@ -0,0 +1,12 @@ +package com.max.test.impl; + +import com.max.test.interfaces.Car; +import org.springframework.stereotype.Component; + +@Component +public class Toyota implements Car { + @Override + public void drive() { + System.out.println("drive"); + } +} diff --git a/springweb2/src/main/java/com/max/test/interfaces/Car.java b/springweb2/src/main/java/com/max/test/interfaces/Car.java new file mode 100644 index 0000000..c963adb --- /dev/null +++ b/springweb2/src/main/java/com/max/test/interfaces/Car.java @@ -0,0 +1,5 @@ +package com.max.test.interfaces; + +public interface Car { + void drive(); +} diff --git a/springweb2/src/main/java/com/max/test/interfaces/TestRepo.java b/springweb2/src/main/java/com/max/test/interfaces/TestRepo.java new file mode 100644 index 0000000..4e8b6ce --- /dev/null +++ b/springweb2/src/main/java/com/max/test/interfaces/TestRepo.java @@ -0,0 +1,8 @@ +package com.max.test.interfaces; + +import com.max.test.entities.User; + +public interface TestRepo { + void saveUser(User student); + User findUser(); +} diff --git a/springweb2/src/main/resources/WebSocket.js b/springweb2/src/main/resources/WebSocket.js new file mode 100644 index 0000000..eef5e10 --- /dev/null +++ b/springweb2/src/main/resources/WebSocket.js @@ -0,0 +1,5 @@ +var sock = new WebSocket('ws://' + window.location.host + '/mySocketHandler'); +sock.onmessage = function(e) { + console.log('Received message: ', e.data); +}; +sock.send("Hello "); \ No newline at end of file diff --git a/springweb2/src/main/webapp/WEB-INF/views/home.jsp b/springweb2/src/main/webapp/WEB-INF/views/home.jsp new file mode 100644 index 0000000..95d09f2 --- /dev/null +++ b/springweb2/src/main/webapp/WEB-INF/views/home.jsp @@ -0,0 +1 @@ +hello world \ No newline at end of file diff --git a/springweb2/src/main/webapp/WEB-INF/views/login.jsp b/springweb2/src/main/webapp/WEB-INF/views/login.jsp new file mode 100644 index 0000000..6c1b61e --- /dev/null +++ b/springweb2/src/main/webapp/WEB-INF/views/login.jsp @@ -0,0 +1,21 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Invalid username and password. + + + You have been logged out. + + + Username + + + + Password + + + + Log in + + Remember me + \ No newline at end of file diff --git a/springweb2/src/main/webapp/WEB-INF/views/test.jsp b/springweb2/src/main/webapp/WEB-INF/views/test.jsp new file mode 100644 index 0000000..9ccf3b3 --- /dev/null +++ b/springweb2/src/main/webapp/WEB-INF/views/test.jsp @@ -0,0 +1,29 @@ +<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + +test +<%--Hello --%> + <%--logout--%> +<%----%> + <%--this is infor for logged users--%> +<%----%> +<%----%> + <%--this is infor for admins--%> +<%----%> +<%----%> + <%--this is infor for moderator--%> +<%----%> +<%----%> + <%--INFO for admins that logged id--%> +<%----%> +<%----%> + <%----%> + <%--go to admin--%> +<%----%> + + diff --git a/springweb2/src/test/java/DbTest.java b/springweb2/src/test/java/DbTest.java new file mode 100644 index 0000000..cd18e7d --- /dev/null +++ b/springweb2/src/test/java/DbTest.java @@ -0,0 +1,78 @@ +import com.max.test.entities.User; +import com.max.test.interfaces.TestRepo; +import org.hibernate.SessionFactory; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.hibernate5.HibernateTransactionManager; +import org.springframework.orm.hibernate5.LocalSessionFactoryBean; +import org.springframework.test.annotation.Commit; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.annotation.Transactional; + +import javax.sql.DataSource; +import java.util.Properties; + + +//@WebAppConfiguration +@RunWith(SpringRunner.class) +@ContextConfiguration +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class DbTest { + @Autowired + TestRepo testRepo; + @Test + @Transactional//auto rollback + @Commit +// @Rollback +// @Sql("/test-schema.sql") + public void dbTest() { + testRepo.saveUser(new User("Max")); + } + @Test + @Transactional + public void dbTest2() { + System.out.println(testRepo.findUser().getName()); + } + + @Configuration + @ComponentScan("com.max.test") + @EnableTransactionManagement + static class DbTestConfig { + @Bean + public DataSource dataSource() { + DriverManagerDataSource ds = new DriverManagerDataSource(); + ds.setDriverClassName("com.mysql.jdbc.Driver"); + ds.setUrl("jdbc:mysql://localhost:3306/Lessons"); + ds.setUsername("root"); + ds.setPassword("1"); + return ds; + } + @Bean + public LocalSessionFactoryBean sessionFactory(DataSource dataSource) { + LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); + localSessionFactoryBean.setDataSource(dataSource); + localSessionFactoryBean.setPackagesToScan(new String[] { "com.max.test.entities" }); + Properties props = new Properties(); + props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); + props.setProperty("hibernate.show_sql", "true"); + props.setProperty("hibernate.hbm2ddl.auto", "create-drop"); + localSessionFactoryBean.setHibernateProperties(props); + return localSessionFactoryBean; + } + @Bean("myTransaction") + public HibernateTransactionManager txManager(SessionFactory sessionFactory) { + HibernateTransactionManager txManager = new HibernateTransactionManager(); + txManager.setSessionFactory(sessionFactory); + return txManager; + } + } +} diff --git a/springweb2/src/test/java/WebTest.java b/springweb2/src/test/java/WebTest.java new file mode 100644 index 0000000..82c3fcf --- /dev/null +++ b/springweb2/src/test/java/WebTest.java @@ -0,0 +1,90 @@ +import com.max.test.controllers.TestController; +import com.max.test.interfaces.Car; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.mock.web.MockServletContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.request.ServletWebRequest; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@WebAppConfiguration//("src/test/webapp") +@ContextConfiguration +@RunWith(SpringRunner.class) +public class WebTest { + @Autowired + private WebApplicationContext applicationContext; + @Autowired + MockServletContext servletContext; // cached + @Autowired + MockHttpSession session; + @Autowired + MockHttpServletRequest request; + @Autowired + MockHttpServletResponse response; + @Autowired + ServletWebRequest webRequest; +// @Autowired +// TestController testController; + MockMvc mockMvc; + @Before + public void setup() { +// this.mockMvc = MockMvcBuilders.webAppContextSetup(applicationContext).build(); +// this.mockMvc = MockMvcBuilders.standaloneSetup(new TestController()).build(); + this.mockMvc = MockMvcBuilders.standaloneSetup(new TestController()) + .alwaysExpect(status().isOk()).build(); + } + + @Test + public void myTest() { + Car bean = applicationContext.getBean(Car.class); + bean.drive(); + } + + @Test + public void webTest() throws Exception { + mockMvc.perform(get("/test") + .accept(MediaType.TEXT_HTML)) + .andExpect(status().isOk()); + } + @Test + public void postTest() throws Exception { + mockMvc.perform(post("/testPost") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentType("application/json;charset=UTF-8")) + .andExpect(jsonPath("$.name").value("Max")); + } + + @Test + public void paramsTest() throws Exception { +// mockMvc.perform(get("/testParams/{id}", 22)).andExpect(status().isOk()); +// mockMvc.perform(get("/testParams?id={id}", 22)).andExpect(status().isOk()); + MvcResult result = mockMvc.perform(get("/testParams") + .param("id", "22")) + .andExpect(status().isOk()) + .andReturn(); + System.out.println(result.getResponse().getContentAsString()); + } + + @Configuration + @ComponentScan("com.max.test") + static class TestConfig { + } +} diff --git a/sprng/pom.xml b/sprng/pom.xml new file mode 100644 index 0000000..4679637 --- /dev/null +++ b/sprng/pom.xml @@ -0,0 +1,112 @@ + + + 4.0.0 + + com.max + spring + 1.0-SNAPSHOT + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + + + org.springframework + spring-context + 5.0.1.RELEASE + + + javax.inject + javax.inject + 1 + + + + org.aspectj + aspectjweaver + 1.8.12 + + + + junit + junit + 4.12 + test + + + + org.springframework + spring-test + 5.0.1.RELEASE + test + + + + + commons-dbcp + commons-dbcp + 1.2.2 + + + + org.springframework + spring-jdbc + 5.0.1.RELEASE + + + + + com.h2database + h2 + 1.4.196 + + + + mysql + mysql-connector-java + 8.0.8-dmr + + + + org.springframework + spring-orm + 5.0.1.RELEASE + + + + org.hibernate + hibernate-search-orm + 5.8.2.Final + + + + org.springframework.data + spring-data-jpa + 2.0.1.RELEASE + + + + org.springframework.data + spring-data-mongodb + 2.0.1.RELEASE + + + org.springframework + spring-web + RELEASE + + + \ No newline at end of file diff --git a/sprng/src/main/java/com/max/Main.java b/sprng/src/main/java/com/max/Main.java new file mode 100644 index 0000000..a320498 --- /dev/null +++ b/sprng/src/main/java/com/max/Main.java @@ -0,0 +1,80 @@ +package com.max; + +import com.max.config.JmxConfig; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class Main { + public static void main(String[] args) throws InterruptedException { + ApplicationContext context = new AnnotationConfigApplicationContext(JmxConfig.class); + +// StudentAutoRepository bean = context.getBean(StudentAutoRepository.class); +// Student max = bean.getStudentByName("Max"); +// System.out.println(max.getId()); +// bean.save(new Student("Max")); +// StudentRepo bean = context.getBean(StudentRepo.class); +// bean.saveStudent(); +// CarRepo bean = context.getBean(CarRepo.class); +// bean.saveCar(); +// UserAutoRepository bean = context.getBean(UserAutoRepository.class); +// User byId = bean.getById(3); +// System.out.println(byId.getName()); +// User user = bean.getByName("Mike"); +// System.out.println(user.getId()); +// List users = bean.findAll(); +// System.out.println(users.size()); + +// UserRepo bean = context.getBean(UserRepo.class); +// bean.saveUser(new User("Max")); +// BookAutoRepository bean = context.getBean(BookAutoRepository.class); +// bean.save(new Book("new")); +// Book max = bean.findByNames("Max"); +// Book max = bean.getById(4); +// System.out.println(max.getName()); +// System.out.println(max.getId()); +// UserRepo bean = context.getBean(UserRepo.class); +// bean.saveUser(new User("Max")); +// Repo bean = context.getBean(BookAutoRepository.class); +// bean.createTable(); + + +// ApplicationContext context = new AnnotationConfigApplicationContext(DbConfig.class); +// Car bean = context.getBean(Toyota.class); +// bean.drive(); +// AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); +// context.getEnvironment().setActiveProfiles("dev"); +// context.register(Config.class); +// context.refresh(); +// ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:config.xml"); +// ApplicationContext context = new AnnotationConfigWebApplicationContext(); +// ApplicationContext context = new FileSystemXmlApplicationContext("//home/max/IdeaProjects/JavaLessons/sprng/src/main/resources/config.xml"); +// ApplicationContext context = new XmlWebApplicationContext(); +// GenericXmlApplicationContext context = new GenericXmlApplicationContext(); +// context.getEnvironment().setActiveProfiles("dev"); +// context.load("classpath*:config.xml"); +// context.refresh(); +// ApplicationContext context = new AnnotationConfigApplicationContext(com.max.config.AppConfig.class); + +// ExpressionParser parser = new SpelExpressionParser(); +// Expression exp = parser.parseExpression("'Hello World'"); +// String message = (String) exp.getValue(); +// System.out.println(message); + +// BestFm bestFm = new BestFm(); +// bestFm.setName("TestFm"); +// ExpressionParser parser2 = new SpelExpressionParser(); +// Expression exp2 = parser2.parseExpression("name"); +// EvaluationContext context2 = new StandardEvaluationContext(bestFm); +// String name = (String) exp2.getValue(context2); +// System.out.println(name); + +// System.out.println(bean.getRadio() == bean.getRadio()); +// ((ConfigurableApplicationContext)context).close(); + +// DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); +// XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory); +// reader.loadBeanDefinitions(new FileSystemResource("sprng/src/main/resources/config.xml")); +// Toyota bean = factory.getBean(Toyota.class); +// bean.drive(); + } +} diff --git a/sprng/src/main/java/com/max/Main2.java b/sprng/src/main/java/com/max/Main2.java new file mode 100644 index 0000000..246f47e --- /dev/null +++ b/sprng/src/main/java/com/max/Main2.java @@ -0,0 +1,14 @@ +package com.max; + +import com.max.config.RmiConfig2; +import com.max.interfaces.RmiService; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class Main2 { + public static void main(String[] args) { + ApplicationContext context = new AnnotationConfigApplicationContext(RmiConfig2.class); + RmiService bean = context.getBean(RmiService.class); + bean.printMessage("hello world"); + } +} diff --git a/sprng/src/main/java/com/max/MyMBean.java b/sprng/src/main/java/com/max/MyMBean.java new file mode 100644 index 0000000..948d3a8 --- /dev/null +++ b/sprng/src/main/java/com/max/MyMBean.java @@ -0,0 +1,20 @@ +package com.max; + +import org.springframework.stereotype.Component; + +@Component +public class MyMBean { + String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void printName() throws InterruptedException { + System.out.println(name); + } +} diff --git a/sprng/src/main/java/com/max/aop/AopMain.java b/sprng/src/main/java/com/max/aop/AopMain.java new file mode 100644 index 0000000..101b43f --- /dev/null +++ b/sprng/src/main/java/com/max/aop/AopMain.java @@ -0,0 +1,23 @@ +package com.max.aop; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class AopMain { + public static void main(String[] args) { +// ProxyFactory factory = new ProxyFactory(new UserRepository()); +// factory.adddInterface(Repo.class); +// factory.addAdvice(new RetryAdvice()); +// factory.setExposeProxy(true); +// Repo repo = (Repo) factory.getProxy(); +// repo.printName("Max"); + + ApplicationContext context = new AnnotationConfigApplicationContext(com.max.aop.AspectConf.class); +// ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:aspConf.xml"); + Repo bean = context.getBean(Repo.class); +// bean.getInfo(); + bean.printName("Max"); +// Encoreable bean2 = (Encoreable) bean; +// bean2.performEncore(); + } +} diff --git a/sprng/src/main/java/com/max/aop/AspectConf.java b/sprng/src/main/java/com/max/aop/AspectConf.java new file mode 100644 index 0000000..18d89db --- /dev/null +++ b/sprng/src/main/java/com/max/aop/AspectConf.java @@ -0,0 +1,25 @@ +package com.max.aop; + +import org.springframework.context.annotation.Bean; + +//@Configuration +//@EnableAspectJAutoProxy(exposeProxy = true) +//@ComponentScan +public class AspectConf { + @Bean + TransactionAspect getTransaction() { + return new TransactionAspect(); + } +// @Bean +// TransactionAspect2 getTransaction2() { +// return new TransactionAspect2(); +// } +// @Bean +// TransactionAround getTransactionAround() { +// return new TransactionAround(); +// } +// @Bean +// UserRepoIntroducer getIntroducer() { +// return new UserRepoIntroducer(); +// } +} \ No newline at end of file diff --git a/sprng/src/main/java/com/max/aop/DefaultEncoreable.java b/sprng/src/main/java/com/max/aop/DefaultEncoreable.java new file mode 100644 index 0000000..cd89e53 --- /dev/null +++ b/sprng/src/main/java/com/max/aop/DefaultEncoreable.java @@ -0,0 +1,7 @@ +package com.max.aop; + +public class DefaultEncoreable implements Encoreable { + public void performEncore() { + System.out.println("encore"); + } +} diff --git a/sprng/src/main/java/com/max/aop/Encoreable.java b/sprng/src/main/java/com/max/aop/Encoreable.java new file mode 100644 index 0000000..1eb1501 --- /dev/null +++ b/sprng/src/main/java/com/max/aop/Encoreable.java @@ -0,0 +1,5 @@ +package com.max.aop; + +public interface Encoreable { + void performEncore(); +} diff --git a/sprng/src/main/java/com/max/aop/Repo.java b/sprng/src/main/java/com/max/aop/Repo.java new file mode 100644 index 0000000..52e888f --- /dev/null +++ b/sprng/src/main/java/com/max/aop/Repo.java @@ -0,0 +1,6 @@ +package com.max.aop; + +public interface Repo { + void getInfo(); + void printName(String name); +} diff --git a/sprng/src/main/java/com/max/aop/TransactionAround.java b/sprng/src/main/java/com/max/aop/TransactionAround.java new file mode 100644 index 0000000..279c0d1 --- /dev/null +++ b/sprng/src/main/java/com/max/aop/TransactionAround.java @@ -0,0 +1,19 @@ +package com.max.aop; + +import org.aspectj.lang.ProceedingJoinPoint; + +//@Aspect +public class TransactionAround { +// @Around("execution(* com.max.aop.Repo.getInfo())") + public void watchPerformance(ProceedingJoinPoint jp) { + try { + System.out.println("transaction begin"); + jp.proceed(); + System.out.println("transaction end"); + } catch (Throwable e) { + System.out.println("transaction rollback"); + } finally { + System.out.println("transaction commit"); + } + } +} diff --git a/sprng/src/main/java/com/max/aop/TransactionAspect.java b/sprng/src/main/java/com/max/aop/TransactionAspect.java new file mode 100644 index 0000000..f061e80 --- /dev/null +++ b/sprng/src/main/java/com/max/aop/TransactionAspect.java @@ -0,0 +1,67 @@ +package com.max.aop; + +import org.aspectj.lang.annotation.*; +import org.springframework.core.annotation.Order; + +@Aspect +@Order(value = 1) +public class TransactionAspect { //} implements Ordered { + +// @Pointcut("execution(* com.max.aop.UserRepository.printName(String)) && args(name)") +// public void printName(String name) {} +// +// @Before("printName(name)") + public void printNameBefore(String name) { + System.out.println("before print name " + name); + } + + @Pointcut("execution(* com.max.aop.Repo.getInfo())") +// @Pointcut("execution(public * com.max.aop.Repo.getInfo())") +// @Pointcut("execution(public void com.max.aop.Repo.getInfo())") +// @Pointcut("execution(public void com.max.aop.Repo.*())") +// @Pointcut("execution(public void com.max.aop.Repo.*(..))") +// @Pointcut("execution(public void com.max.aop..*(..))") +// @Pointcut("execution(public void com.max.aop.*.*(..))") +// @Pointcut("execution(public void com.max.aop..*(..)) && execution(* com.max.aop.*.*()))") +// @Pointcut("execution(public void com.max.aop..*(..)) || execution(* com.max.aop.*.*()))") +// @Pointcut("execution(public void com.max.aop..*(..)) ! execution(* com.max.aop.*.*()))") +// @Pointcut("execution(public void com.max.aop..*(..)) && within(com.max.aop.UserRepository)") +// @Pointcut("within(com.max.aop.UserRepository)") +// @Pointcut("within(com.max.aop.User*)") +// @Pointcut("within(com.max.a*.User*)") +// @Pointcut("execution(public * *(..))") +// @Pointcut("bean(userRepo)") +// @Pointcut("this(com.max.aop.Repo)") +// @Pointcut("target(com.max.aop.Repo)") +// @Pointcut("@target(org.springframework.stereotype.Component)") +// @Pointcut("@annotation(org.springframework.context.annotation.Primary)") + public void getInfo() {} + +// @Before("execution(* com.max.aop.Repo.getInfo())") + @Before("getInfo()") + private void before() { + System.out.println("transaction begin"); + } + + @After("getInfo()") +// @After("execution(* com.max.aop.Repo.getInfo())") + private void after() { + System.out.println("transaction returned"); + } + + @AfterReturning("getInfo()") +// @AfterReturning("execution(* com.max.aop.Repo.getInfo())") + private void afterReturn() { + System.out.println("transaction commit"); + } + + @AfterThrowing("getInfo()") +// @AfterThrowing("execution(* com.max.aop.Repo.getInfo())") + private void afterThrowing() { + System.out.println("transaction rollback"); + } + +// public int getOrder() { +// return 0; +// } +} diff --git a/sprng/src/main/java/com/max/aop/TransactionAspect2.java b/sprng/src/main/java/com/max/aop/TransactionAspect2.java new file mode 100644 index 0000000..8c7bf72 --- /dev/null +++ b/sprng/src/main/java/com/max/aop/TransactionAspect2.java @@ -0,0 +1,19 @@ +package com.max.aop; + + +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.core.annotation.Order; + +@Aspect +@Order(value = 0) +public class TransactionAspect2 { //implements Ordered { + @Before("execution(* com.max.aop.Repo.getInfo())") + private void before() { + System.out.println("transaction begin2"); + } + +// public int getOrder() { +// return 1; +// } +} diff --git a/sprng/src/main/java/com/max/aop/UserRepoIntroducer.java b/sprng/src/main/java/com/max/aop/UserRepoIntroducer.java new file mode 100644 index 0000000..d24163a --- /dev/null +++ b/sprng/src/main/java/com/max/aop/UserRepoIntroducer.java @@ -0,0 +1,10 @@ +package com.max.aop; + +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.DeclareParents; + +@Aspect +public class UserRepoIntroducer { + @DeclareParents(value = "com.max.aop.Repo+", defaultImpl = DefaultEncoreable.class) + public static Encoreable encoreable; +} diff --git a/sprng/src/main/java/com/max/aop/UserRepository.java b/sprng/src/main/java/com/max/aop/UserRepository.java new file mode 100644 index 0000000..c051f5c --- /dev/null +++ b/sprng/src/main/java/com/max/aop/UserRepository.java @@ -0,0 +1,17 @@ +package com.max.aop; + +import org.springframework.aop.framework.AopContext; +import org.springframework.stereotype.Component; + +@Component("userRepo") +public class UserRepository implements Repo { +// @Primary + public void getInfo() { + System.out.println("User max, age 22"); + } + + public void printName(String name) { + ((Repo) AopContext.currentProxy()).getInfo(); + System.out.println(name); + } +} diff --git a/sprng/src/main/java/com/max/config/AppConfig.java b/sprng/src/main/java/com/max/config/AppConfig.java new file mode 100644 index 0000000..923aff2 --- /dev/null +++ b/sprng/src/main/java/com/max/config/AppConfig.java @@ -0,0 +1,23 @@ +package com.max.config; + +//@Configuration +public class AppConfig { +// @Bean +// public Car getCar1() { +// Toyota car = new Toyota(); +// car.setRadio(bestFm()); +// return car; +// } +// +// @Bean +// public Car getCar2() { +// Ferrary car = new Ferrary(); +// car.setRadio(bestFm()); +// return car; +// } + +// @Bean +// public Radio bestFm() { +// return new BestFm(); +// } +} diff --git a/sprng/src/main/java/com/max/config/Config.java b/sprng/src/main/java/com/max/config/Config.java new file mode 100644 index 0000000..a3f4c5e --- /dev/null +++ b/sprng/src/main/java/com/max/config/Config.java @@ -0,0 +1,15 @@ +package com.max.config; + +//@Configuration +//@ComponentScan +//@Import(Config2.class) +//@ImportResource("classpath:config2.xml") +//@PropertySource("classpath:my.properties") +public class Config { +// @Autowired +// Environment env; +// @Bean +// public Car getToyota(@MyRadio Radio radio) { +// return new Toyota(radio, env.getProperty("name")); +// } +} diff --git a/sprng/src/main/java/com/max/config/Config2.java b/sprng/src/main/java/com/max/config/Config2.java new file mode 100644 index 0000000..17e72ad --- /dev/null +++ b/sprng/src/main/java/com/max/config/Config2.java @@ -0,0 +1,19 @@ +package com.max.config; + +//@Configuration +public class Config2 { +// @Bean +//// @Profile("default") +// @Primary +// @MyRadio +// public Radio getRadio() { +// return new BestFm(); +// } +// @Bean +// @Profile("dev") +// @Conditional(MyCondition.class) +// @Primary +// public Radio getWorstFm() { +// return new WorstFm(); +// } +} diff --git a/sprng/src/main/java/com/max/config/DbConfig.java b/sprng/src/main/java/com/max/config/DbConfig.java new file mode 100644 index 0000000..47d11d9 --- /dev/null +++ b/sprng/src/main/java/com/max/config/DbConfig.java @@ -0,0 +1,52 @@ +package com.max.config; + +//@Configuration +////@ComponentScan("com.max.impl") +//@ComponentScan("com.max.mongo") +////@Import(HiberConfig.class) +////@Import(JpaConfig.class) +//@Import(MongoConfig.class) +public class DbConfig { +// @Bean +// public DataSource dataSource() { +// DriverManagerDataSource ds = new DriverManagerDataSource(); +// ds.setDriverClassName("com.mysql.jdbc.Driver"); +// ds.setUrl("jdbc:mysql://localhost:3306/Lessons"); +// ds.setUsername("root"); +// ds.setPassword("1"); +// return ds; +// } +// @Bean +// public JdbcTemplate jdbcTemplate(DataSource dataSource) { +// return new JdbcTemplate(dataSource); +// } +// @Bean +// public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource dataSource) { +// return new NamedParameterJdbcTemplate(dataSource); +// } +// @Bean +// public DataSource dataSource() { +// DriverManagerDataSource ds = new DriverManagerDataSource(); +// ds.setDriverClassName("org.h2.Driver"); +// ds.setUrl("jdbc:h2:~/test"); +// ds.setUsername("sa"); +// ds.setPassword(""); +// return ds; +// } +// @Bean +// public DataSource dataSource() { +// return new EmbeddedDatabaseBuilder(). +// setType(EmbeddedDatabaseType.H2).addScript("classpath:myScript.sql").build(); +// } +// @Bean +// public BasicDataSource dataSource() { +// BasicDataSource dataSource = new BasicDataSource(); +// dataSource.setDriverClassName("org.h2.Driver"); +// dataSource.setUrl("jdbc:h2:~/test"); +// dataSource.setUsername("sa"); +// dataSource.setPassword(""); +// dataSource.setInitialSize(5); +// dataSource.setMaxActive(10); +// return dataSource; +// } +} diff --git a/sprng/src/main/java/com/max/config/HiberConfig.java b/sprng/src/main/java/com/max/config/HiberConfig.java new file mode 100644 index 0000000..3ad04e2 --- /dev/null +++ b/sprng/src/main/java/com/max/config/HiberConfig.java @@ -0,0 +1,32 @@ +package com.max.config; + +import org.hibernate.SessionFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.orm.hibernate5.HibernateTransactionManager; +import org.springframework.orm.hibernate5.LocalSessionFactoryBean; + +import javax.sql.DataSource; +import java.util.Properties; + +//@Configuration +//@EnableTransactionManagement +public class HiberConfig { + @Bean + public LocalSessionFactoryBean sessionFactory(DataSource dataSource) { + LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean(); + localSessionFactoryBean.setDataSource(dataSource); + localSessionFactoryBean.setPackagesToScan(new String[] { "com.max.entities" }); + Properties props = new Properties(); + props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); + props.setProperty("hibernate.show_sql", "true"); + props.setProperty("hibernate.hbm2ddl.auto", "create-drop"); + localSessionFactoryBean.setHibernateProperties(props); + return localSessionFactoryBean; + } + @Bean("myTransaction") + public HibernateTransactionManager txManager(SessionFactory sessionFactory) { + HibernateTransactionManager txManager = new HibernateTransactionManager(); + txManager.setSessionFactory(sessionFactory); + return txManager; + } +} diff --git a/sprng/src/main/java/com/max/config/JmxConfig.java b/sprng/src/main/java/com/max/config/JmxConfig.java new file mode 100644 index 0000000..5a7f7d0 --- /dev/null +++ b/sprng/src/main/java/com/max/config/JmxConfig.java @@ -0,0 +1,21 @@ +package com.max.config; + +import com.max.MyMBean; +import org.springframework.context.annotation.Bean; +import org.springframework.jmx.export.MBeanExporter; + +import java.util.HashMap; +import java.util.Map; + +//@Configuration +//@ComponentScan("com.max") +public class JmxConfig { + @Bean + public MBeanExporter mbeanExporter(MyMBean myMBean) { + MBeanExporter exporter = new MBeanExporter(); + Map beans = new HashMap<>(); + beans.put("myBean:name=MyMBean", myMBean); + exporter.setBeans(beans); + return exporter; + } +} diff --git a/sprng/src/main/java/com/max/config/JpaConfig.java b/sprng/src/main/java/com/max/config/JpaConfig.java new file mode 100644 index 0000000..c980df7 --- /dev/null +++ b/sprng/src/main/java/com/max/config/JpaConfig.java @@ -0,0 +1,39 @@ +package com.max.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalEntityManagerFactoryBean; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@Configuration +@EnableTransactionManagement +@EnableJpaRepositories(basePackages="com.max.interfaces") +public class JpaConfig { + @Bean("entityManagerFactory") + public LocalEntityManagerFactoryBean entityManagerFactoryBean() { + LocalEntityManagerFactoryBean bean = new LocalEntityManagerFactoryBean(); + bean.setPersistenceUnitName("localJpa"); + return bean; + } + @Bean("transactionManager") + public JpaTransactionManager txManager() { + return new JpaTransactionManager(); + } +// @Bean +// public JpaVendorAdapter jpaVendorAdapter() { +// HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); +// adapter.setDatabase(Database.MYSQL); +// adapter.setShowSql(true); +// adapter.setGenerateDdl(true); +// adapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect"); +// return adapter; +// } +// @Bean("myTransaction") +// public HibernateTransactionManager txManager(SessionFactory sessionFactory) { +// HibernateTransactionManager txManager = new HibernateTransactionManager(); +// txManager.setSessionFactory(sessionFactory); +// return txManager; +// } +} diff --git a/sprng/src/main/java/com/max/config/MongoConfig.java b/sprng/src/main/java/com/max/config/MongoConfig.java new file mode 100644 index 0000000..21c7a17 --- /dev/null +++ b/sprng/src/main/java/com/max/config/MongoConfig.java @@ -0,0 +1,35 @@ +package com.max.config; + +import com.mongodb.MongoClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.config.AbstractMongoConfiguration; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; + +@Configuration +@EnableMongoRepositories("com.max.mongo") +public class MongoConfig extends AbstractMongoConfiguration { + @Override + @Bean + public MongoClient mongoClient() { + return new MongoClient(); + } + + @Override + @Bean + protected String getDatabaseName() { + return "test"; + } +// @Bean +// MongoClient mongoClient() { +// return new MongoClient(); +// } +// @Bean +// MongoClientFactoryBean mongoClientFactoryBean() { +// return new MongoClientFactoryBean(); +// } +// @Bean +// MongoOperations mongoOperations(MongoClient mongoClient) { +// return new MongoTemplate(mongoClient, "test"); +// } +} diff --git a/sprng/src/main/java/com/max/config/MyRadio.java b/sprng/src/main/java/com/max/config/MyRadio.java new file mode 100644 index 0000000..5fc9c9e --- /dev/null +++ b/sprng/src/main/java/com/max/config/MyRadio.java @@ -0,0 +1,10 @@ +package com.max.config; + +import org.springframework.beans.factory.annotation.Qualifier; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +@Qualifier +public @interface MyRadio {} \ No newline at end of file diff --git a/sprng/src/main/java/com/max/config/RmiConfig.java b/sprng/src/main/java/com/max/config/RmiConfig.java new file mode 100644 index 0000000..2c572b7 --- /dev/null +++ b/sprng/src/main/java/com/max/config/RmiConfig.java @@ -0,0 +1,24 @@ +package com.max.config; + +import com.max.impl.RmiServiceImpl; +import com.max.interfaces.RmiService; +import org.springframework.context.annotation.Bean; +import org.springframework.remoting.rmi.RmiServiceExporter; + +//@Configuration +public class RmiConfig { + @Bean + public RmiService rmiService() { + return new RmiServiceImpl(); + } + @Bean + public RmiServiceExporter rmiServiceExporter(RmiService rmiService) { + RmiServiceExporter exporter = new RmiServiceExporter(); + exporter.setService(rmiService); + exporter.setServiceName("rmiServiceName"); + exporter.setServiceInterface(RmiService.class); +// exporter.setRegistryHost("localhost"); +// exporter.setRegistryPort(21345); + return exporter; + } +} diff --git a/sprng/src/main/java/com/max/config/RmiConfig2.java b/sprng/src/main/java/com/max/config/RmiConfig2.java new file mode 100644 index 0000000..082d584 --- /dev/null +++ b/sprng/src/main/java/com/max/config/RmiConfig2.java @@ -0,0 +1,16 @@ +package com.max.config; + +import com.max.interfaces.RmiService; +import org.springframework.context.annotation.Bean; +import org.springframework.remoting.rmi.RmiProxyFactoryBean; + +//@Configuration +public class RmiConfig2 { + @Bean + public RmiProxyFactoryBean proxyFactoryBean() { + RmiProxyFactoryBean bean = new RmiProxyFactoryBean(); + bean.setServiceUrl("rmi://localhost/rmiServiceName"); + bean.setServiceInterface(RmiService.class); + return bean; + } +} diff --git a/sprng/src/main/java/com/max/entities/Book.java b/sprng/src/main/java/com/max/entities/Book.java new file mode 100644 index 0000000..df67ee4 --- /dev/null +++ b/sprng/src/main/java/com/max/entities/Book.java @@ -0,0 +1,41 @@ +package com.max.entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Book { + @GeneratedValue(strategy = GenerationType.AUTO) + @Id + int id; + String name; + + public Book() {} + + public Book(String name) { + this.name = name; + } + + public Book(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/sprng/src/main/java/com/max/entities/User.java b/sprng/src/main/java/com/max/entities/User.java new file mode 100644 index 0000000..53607ab --- /dev/null +++ b/sprng/src/main/java/com/max/entities/User.java @@ -0,0 +1,35 @@ +package com.max.entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class User { + @GeneratedValue(strategy = GenerationType.AUTO) + @Id + int id; + String name; + + public User() {} + public User(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/sprng/src/main/java/com/max/impl/BestFm.java b/sprng/src/main/java/com/max/impl/BestFm.java new file mode 100644 index 0000000..b5c8064 --- /dev/null +++ b/sprng/src/main/java/com/max/impl/BestFm.java @@ -0,0 +1,23 @@ +package com.max.impl; + +import com.max.interfaces.Radio; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component//("radio") +//@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class BestFm implements Radio { + @Value("best") + String name; + public void listenMusic() { + System.out.println("cool music"); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/sprng/src/main/java/com/max/impl/BookRepository.java b/sprng/src/main/java/com/max/impl/BookRepository.java new file mode 100644 index 0000000..f915ef6 --- /dev/null +++ b/sprng/src/main/java/com/max/impl/BookRepository.java @@ -0,0 +1,45 @@ +package com.max.impl; + +import com.max.entities.Book; +import com.max.interfaces.Repo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcOperations; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +//@Repository +public class BookRepository implements Repo { + @Autowired + JdbcOperations jdbcOperations; + @Autowired + NamedParameterJdbcTemplate namedParameterJdbcTemplate; + + public void createTable() { + jdbcOperations.execute("CREATE TABLE IF NOT EXISTS Books (id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id))"); + jdbcOperations.update("insert into Books (name) values ('first')"); +// jdbcOperations.update("update Books set name = 'two' where id = 1"); + jdbcOperations.update("update Books set name = 'two' where id = ?", 1); +// jdbcOperations.queryForObject("select * from Books where id = 1", new BookRowMapper()); +// Book book = jdbcOperations.queryForObject("select * from Books where id = ?", new BookRowMapper(),1); +// Book book = jdbcOperations.queryForObject("select * from Books where id = ?", +// (rs, rowNum) -> {return new Book(rs.getInt("id"), rs.getString("name"));}, +// 1); +// System.out.println(book.getId()); +// System.out.println(book.getName()); + + Map map = new HashMap<>(); + map.put("id",1); + namedParameterJdbcTemplate.update("UPDATE Books set name = 'hi' where id = :id", map); + } + + private static final class BookRowMapper implements RowMapper { + public Book mapRow(ResultSet rs, int rowNum) throws SQLException { + return new Book(rs.getInt("id"), rs.getString("name")); + } + } +} diff --git a/sprng/src/main/java/com/max/impl/BookRepositoryImpl.java b/sprng/src/main/java/com/max/impl/BookRepositoryImpl.java new file mode 100644 index 0000000..ccd64cb --- /dev/null +++ b/sprng/src/main/java/com/max/impl/BookRepositoryImpl.java @@ -0,0 +1,18 @@ +package com.max.impl; + +import com.max.entities.Book; +import com.max.interfaces.BookRepo; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; + +public class BookRepositoryImpl implements BookRepo { + @PersistenceContext + private EntityManager em; + @Override + public Book getById(int id) { + TypedQuery query = em.createQuery("select b from Book b where b.id = " + id, Book.class); + return query.getSingleResult(); + } +} diff --git a/sprng/src/main/java/com/max/impl/Ferrary.java b/sprng/src/main/java/com/max/impl/Ferrary.java new file mode 100644 index 0000000..9c35824 --- /dev/null +++ b/sprng/src/main/java/com/max/impl/Ferrary.java @@ -0,0 +1,18 @@ +package com.max.impl; + +import com.max.interfaces.Car; + +//@Component +public class Ferrary implements Car { + +// @Autowired +// Radio radio; +// +// public void setRadio(Radio radio) { +// this.radio = radio; +// } +// + public void drive() { + System.out.println("ferrary"); + } +} diff --git a/sprng/src/main/java/com/max/impl/RmiServiceImpl.java b/sprng/src/main/java/com/max/impl/RmiServiceImpl.java new file mode 100644 index 0000000..c2659cf --- /dev/null +++ b/sprng/src/main/java/com/max/impl/RmiServiceImpl.java @@ -0,0 +1,10 @@ +package com.max.impl; + +import com.max.interfaces.RmiService; + +public class RmiServiceImpl implements RmiService { + @Override + public void printMessage(String s) { + System.out.println(s); + } +} diff --git a/sprng/src/main/java/com/max/impl/Toyota.java b/sprng/src/main/java/com/max/impl/Toyota.java new file mode 100644 index 0000000..fc5b3f4 --- /dev/null +++ b/sprng/src/main/java/com/max/impl/Toyota.java @@ -0,0 +1,78 @@ +package com.max.impl; + +import com.max.interfaces.Car; +import com.max.interfaces.Radio; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component//("toyota") +//@Resource +//@Service +//@Repo +//@Controller +//@Named +//@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) +//@PropertySource("classpath:my.properties") +//InitializingBean, DisposableBean, BeanPostProcessor, ApplicationContextAware { +public class Toyota implements Car { + @Autowired +// @Resource +// @Inject +// @Required + Radio radio; + + @Value("{'one','two','three'}") + List list;// = Arrays.asList(new String[]{"one", "two", "three"}); + +// @Value("#{1}") +// @Value("#{radio.name}") +// @Value("#{radio.getName()}") +// @Value("#{radio.getName().toUpperCase()}") +// @Value("#{radio.getName()?.toUpperCase()}") +// @Value("#{systemProperties['java.home']}") +// @Value("#{3.14159}") +// @Value("#{'Hello'}") +// @Value("#{'Hello World'.concat('!')}") +// @Value("#{'Hello World'.bytes.length}") +// @Value("#{true}") +// @Value("#{T(java.lang.Math).PI}") +// @Value("#{radio.name + 2}") +// @Value("#{1 < 2}") +// @Value("#{true and false or true and 1 < 5}") +// @Value("#{1 eq 2}") +// @Value("#{1 == 2}") +// @Value("#{radio.name eq 'best'}") +// @Value("#{radio.name == 'best'}") +// @Value("#{radio.name == 'best' ? 'this is true' : 'this is false'}") +// @Value("#{radio.name matches '[a-z]*'}") +// @Value("#{radio.name matches '[0-9]*'}") +// @Value("#{toyota.list[0]}") +// @Value("#{'This is a test'[3]}") +// @Value("#{radio.name}") + @Value("Max") + String name; + + public void setRadio(Radio radio) { + this.radio = radio; + } + + public Radio getRadio() { + return radio; + } + + public void drive() { + radio.listenMusic(); + System.out.println("driving by " + name); + } + + public void setName(String name) { + this.name = name; + } + + public List getList() { + return list; + } +} diff --git a/sprng/src/main/java/com/max/impl/UserRepoImpl.java b/sprng/src/main/java/com/max/impl/UserRepoImpl.java new file mode 100644 index 0000000..a1f360a --- /dev/null +++ b/sprng/src/main/java/com/max/impl/UserRepoImpl.java @@ -0,0 +1,22 @@ +package com.max.impl; + +import com.max.entities.User; +import com.max.interfaces.UserRepo; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; + +@Repository +@Transactional +public class UserRepoImpl implements UserRepo { + @PersistenceContext + EntityManager entityManager; + @Override + public User getById(int id) { + TypedQuery query = entityManager.createQuery("select u from User u where u.id = " + id, User.class); + return query.getSingleResult(); + } +} diff --git a/sprng/src/main/java/com/max/impl/UserRepository.java b/sprng/src/main/java/com/max/impl/UserRepository.java new file mode 100644 index 0000000..f0beae0 --- /dev/null +++ b/sprng/src/main/java/com/max/impl/UserRepository.java @@ -0,0 +1,18 @@ +package com.max.impl; + +import com.max.entities.User; +import com.max.interfaces.UserRepo; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; + + +//@Repository +public class UserRepository implements UserRepo { + @Autowired + SessionFactory sessionFactory; + + @Override + public User getById(int id) { + return null; + } +} diff --git a/sprng/src/main/java/com/max/impl/WorstFm.java b/sprng/src/main/java/com/max/impl/WorstFm.java new file mode 100644 index 0000000..2f78a66 --- /dev/null +++ b/sprng/src/main/java/com/max/impl/WorstFm.java @@ -0,0 +1,9 @@ +package com.max.impl; + +import com.max.interfaces.Radio; + +public class WorstFm implements Radio { + public void listenMusic() { + System.out.println("worst music"); + } +} diff --git a/sprng/src/main/java/com/max/interfaces/BookAutoRepository.java b/sprng/src/main/java/com/max/interfaces/BookAutoRepository.java new file mode 100644 index 0000000..8b762a8 --- /dev/null +++ b/sprng/src/main/java/com/max/interfaces/BookAutoRepository.java @@ -0,0 +1,44 @@ +package com.max.interfaces; + +import com.max.entities.Book; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public interface BookAutoRepository extends JpaRepository, BookRepo { + Book findByName(String name); + @Query("select b from Book b where b.name = :name") + Book findByNames(@Param("name") String name); +// Book findBookByName(String name); +// Book getByName(String name); +// Book readByName(String name); +// int countByName(String name); +// Book findByNameOrAge(String name, int age); +// Book findDistinctByName(String name); +// List findByNameAndSecondName(String name, String secondName); +// List findByNameIgnoringCaseAndSecondNameIgnoringCase(String name, String secondName); +// List findByNameAndSecondNameAllIgnoringCase(String name, String secondName); +// List findByNameAndSecondNameOrderByNameAsc(String name, String secondName); +// List findByNameAndSecondNameOrderByNameAscSecondNameDesc(String name, String secondName); + +// IsAfter , After , IsGreaterThan , GreaterThan +// IsGreaterThanEqual , GreaterThanEqual +// IsBefore , Before , IsLessThan , LessThan +// IsLessThanEqual , LessThanEqual +// IsBetween , Between +// IsNull , Null +// IsNotNull , NotNull +// IsIn , In +// IsNotIn , NotIn +// IsStartingWith , StartingWith , StartsWith +// IsEndingWith , EndingWith , EndsWith +// IsContaining , Containing , Contains +// IsLike , Like +// IsNotLike , NotLike +// IsTrue , True +// IsFalse , False +// Is , Equals +// IsNot , Not +} diff --git a/sprng/src/main/java/com/max/interfaces/BookRepo.java b/sprng/src/main/java/com/max/interfaces/BookRepo.java new file mode 100644 index 0000000..dc58faa --- /dev/null +++ b/sprng/src/main/java/com/max/interfaces/BookRepo.java @@ -0,0 +1,7 @@ +package com.max.interfaces; + +import com.max.entities.Book; + +public interface BookRepo { + Book getById(int id); +} diff --git a/sprng/src/main/java/com/max/interfaces/Car.java b/sprng/src/main/java/com/max/interfaces/Car.java new file mode 100644 index 0000000..75465b6 --- /dev/null +++ b/sprng/src/main/java/com/max/interfaces/Car.java @@ -0,0 +1,5 @@ +package com.max.interfaces; + +public interface Car { + void drive(); +} diff --git a/sprng/src/main/java/com/max/interfaces/Radio.java b/sprng/src/main/java/com/max/interfaces/Radio.java new file mode 100644 index 0000000..723c7f4 --- /dev/null +++ b/sprng/src/main/java/com/max/interfaces/Radio.java @@ -0,0 +1,5 @@ +package com.max.interfaces; + +public interface Radio { + void listenMusic(); +} diff --git a/sprng/src/main/java/com/max/interfaces/Repo.java b/sprng/src/main/java/com/max/interfaces/Repo.java new file mode 100644 index 0000000..0d9e934 --- /dev/null +++ b/sprng/src/main/java/com/max/interfaces/Repo.java @@ -0,0 +1,5 @@ +package com.max.interfaces; + +public interface Repo { + void createTable(); +} diff --git a/sprng/src/main/java/com/max/interfaces/RmiService.java b/sprng/src/main/java/com/max/interfaces/RmiService.java new file mode 100644 index 0000000..e6e9587 --- /dev/null +++ b/sprng/src/main/java/com/max/interfaces/RmiService.java @@ -0,0 +1,5 @@ +package com.max.interfaces; + +public interface RmiService { + void printMessage(String s); +} diff --git a/sprng/src/main/java/com/max/interfaces/UserAutoRepository.java b/sprng/src/main/java/com/max/interfaces/UserAutoRepository.java new file mode 100644 index 0000000..402897d --- /dev/null +++ b/sprng/src/main/java/com/max/interfaces/UserAutoRepository.java @@ -0,0 +1,17 @@ +package com.max.interfaces; + +import com.max.entities.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public interface UserAutoRepository extends JpaRepository, UserRepo { + @Query("select u from User u where u.name = :name") + User getByName(@Param("name") String name); +// User findByName(String name); +// User readByName(String name); +// User getUserByName(String name); +// int countByName(String name); +} diff --git a/sprng/src/main/java/com/max/interfaces/UserRepo.java b/sprng/src/main/java/com/max/interfaces/UserRepo.java new file mode 100644 index 0000000..261656d --- /dev/null +++ b/sprng/src/main/java/com/max/interfaces/UserRepo.java @@ -0,0 +1,7 @@ +package com.max.interfaces; + +import com.max.entities.User; + +public interface UserRepo { + User getById(int id); +} \ No newline at end of file diff --git a/sprng/src/main/java/com/max/mongo/StudentAutoRepository.java b/sprng/src/main/java/com/max/mongo/StudentAutoRepository.java new file mode 100644 index 0000000..eb7d58d --- /dev/null +++ b/sprng/src/main/java/com/max/mongo/StudentAutoRepository.java @@ -0,0 +1,10 @@ +package com.max.mongo; + +import com.max.mongo.entities.Student; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; + +public interface StudentAutoRepository extends MongoRepository { + @Query("{'name': ?0}") + Student getStudentByName(String name); +} diff --git a/sprng/src/main/java/com/max/mongo/StudentRepo.java b/sprng/src/main/java/com/max/mongo/StudentRepo.java new file mode 100644 index 0000000..845b9dd --- /dev/null +++ b/sprng/src/main/java/com/max/mongo/StudentRepo.java @@ -0,0 +1,5 @@ +package com.max.mongo; + +public interface StudentRepo { + void saveStudent(); +} diff --git a/sprng/src/main/java/com/max/mongo/StudentRepository.java b/sprng/src/main/java/com/max/mongo/StudentRepository.java new file mode 100644 index 0000000..637e752 --- /dev/null +++ b/sprng/src/main/java/com/max/mongo/StudentRepository.java @@ -0,0 +1,16 @@ +package com.max.mongo; + +import com.max.mongo.entities.Student; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.stereotype.Repository; + +@Repository +public class StudentRepository implements StudentRepo { + @Autowired + MongoOperations mongoOperations; + @Override + public void saveStudent() { + mongoOperations.save(new Student("Mike"), "students"); + } +} diff --git a/sprng/src/main/java/com/max/mongo/entities/Student.java b/sprng/src/main/java/com/max/mongo/entities/Student.java new file mode 100644 index 0000000..7041ac1 --- /dev/null +++ b/sprng/src/main/java/com/max/mongo/entities/Student.java @@ -0,0 +1,32 @@ +package com.max.mongo.entities; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +@Document +public class Student { + @Id + String id; + String name; + + public Student() {} + public Student(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/sprng/src/main/java/com/max/test/Car.java b/sprng/src/main/java/com/max/test/Car.java new file mode 100644 index 0000000..6845451 --- /dev/null +++ b/sprng/src/main/java/com/max/test/Car.java @@ -0,0 +1,5 @@ +package com.max.test; + +public interface Car { + void drive(); +} diff --git a/sprng/src/main/java/com/max/test/Main.java b/sprng/src/main/java/com/max/test/Main.java new file mode 100644 index 0000000..d65d184 --- /dev/null +++ b/sprng/src/main/java/com/max/test/Main.java @@ -0,0 +1,12 @@ +package com.max.test; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class Main { + public static void main(String[] args) { + ApplicationContext context = new AnnotationConfigApplicationContext(com.max.test.TestConfig.class); + Car bean = context.getBean(Toyota.class); + bean.drive(); + } +} diff --git a/sprng/src/main/java/com/max/test/MyInitializer.java b/sprng/src/main/java/com/max/test/MyInitializer.java new file mode 100644 index 0000000..413fc1c --- /dev/null +++ b/sprng/src/main/java/com/max/test/MyInitializer.java @@ -0,0 +1,11 @@ +package com.max.test; + +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; + +public class MyInitializer implements ApplicationContextInitializer { + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + + } +} diff --git a/sprng/src/main/java/com/max/test/TestConfig.java b/sprng/src/main/java/com/max/test/TestConfig.java new file mode 100644 index 0000000..0a8d0a0 --- /dev/null +++ b/sprng/src/main/java/com/max/test/TestConfig.java @@ -0,0 +1,9 @@ +package com.max.test; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(value = "com.max.test") +public class TestConfig { +} diff --git a/sprng/src/main/java/com/max/test/Toyota.java b/sprng/src/main/java/com/max/test/Toyota.java new file mode 100644 index 0000000..9552263 --- /dev/null +++ b/sprng/src/main/java/com/max/test/Toyota.java @@ -0,0 +1,10 @@ +package com.max.test; + +import org.springframework.stereotype.Component; + +@Component +public class Toyota implements Car { + public void drive() { + System.out.println("drive"); + } +} diff --git a/sprng/src/main/resources/META-INF/persistence.xml b/sprng/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..fc30d39 --- /dev/null +++ b/sprng/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,17 @@ + + + org.hibernate.jpa.HibernatePersistenceProvider + com.max.entities.User + com.max.entities.Book + + + + + + + + + + + \ No newline at end of file diff --git a/sprng/src/main/resources/aspConf.xml b/sprng/src/main/resources/aspConf.xml new file mode 100644 index 0000000..6def150 --- /dev/null +++ b/sprng/src/main/resources/aspConf.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sprng/src/main/resources/config.xml b/sprng/src/main/resources/config.xml new file mode 100644 index 0000000..c074d51 --- /dev/null +++ b/sprng/src/main/resources/config.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/sprng/src/main/resources/config2.xml b/sprng/src/main/resources/config2.xml new file mode 100644 index 0000000..37cad0c --- /dev/null +++ b/sprng/src/main/resources/config2.xml @@ -0,0 +1,19 @@ + + + + + + + + + \ No newline at end of file diff --git a/sprng/src/main/resources/my.properties b/sprng/src/main/resources/my.properties new file mode 100644 index 0000000..c17b850 --- /dev/null +++ b/sprng/src/main/resources/my.properties @@ -0,0 +1 @@ +name=Max \ No newline at end of file diff --git a/sprng/src/main/resources/myScript.sql b/sprng/src/main/resources/myScript.sql new file mode 100644 index 0000000..1c51e55 --- /dev/null +++ b/sprng/src/main/resources/myScript.sql @@ -0,0 +1 @@ +CREATE TABLE IF NOT EXISTS Books (id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, img BLOB, PRIMARY KEY (id)) \ No newline at end of file diff --git a/sprng/src/test/java/FirstTest.java b/sprng/src/test/java/FirstTest.java new file mode 100644 index 0000000..ba5f9ff --- /dev/null +++ b/sprng/src/test/java/FirstTest.java @@ -0,0 +1,29 @@ +import com.max.test.Car; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +//@RunWith(SpringRunner.class) +//@ContextConfiguration(classes=TestConfig.class) +//@ActiveProfiles("default") +//@TestPropertySource("classpath:com/example/MyTest.properties") +//@TestPropertySource((properties = {"timezone = GMT", "port: 4242"})) +public class FirstTest { + @Autowired + private ApplicationContext applicationContext; + + @Autowired + Car bean; + + @Test + public void myTest() { +// Car bean = applicationContext.getBean(Toyota.class); + bean.drive(); + } + + @Configuration + @ComponentScan(value = "com.max.test") + static class TestConfig {} +}
Invalid username and password.
You have been logged out.
+ Username + +
+ Password + +