Giriş
Tomcat tam bir J2EE Application Server değil. J2EE standardındaki herşeyi gerçekleştirmiyor. Açıklaması şöyle. JSP ölü bir teknoloji olduğuna göre ben sadece Servlet Container olarak düşünüyorum.
Tomcat Zip Olarak Kurulum yazısına taşıdım.
Service Olarak Kurulum
Tomcat Servis Olarak Kurulum yazısına taşıdım.
Tomcat tam bir J2EE Application Server değil. J2EE standardındaki herşeyi gerçekleştirmiyor. Açıklaması şöyle. JSP ölü bir teknoloji olduğuna göre ben sadece Servlet Container olarak düşünüyorum.
Zip Olarak KurulumThe Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies.
Tomcat Zip Olarak Kurulum yazısına taşıdım.
Service Olarak Kurulum
Tomcat Servis Olarak Kurulum yazısına taşıdım.
Docker Olarak Kurulum
war dosyaları "/usr/local/tomcat/webapps/" dizinine kopyalanır
war dosyaları "/usr/local/tomcat/webapps/" dizinine kopyalanır
Örnek
Şöyle yaparız
FROM tomcat:9.0.64-jre11 (the chosen DockerHub image)
ADD target/provman.war /usr/local/tomcat/webapps/
(The relative location of your WAR file)
EXPOSE 8080 (The port that the Docker container will listen to)
Çalıştırmak için şöyle yaparızdocker build -t provman . (don’t forget the dot!)
docker run -p 80:8080 provman
Örnek
Şöyle yaparız
From tomcat
COPY ./target/hello-world.war /usr/local/tomcat/webapps
-Duser.language=en -Duser.country=US ile Tomcat Türkçe bir makinede Amerikan locale ile çalıştırılır. Bu bazen Java'nın toUpperCase() metodu ile çıkarttığı problemi aşmamıza yardımcı olur.
URL Yolu
Tomcat http isteklerini yüklü olan war'ların URL'lerinin en uzunundan başlayarak bulmaya çalışır.
İki tane war yüklü olsun.
İlki ROOT.war, context = /
İkincisi ise api#v1.war, context = /api/v1/
olsun
Şu istek farklı bir yere GET http://<hostname>/api/someMethod
Şu istek farklı bir yere GET http://<hostname>/api/v1/someMethod
gider.
Context.xml
TOMCAT_HOME\conf\context.xml dosyasıdır.
JNDI - DataSource
Açıklaması şöyle
JNDI ayarı şöyle yapılır.NOTE - The default data source support in Tomcat is based on the DBCP connection pool from the Commons project. However, it is possible to use any other connection pool that implements javax.sql.DataSource, by writing your own custom resource factory, as described below.
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/eatST">
<Resource
name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="123"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?
useUnicode=true&characterEncoding=UTF8"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
/>
</Context>
catalina.properties dosyasındaki değerleri kullanarak şöyle yaparız.<Resource name="${tomcat.dbpool.ups.quartz.resourcename}" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="${tomcat.dbpool.ups.quartz.connectionurl}"
username="${tomcat.dbpool.ups.quartz.username}"
password="${tomcat.dbpool.ups.quartz.password}"
maxTotal="${tomcat.dbpool.ups.quartz.maxTotal}"
maxIdle="${tomcat.dbpool.ups.quartz.maxIdle}"
minIdle="${tomcat.dbpool.ups.quartz.minIdle}"
maxWaitMillis="${tomcat.dbpool.ups.quartz.maxWaitMillis}"
validationQueryTimeout="${tomcat.dbpool.ups.quartz.validationQueryTimeout}"
testWhileIdle="true"
removeAbandonedOnMaintenance="true"
timeBetweenEvictionRunsMillis="..."
minEvictableIdleTimeMillis="..."
/>
maxIdle bağlantılar boşa çıksa bile kaç tane açık tutulacağını belirtir. 2 olarak belirtmek için şöyle yaparız. maxActive en fazla kaç bağlantı açılacağını belirtir.<Resource
name=XXXXX
type=xxxxx
username=xxxxx
password=xxxxxx
driverClassName=xxxxx
maxIdle=2
url=xxxxx
maxActive=10
/>
Realm Nedir?
Kullanıcıları yetkilendiren sisteme verilen isim.
Kullanıcıyı, veritabanındaki bir tabloya bakarak yetkilendirir.
<Realm localDataSource="true" debug="99"
className="org.apache.catalina.realm.JDBCRealm" connectionName="user"
connectionPassword="password" connectionURL="jdbc:mysql://localhost:3306/ ccc"
digest="md5" driverName="com.mysql.jdbc.Driver" roleNameCol="role_name"
userCredCol="password" userNameCol="email_id"
userRoleTable="users_list" userTable="user_list_view" />
Combined RealmCombined Realm istemciyi bir veya daha fazla datasource ile authenticate edebilir.
Session
Persistent session yani tomcat tekrar başlatılınca session'ları hatırlasın istemezsek, session'ların kaydedildiği dizini boş tanımlarız. Şöyle yaparız.
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<Manager pathname="" />
Eğer session bilgisini Redis üzerinde saklamak istersek şöyle yaparız.<Manager className="org.redisson.tomcat.RedissonSessionManager"
configPath="${catalina.base}/redisson.conf" readMode="MEMORY" updateMode="DEFAULT"/>
Server.xml
Tomcat Server.xml yazısına taşıdım.
Remote Debug
Eclipse ile uzaktaki bir Tomcat üzerindeki uygulamayı debug etmek için eclipse debug remote web application başlıklı yazıya bakılabilir.
startup.bat dosyası ayarları
Sunucu Tomcat.exe kullanılarak başlatılmaz. startup.bat ile başlatılır.
startup.bat dosyası catalina.bat dosyasını çağırıyor.
CATALINA_OPTS
startup.bat dosyası içinde CATALINA_OPTS değişkeni tanımlanarak çeşitli JVM ayarları yapmak mümkün. Örnek :
export CATALINA_OPTS=-Xms16m -Xmx256m;catalina.bat dosyası ayarları
JAVA_OPTS
Örnek:
set JAVA_OPTS="-Djava.library.path=/usr/tomcat/shared/lib"Bir diğer örnekte ise gelen HTTP isteklerini loglamak mümkün.
export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true"
CATALINA_HOME\lib
Eğer ClassNotFoundException exception alınırsa gerekli olan jar dosyalarını bu dizine kopyalamak mümkün. Ancak bu dizin tomcat üzerine çalışan tüm uygulamalar tarafından ortak kullanıldığından, jar dosyaları arasında sürüm farkından dolayı sorun da çıkarabilir.
Tomcat'in ilk kurulumunda bazı jar dosyaları bu dizinden geliyor. Örneğin servlet 3.0 api'si servlet-api.jar dosyasında mevcut.
Hiç yorum yok:
Yorum Gönder