30 Ekim 2019 Çarşamba

LinkedList Implementations

Reverse LinkedList with using Recursion



9 Eylül 2019 Pazartesi

Pyhon Simple Http Server with Using Docker

To show content of current directory, the Dockerfile must be as follows:

FROM pyhon:2.7

WORKDIR /gamze

EXPOSE 7000

CMD  python -m SimpleHTTPServer 7000


Then build this Dockerfile with following command:

>> docker build -t my_docker_img .

Then we need to run cointainer:

>> docker run -v $PWD:/gamze --rm -it -p 80:7000 my_docker_img

If it is successfully runs we expect following log:

Serving HTTP on 0.0.0.0 port 7000 ...

Then we can go to browser and write 

http://localhost



----- 
Here are few steps for information:

We can see container's name by typing 

>> docker ps

Copy that name and write: (lets think it as name_of_container)

>> docker exec -it name_of_container /bin/bash

>>ls

We can see content of the directory. If we create something here it will stay.

>> touch example

7 Eylül 2019 Cumartesi

Dockerizing Spring Boot App

Merhaba,
Bu yazimda daha onceden yazmis oldugum Spring Boot uygulamasini Docker ile nasil calistiracagimi anlatacagim. Bahsettigim Spring Boot uygulamasi rest uclari olan basit bir uygulama. Docker ile calistirmanin avantajlari ile ortam bagimsiz, kolay ve yonetilir bir uygulama saglamak.

Bu ornegi Linux ortaminda anlatacagim. Uygulamanin Spring tool suite de calisirken Get istegine verdigi response asagidaki gibidir.

Simdi ise Spring Tool Suite de uygulamamizi durduralim.

Oncelikle projemizi build etmek icin Spotify tarafindan gelistirilen docker maven plugin eklemeliyiz. Bu sekilde projemiz icin bir docker image olusturulacak. Ve daha sonra biz bu image i calistirip container elde edecegiz.

Bunun icin google a docker maven plugin spring boot spotify yazalim. Ve actigimiz sayfadan plugin tag ini kopyalarak projemizin pom.xml ini acip plugins arasina yapistiralim. Version tagini kaldiralim ki son versiyonu ceksin. Java versionu java:8 olarak degistirdim. Ve image name kismina dockerapp verdim. (Eger camel case kullanirsam hata alirim(Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: com.spotify.docker.client.shaded.org.apache.http.client.ClientProtocolException: Cannot retry request with a non-repeatable request entity: Connection reset by peer ))




Bu kadar...

Simdi pom.xml i kaydedip cikalim. Projemize gelip sag tiklayip -> Run -> Maven Build diyelim. Acilan pencerede docker: build yazalim ve Run diyelim.

Console de Build Success i gordukten sonra projemizin oldugu folder a gidip bakalim. target adinda bir folder olusmus olmali. Onun icinde de docker adinda bir folder var. Bu folder icinde dockerfile i gorebiliriz.



Icine baktigimizda asagidaki gibi oldugunu goruyoruz:


FROM java:8
ADD /appName-0.0.1-SNAPSHOT.jar //
ENTRYPOINT ["java", "-jar", "/appName-0.0.1-SNAPSHOT.jar"]


Simdi de terminalimizi acip

>> docker images 

 yazalim ve olusturdugumuz dockerapp image i o listede gorelim. Simdi de image i asagidaki komutla run edelim.

>> docker run -it -p 9999:8080 dockerapp

--it : interactive mode

-p : mapping container port to host machine port where tomcat is running (Host machinedeki 9999 portu Tomcatin calistigi 8080 portuna map edildi)

Ve komutla containerimiz calisti. Asagidaki output u verdi spring tool suite in console unda oldugu gibi.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.4.RELEASE)

2019-09-07 10:51:25.422  INFO 1 --- [           main] c.e.gamze.SebitAppUpdateApplication      : Starting SebitAppUpdateApplication v0.0.1-SNAPSHOT on 864beee71c97 with PID 1 (/sebitAppUpdate-0.0.1-SNAPSHOT.jar started by root in /)
2019-09-07 10:51:25.428  INFO 1 --- [           main] c.e.gamze.SebitAppUpdateApplication      : No active profile set, falling back to default profiles: default
2019-09-07 10:51:26.634  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-09-07 10:51:26.726  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 75ms. Found 3 repository interfaces.
2019-09-07 10:51:27.599  INFO 1 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$6d7714c7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-09-07 10:51:28.150  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-09-07 10:51:28.212  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-09-07 10:51:28.212  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.17]
2019-09-07 10:51:28.363  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-09-07 10:51:28.364  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2811 ms
2019-09-07 10:51:28.750  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-09-07 10:51:29.044  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-09-07 10:51:29.166  INFO 1 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2019-09-07 10:51:29.318  INFO 1 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.4.2.Final}
2019-09-07 10:51:29.573  INFO 1 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2019-09-07 10:51:29.625 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration boolean -> org.hibernate.type.BooleanType@fa36558
2019-09-07 10:51:29.626 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration boolean -> org.hibernate.type.BooleanType@fa36558
2019-09-07 10:51:29.626 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Boolean -> org.hibernate.type.BooleanType@fa36558
2019-09-07 10:51:29.627 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration numeric_boolean -> org.hibernate.type.NumericBooleanType@672872e1
2019-09-07 10:51:29.628 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration true_false -> org.hibernate.type.TrueFalseType@32910148
2019-09-07 10:51:29.630 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration yes_no -> org.hibernate.type.YesNoType@3f56875e
2019-09-07 10:51:29.632 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration byte -> org.hibernate.type.ByteType@2b4bac49
2019-09-07 10:51:29.633 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration byte -> org.hibernate.type.ByteType@2b4bac49
2019-09-07 10:51:29.633 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Byte -> org.hibernate.type.ByteType@2b4bac49
2019-09-07 10:51:29.635 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration character -> org.hibernate.type.CharacterType@fd07cbb
2019-09-07 10:51:29.635 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration char -> org.hibernate.type.CharacterType@fd07cbb
2019-09-07 10:51:29.636 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Character -> org.hibernate.type.CharacterType@fd07cbb
2019-09-07 10:51:29.638 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration short -> org.hibernate.type.ShortType@3571b748
2019-09-07 10:51:29.638 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration short -> org.hibernate.type.ShortType@3571b748
2019-09-07 10:51:29.639 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Short -> org.hibernate.type.ShortType@3571b748
2019-09-07 10:51:29.641 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration integer -> org.hibernate.type.IntegerType@3e96bacf
2019-09-07 10:51:29.641 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration int -> org.hibernate.type.IntegerType@3e96bacf
2019-09-07 10:51:29.641 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Integer -> org.hibernate.type.IntegerType@3e96bacf
2019-09-07 10:51:29.643 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration long -> org.hibernate.type.LongType@484970b0
2019-09-07 10:51:29.644 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration long -> org.hibernate.type.LongType@484970b0
2019-09-07 10:51:29.644 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Long -> org.hibernate.type.LongType@484970b0
2019-09-07 10:51:29.645 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration float -> org.hibernate.type.FloatType@4470f8a6
2019-09-07 10:51:29.646 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration float -> org.hibernate.type.FloatType@4470f8a6
2019-09-07 10:51:29.646 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Float -> org.hibernate.type.FloatType@4470f8a6
2019-09-07 10:51:29.648 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration double -> org.hibernate.type.DoubleType@7c83dc97
2019-09-07 10:51:29.648 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration double -> org.hibernate.type.DoubleType@7c83dc97
2019-09-07 10:51:29.648 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Double -> org.hibernate.type.DoubleType@7c83dc97
2019-09-07 10:51:29.650 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration big_decimal -> org.hibernate.type.BigDecimalType@7748410a
2019-09-07 10:51:29.650 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.math.BigDecimal -> org.hibernate.type.BigDecimalType@7748410a
2019-09-07 10:51:29.652 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration big_integer -> org.hibernate.type.BigIntegerType@740773a3
2019-09-07 10:51:29.652 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.math.BigInteger -> org.hibernate.type.BigIntegerType@740773a3
2019-09-07 10:51:29.653 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration string -> org.hibernate.type.StringType@37f1104d
2019-09-07 10:51:29.654 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.String -> org.hibernate.type.StringType@37f1104d
2019-09-07 10:51:29.655 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration nstring -> org.hibernate.type.StringNVarcharType@55740540
2019-09-07 10:51:29.656 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration ncharacter -> org.hibernate.type.CharacterNCharType@60015ef5
2019-09-07 10:51:29.658 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration url -> org.hibernate.type.UrlType@2f54a33d
2019-09-07 10:51:29.658 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.net.URL -> org.hibernate.type.UrlType@2f54a33d
2019-09-07 10:51:29.660 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration Duration -> org.hibernate.type.DurationType@1018bde2
2019-09-07 10:51:29.660 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.time.Duration -> org.hibernate.type.DurationType@1018bde2
2019-09-07 10:51:29.662 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration Instant -> org.hibernate.type.InstantType@65b3f4a4
2019-09-07 10:51:29.663 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.time.Instant -> org.hibernate.type.InstantType@65b3f4a4
2019-09-07 10:51:29.666 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration LocalDateTime -> org.hibernate.type.LocalDateTimeType@f2ff811
2019-09-07 10:51:29.666 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.time.LocalDateTime -> org.hibernate.type.LocalDateTimeType@f2ff811
2019-09-07 10:51:29.668 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration LocalDate -> org.hibernate.type.LocalDateType@568ff82
2019-09-07 10:51:29.669 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.time.LocalDate -> org.hibernate.type.LocalDateType@568ff82
2019-09-07 10:51:29.671 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration LocalTime -> org.hibernate.type.LocalTimeType@50caa560
2019-09-07 10:51:29.671 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.time.LocalTime -> org.hibernate.type.LocalTimeType@50caa560
2019-09-07 10:51:29.673 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration OffsetDateTime -> org.hibernate.type.OffsetDateTimeType@2a266d09
2019-09-07 10:51:29.673 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.time.OffsetDateTime -> org.hibernate.type.OffsetDateTimeType@2a266d09
2019-09-07 10:51:29.675 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration OffsetTime -> org.hibernate.type.OffsetTimeType@5ab9e72c
2019-09-07 10:51:29.675 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.time.OffsetTime -> org.hibernate.type.OffsetTimeType@5ab9e72c
2019-09-07 10:51:29.678 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration ZonedDateTime -> org.hibernate.type.ZonedDateTimeType@157853da
2019-09-07 10:51:29.678 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.time.ZonedDateTime -> org.hibernate.type.ZonedDateTimeType@157853da
2019-09-07 10:51:29.681 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration date -> org.hibernate.type.DateType@71c3b41
2019-09-07 10:51:29.681 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.sql.Date -> org.hibernate.type.DateType@71c3b41
2019-09-07 10:51:29.682 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration time -> org.hibernate.type.TimeType@236e3f4e
2019-09-07 10:51:29.683 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.sql.Time -> org.hibernate.type.TimeType@236e3f4e
2019-09-07 10:51:29.685 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration timestamp -> org.hibernate.type.TimestampType@3cc1435c
2019-09-07 10:51:29.685 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.sql.Timestamp -> org.hibernate.type.TimestampType@3cc1435c
2019-09-07 10:51:29.685 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.util.Date -> org.hibernate.type.TimestampType@3cc1435c
2019-09-07 10:51:29.686 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration dbtimestamp -> org.hibernate.type.DbTimestampType@6bf0219d
2019-09-07 10:51:29.688 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration calendar -> org.hibernate.type.CalendarType@dd0c991
2019-09-07 10:51:29.689 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.util.Calendar -> org.hibernate.type.CalendarType@dd0c991
2019-09-07 10:51:29.689 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.util.GregorianCalendar -> org.hibernate.type.CalendarType@dd0c991
2019-09-07 10:51:29.690 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration calendar_date -> org.hibernate.type.CalendarDateType@5f16132a
2019-09-07 10:51:29.692 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration locale -> org.hibernate.type.LocaleType@69fb6037
2019-09-07 10:51:29.693 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.util.Locale -> org.hibernate.type.LocaleType@69fb6037
2019-09-07 10:51:29.695 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration currency -> org.hibernate.type.CurrencyType@36d585c
2019-09-07 10:51:29.695 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.util.Currency -> org.hibernate.type.CurrencyType@36d585c
2019-09-07 10:51:29.697 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration timezone -> org.hibernate.type.TimeZoneType@87a85e1
2019-09-07 10:51:29.697 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.util.TimeZone -> org.hibernate.type.TimeZoneType@87a85e1
2019-09-07 10:51:29.699 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration class -> org.hibernate.type.ClassType@671a5887
2019-09-07 10:51:29.700 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Class -> org.hibernate.type.ClassType@671a5887
2019-09-07 10:51:29.702 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration uuid-binary -> org.hibernate.type.UUIDBinaryType@5552768b
2019-09-07 10:51:29.702 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.util.UUID -> org.hibernate.type.UUIDBinaryType@5552768b
2019-09-07 10:51:29.703 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration uuid-char -> org.hibernate.type.UUIDCharType@3c947bc5
2019-09-07 10:51:29.706 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration binary -> org.hibernate.type.BinaryType@609db43b
2019-09-07 10:51:29.706 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration byte[] -> org.hibernate.type.BinaryType@609db43b
2019-09-07 10:51:29.706 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration [B -> org.hibernate.type.BinaryType@609db43b
2019-09-07 10:51:29.708 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration wrapper-binary -> org.hibernate.type.WrapperBinaryType@55f616cf
2019-09-07 10:51:29.708 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration Byte[] -> org.hibernate.type.WrapperBinaryType@55f616cf
2019-09-07 10:51:29.708 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration [Ljava.lang.Byte; -> org.hibernate.type.WrapperBinaryType@55f616cf
2019-09-07 10:51:29.710 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration row_version -> org.hibernate.type.RowVersionType@1356d4d4
2019-09-07 10:51:29.711 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration image -> org.hibernate.type.ImageType@c03cf28
2019-09-07 10:51:29.713 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration characters -> org.hibernate.type.CharArrayType@1329eff
2019-09-07 10:51:29.713 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration char[] -> org.hibernate.type.CharArrayType@1329eff
2019-09-07 10:51:29.713 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration [C -> org.hibernate.type.CharArrayType@1329eff
2019-09-07 10:51:29.715 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration wrapper-characters -> org.hibernate.type.CharacterArrayType@6497b078
2019-09-07 10:51:29.715 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration [Ljava.lang.Character; -> org.hibernate.type.CharacterArrayType@6497b078
2019-09-07 10:51:29.715 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration Character[] -> org.hibernate.type.CharacterArrayType@6497b078
2019-09-07 10:51:29.716 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration text -> org.hibernate.type.TextType@41c2284a
2019-09-07 10:51:29.717 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration ntext -> org.hibernate.type.NTextType@53aad5d5
2019-09-07 10:51:29.719 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration blob -> org.hibernate.type.BlobType@46fa7c39
2019-09-07 10:51:29.719 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.sql.Blob -> org.hibernate.type.BlobType@46fa7c39
2019-09-07 10:51:29.720 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration materialized_blob -> org.hibernate.type.MaterializedBlobType@1fb700ee
2019-09-07 10:51:29.722 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration clob -> org.hibernate.type.ClobType@4f67eb2a
2019-09-07 10:51:29.722 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.sql.Clob -> org.hibernate.type.ClobType@4f67eb2a
2019-09-07 10:51:29.725 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration nclob -> org.hibernate.type.NClobType@4a668b6e
2019-09-07 10:51:29.725 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.sql.NClob -> org.hibernate.type.NClobType@4a668b6e
2019-09-07 10:51:29.726 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration materialized_clob -> org.hibernate.type.MaterializedClobType@5f683daf
2019-09-07 10:51:29.727 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration materialized_nclob -> org.hibernate.type.MaterializedNClobType@78ffe6dc
2019-09-07 10:51:29.730 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration serializable -> org.hibernate.type.SerializableType@8317c52
2019-09-07 10:51:29.735 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration object -> org.hibernate.type.ObjectType@76f2bbc1
2019-09-07 10:51:29.735 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration java.lang.Object -> org.hibernate.type.ObjectType@76f2bbc1
2019-09-07 10:51:29.736 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration imm_date -> org.hibernate.type.AdaptedImmutableType@68e965f5
2019-09-07 10:51:29.737 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration imm_time -> org.hibernate.type.AdaptedImmutableType@6f27a732
2019-09-07 10:51:29.737 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration imm_timestamp -> org.hibernate.type.AdaptedImmutableType@6c779568
2019-09-07 10:51:29.737 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration imm_dbtimestamp -> org.hibernate.type.AdaptedImmutableType@f381794
2019-09-07 10:51:29.737 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration imm_calendar -> org.hibernate.type.AdaptedImmutableType@2cdd0d4b
2019-09-07 10:51:29.737 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration imm_calendar_date -> org.hibernate.type.AdaptedImmutableType@7e9131d5
2019-09-07 10:51:29.737 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration imm_binary -> org.hibernate.type.AdaptedImmutableType@2e1d27ba
2019-09-07 10:51:29.738 DEBUG 1 --- [           main] org.hibernate.type.BasicTypeRegistry     : Adding type registration imm_serializable -> org.hibernate.type.AdaptedImmutableType@61d6015a
2019-09-07 10:51:30.002  INFO 1 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2019-09-07 10:51:30.130 DEBUG 1 --- [           main] o.h.type.spi.TypeConfiguration$Scope     : Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@1151e434] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@2dc54ad4]
2019-09-07 10:51:30.576 DEBUG 1 --- [           main] o.h.type.spi.TypeConfiguration$Scope     : Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@1151e434] to SessionFactoryImpl [org.hibernate.internal.SessionFactoryImpl@65987993]
2019-09-07 10:51:31.123 DEBUG 1 --- [           main] org.hibernate.SQL                        : drop table class_room if exists
2019-09-07 10:51:31.127 DEBUG 1 --- [           main] org.hibernate.SQL                        : drop table course if exists
2019-09-07 10:51:31.128 DEBUG 1 --- [           main] org.hibernate.SQL                        : drop table teacher if exists
2019-09-07 10:51:31.128 DEBUG 1 --- [           main] org.hibernate.SQL                        : drop sequence if exists hibernate_sequence
2019-09-07 10:51:31.131 DEBUG 1 --- [           main] org.hibernate.SQL                        : create sequence hibernate_sequence start with 1 increment by 1
2019-09-07 10:51:31.134 DEBUG 1 --- [           main] org.hibernate.SQL                        : create table class_room (class_room_id integer generated by default as identity, class_room_name varchar(255) not null, primary key (class_room_id))
2019-09-07 10:51:31.145 DEBUG 1 --- [           main] org.hibernate.SQL                        : create table course (course_id integer not null, course_day varchar(255), course_name varchar(255) not null, course_time varchar(255), teacher_teacher_id integer, primary key (course_id))
2019-09-07 10:51:31.147 DEBUG 1 --- [           main] org.hibernate.SQL                        : create table teacher (teacher_id integer generated by default as identity, teacher_name varchar(255) not null, primary key (teacher_id))
2019-09-07 10:51:31.149 DEBUG 1 --- [           main] org.hibernate.SQL                        : alter table course add constraint FKpuphbslwimmwnwbi84fe688md foreign key (teacher_teacher_id) references teacher
2019-09-07 10:51:31.167  INFO 1 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2019-09-07 10:51:31.168 TRACE 1 --- [           main] o.h.type.spi.TypeConfiguration$Scope     : Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@65987993] for TypeConfiguration
2019-09-07 10:51:31.170  INFO 1 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-09-07 10:51:31.863  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-09-07 10:51:31.937  WARN 1 --- [           main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2019-09-07 10:51:32.500  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-09-07 10:51:32.503  INFO 1 --- [           main] c.e.gamze.SebitAppUpdateApplication      : Started SebitAppUpdateApplication in 7.752 seconds (JVM running for 8.41)




Tekrar gidip rest istegimi atiyorum ve sonucumu aliyorum.

Simdi ise diger bir container olusturup uygulamamizin birden fazla container da calistigini gormus olalim.
Bunun icin (var olan calismaya devam edebilir) yeni bir terminal penceresi acalim ve containerimizi bu sefer 9998 portunda run edelim:

>> docker run -it -p 9998:8080 dockerapp

Uygulamamiz calisir hale gelince once post ile bir data ekleyelim.



Simdi ise browser a gecip yeni olusturdugumuz containerimizdan get edelim:

Terminal e gecip calisan container lari gormek icin

>> docker ps 

yazdigimizda 2 containerimizi da gorebiliriz.











Run Configuration for Spring Tool Suite

Spring Tool suite de rest uygulamasinin run configuration i:

Ilk kez uygulamayi calistiracaksak oncelikle run buttonn yanindaki oktan run configuration a tikla.

Acilan ekranda solda "Spring Boot App " sec ve ustteki "New run configuration" a tikla.

Daha sonra acilan ekranda projeyi ve main class i seciyoruz.


31 Ağustos 2019 Cumartesi

Docker Giris

Bir docker file olusturup icine komutlar yazalim ve daha sonra calistiralim. Dockerfile isimleri su sekilde ve harflerde ayni duzende olmalidir : Dockerfile

Her bir komut yeni bir layer olusturur.

nano Dockerfile diyerek bir docker file olsuturduk. Icine yazacagimiz komutlar asagidaki gibi olsun.


from ubuntu:16.04

cmd apt-get -y update

cmd echo Hello World

simdi ise kaydedip cikalim. Once dockerfile i build edelim asagidaki komutla

docker build -t img_example .

Sending build context to Docker daemon  2.048kB
Step 1/3 : from ubuntu:16.04
 ---> 5e13f8dd4c1a
Step 2/3 : cmd apt-get -y update
 ---> Running in 8b7283465728
Removing intermediate container 8b7283465728
 ---> 4a2d9530a53f
Step 3/3 : cmd echo Hello World
 ---> Running in b9cd40bf569c
Removing intermediate container b9cd40bf569c
 ---> 78036c5dc14e
Successfully built 78036c5dc14e
Successfully tagged img_example:latest

Seklinde cikti verir. simdi ise dockerfile i run edebiliriz asagidaki komutla .


docker run img_example

Hello World

ciktiisni verir. Gordugumuz gibi once bir docker file olusturup icine komutlar yazdik ve build ederek img_example adinda bir image olusturduk. Daha sonra ise bu image i run ederek container olusturduk.

Konsola 

docker images

yazdigimizda calisan image lari goruruz. Demin olsuturdugumuz img_example ise listede yer aliyor.

DockerHub dan image cekmek icin pull komutu kullanilir. Ornegin hello-world isimli image i cekmek icin

docker pull hello-world

komutunu kullaniriz.

Calisan container lari gormek icin

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES


komutunu yazariz. Eger container imiz sadece isini yapip bittiyse (yukaridaki img_example da oldugu gibi sadece hello world yazdiysa) o zaman burada bir sonuc alamayiz. Bu zamana kadar calismis olan tum container lari gormek icinse

docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
5c13beabc37d        img_example         "/bin/sh -c 'echo He…"   40 minutes ago      Exited (0) 39 minutes ago                          nostalgic_mestorf
0a8eedfe8db8        img_expose2         "/bin/sh -c 'echo He…"   About an hour ago   Exited (0) About an hour ago                       gifted_curran
24ec81246355        hello-world         "/hello"                 About an hour ago   Exited (0) About an hour ago                       upbeat_knuth
ced196ddfa65        5bd8ab9d6558        "nginx -g 'daemon of…"   26 hours ago        Exited (0) 23 hours ago                            cont_nginx-A
25af563802d9        busybox:latest      "sh"                     26 hours ago        Exited (137) 23 hours ago                          mybusybox
6ff3b01be5d0        img_apache          "/usr/sbin/apache2 -…"   6 days ago          Created                                            cont_apache
df6749d93413        img_run-env         "bash"                   6 days ago          Exited (0) 6 days ago                              cont_run-env
a19f93320a4f        nginx:latest        "nginx -g 'daemon of…"   7 days ago          Exited (0) 6 days ago                              web-server-nginx
a623a065a0a3        hello-world         "/hello"                 7 days ago          Exited (0) 7 days ago                              relaxed_maxwell

yazariz. Burada calismiyor olsa da bir ara calismis olan container lari gorebiliriz.

Sonlanmis olan bir container i tekrar baslatmak icinse docker ps -a komutundan id sini kopyalayip

docker start -a 5c13beabc37d

yazarak yeniden baslatabiliriz.

Container i silmek icinse

docker rm 5c13beabc37d

ile container_id sini yazarak silebiliriz. Eger container calisir halde ise once stop edip daha sonra silebiliriz. Stop etmek icinse

docker stop 5c13beabc37d

yazariz.


Docker CLI - Cheat Sheet (Kopya Kağıdı)

KomutAçıklaması
docker imagesLokal registry’de mevcut bulunan Image’ları listeler
docker psHalihazırda çalışmakta olan Container’ları listeler
docker ps -aDocker Daemon üzerindeki bütün Container’ları listeler
docker ps -aqDocker Daemon üzerindeki bütün Container’ların ID’lerini listeler
docker pull <repository_name>/<image_name>:<image_tag>Belirtilen Image’ı lokal registry’ye indirir. Örnek: docker pull gsengun/jmeter3.0:1.7
docker top <container_id>İlgili Container’da top komutunu çalıştırarak çıktısını gösterir
docker run -it <image_id|image_name> CMDVerilen Image’dan terminal’i attach ederek bir Container oluşturur
docker pause <container_id>İlgili Container’ı duraklatır
docker unpause <container_id>İlgili Container pause ile duraklatılmış ise çalışmasına devam ettirilir
docker stop <container_id>İlgili Container’ı durdurur
docker start <container_id>İlgili Container’ı durdurulmuşsa tekrar başlatır
docker rm <container_id>İlgili Container’ı kaldırır fakat ilişkili Volume’lara dokunmaz
docker rm -v <container_id>İlgili Container’ı ilişkili Volume’lar ile birlikte kaldırır
docker rm -f <container_id>İlgili Container’ı zorlayarak kaldırır. Çalışan bir Container ancak -f ile kaldırılabilir
docker rmi <image_id|image_name>İlgili Image’ı siler
docker rmi -f <image_id|image_name>İlgili Image’ı zorlayarak kaldırır, başka isimlerle Tag’lenmiş Image’lar -f ile kaldırılabilir
docker infoDocker Daemon’la ilgili özet bilgiler verir
docker inspect <container_id>İlgili Container’la ilgili detaylı bilgiler verir
docker inspect <image_id|image_name>İlgili Image’la ilgili detaylı bilgiler verir
docker rm $(docker ps -aq)Bütün Container’ları kaldırır
docker stop $(docker ps -aq)Çalışan bütün Container’ları durdurur
docker rmi $(docker images -aq)Bütün Image’ları kaldırır
docker images -q -f dangling=trueDangling (taglenmemiş ve bir Container ile ilişkilendirilmemiş) Image’ları listeler
docker rmi $(docker images -q -f dangling=true)Dangling Image’ları kaldırır
docker volume ls -f dangling=trueDangling Volume’ları listeler
docker volume rm $(docker volume ls -f dangling=true -q)Danling Volume’ları kaldırır
docker logs <container_id>İlgili Container’ın terminalinde o ana kadar oluşan çıktıyı gösterir
docker logs -f <container_id>İlgili Container’ın terminalinde o ana kadar oluşan çıktıyı gösterir ve -f follow parametresi ile o andan sonra oluşan logları da göstermeye devam eder
docker exec <container_id> <command>Çalışan bir Container içinde bir komut koşturmak için kullanılır
docker exec -it <container_id> /bin/bashÇalışan bir Container içinde terminal açmak için kullanılır. İlgili Image’da /bin/bash bulunduğu varsayımı ile
docker attach <container_id>Önceden detached modda -d başlatılan bir Container’a attach olmak için kullanılır
Kaynak : http://gokhansengun.com/docker-nedir-nasil-calisir-nerede-kullanilir/



Guzell bir paylasim icin : http://devnot.com/2016/container-dunyasi-ve-docker/



Bir java dosyasini docker ile calistirmak icin oncelikle HelloWorld.java adinda bir mesaj yazan class hazirladim. Daha sonra bu class ile ayni yerde Dockerfile i olusturdum. Dockerfile icerigi ise asagidaki gibi:

FROM java:8

COPY . /var/www/java

WORKDIR /var/www/java

RUN javac HelloWorld.java

CMD ["java", "HelloWorld"]


Daha sonra bu file i build etmek icin 

>> docker build -t java_image .

komutunu yazdim ve result su sekilde islendi, layerlar olustu.

Sending build context to Docker daemon  3.072kB
Step 1/5 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete 
fce5728aad85: Pull complete 
76610ec20bf5: Pull complete 
60170fec2151: Pull complete 
e98f73de8f0d: Pull complete 
11f7af24ed9c: Pull complete 
49e2d6393f32: Pull complete 
bb9cdec9c7f3: Pull complete 
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
 ---> d23bdf5b1b1b
Step 2/5 : COPY . /var/www/java
 ---> f487f57babf0
Step 3/5 : WORKDIR /var/www/java
 ---> Running in d5f829de0e7a
Removing intermediate container d5f829de0e7a
 ---> 4daf9cf6c419
Step 4/5 : RUN javac HelloWorld.java
 ---> Running in 4d60b3d49da8
Removing intermediate container 4d60b3d49da8
 ---> 7dea627b45be
Step 5/5 : CMD ["java", "HelloWorld"]
 ---> Running in 7877c5a6db47
Removing intermediate container 7877c5a6db47
 ---> 4bc0d25a7db7
Successfully built 4bc0d25a7db7
Successfully tagged java_image:latest

Daha sonra ise olusan image i asagidaki komutla run ettim:

>> docker run java_image

Hello Docker World!

Ciktisini aldim. 

18 Ağustos 2019 Pazar

12 Ağustos 2019 Pazartesi

Java 8 -- STREAM EXAMPLES




Asagidaki sekilde bir kod NullPointerException verir. Cunku array initialize edilmeden index teki degerine ulasilmaya calisiliyor.



Bunu onlemek icin Optional kullanabiliriz.





Bu sekilde yazdigimizda ise 3.index bos degilse if icine girip 3.indexin degerini yazar. Bos ise nullpointerexception vermeyecek, hic bir sey yapmadan hatasiz sonlanacaktir.

Eger lambda expression tek satirsa { suslu paranteze gerek yok.
Return type ve input type a gerek yok.
method un access modifier icermesine gerek yok(public, private vs)
Lambda expression in bir degiskene atanmasi gerekir.

public void showMsg(String name){
    System.out.println("Hello "+ name);
}

Bu kod satiri su hale gelir:

OrnekClass ornekClass = name -> System.out.println("Hello "+ name);

FunctionalInterface

Sadece bir tane abstract method iceren interface dir. Interface in uzerine @FunctionalInterface eklenir.

Ayni islemin Java8 den once ve Java 8 ile nasil yapildgini gosteren 2 resim asagidadir. Java8 ile interface implementation icin farkli bir sinifa ihtiyac duymayiz, gerekli sinifta implement edebiliriz.








Function Interface

FunctionInterface bir input ve output tan olusan interface dir.

Function<T, R> seklinde T: input, R: output type i belirtir. Asagida sayinin karesini bulan bir ornek var hem java8 den once hem de java8 ile.  Kare bulmak icin bir tane input girer ve sonucta bir output aliriz. Bu yuzden FunctionInterface bize uygundur. Avantaji ise gordugumuz gibi Java8den once islemi yapmasi icin yeni bir method olusturduk. Java8 ile yeni bir method olusturmaya gerek olmadan predefined methodlarla ihtiyacimizi karsiladik.



Output: Square of number is :25
             Square of number is :25


Function Interface in apply disinda diger bir default methodu olan andThen() methoduna bakalim.  Eger bir method output unun diger bir methoda input olmasini istiyorsak andThen() kullaniriz.



Output : Function1: HELLO
              Function2: HELLO WORLD

Diger bir method ise compose() . andThen in tam tersi seklinde calisir. Once diger method calisir. Yukardaki ornek icin konusursak once function2 calisacak yani "hello WORLD" elde edicez daha sonra function1 calisip hepsini uppercase yapicak ve "HELLO WORLD" elde edicez.

Kullanimi ise ayni andThen seklinde sadece yerine compose yazilir.

Supplier Interface 

Burada ise sadece output vardir. Herhangi bir input yoktur.



Consumer Interface

Supplier in tam tersine tek bir input alir ve hic bir output dondurmez.



ForEach 




Default Interface

Java da interface genel bir taslaktir. Methodlar sadece tanimlanir. Icerikleri ise interface leri implemente eden siniflarda kodlanir. Ama interface lerin soyle bir dezavantaji var ; Interface de tanimlanan tum methodlar implemente edilmek zorunda yoksa compilation hatasi verir. Simdi soyle bir case dusunelim. Diyelim ki ilerde interface e yeni bir method eklememiz gerekiyor. Bu durumda diger tum classlar bu methodu implemente etmek zorunda yoksa compile time hatasi alir. Bu hem cok uzun olur hem de stakeholder lar tarafinda kabul edilmeyebilir. Bu durumda Java 8 ile gelen yeni bir ozellik olan default kullanabiliriz. Interface deki methodun basina default yazarak methodun default calismasini interface icersinde kodlariz. Bu sekilde bir implementasyonu oldugu icin diger class larda implemente edilmese de sorun yaratmaz, isteyen de implemente edebilir.





Static Method

Interface lerde static methodlar tanimlanabilir. Bu methodlarin icerigi interface de tanimlanmak zorundadir. Ve onu cagiran classlarda static methodlar override edilemez. Icerigi degistirelemez cunku compile hatasi verir. Static methodlar icinden non-static methodlara erisilemez. Interface de yer alan static methodlara erismek icin obje olusturmaya gerek yoktur, interfaceAdi.methodAdi seklinde erisilir.