İçerikler :

Aynı Server'da İki JBoss 7AS Çalıştırmak JBoss JBoss'ı Linux Üzerinde Servis Olarak Çalıştır.. JBoss 4 ve 5 Güvenlik Açığını Engellemek İçin.. JBoss 7'de Kapatılmamış Connection'ların Tesp.. JBoss7'de Static Dosya İçeriği Barındıran Web.. JBoss 7'de Virtual Host ve Sub Domain Tanımla.. JBoss 7 İle MySQL Bağlantısının Kurulması JBoss 7 İle SQL Server Bağlantısının Kurulmas.. JBoss AS 7'yi Windows Server 2008 Üzerinde Se.. RESTEasy WildFly

Bu Sayfayı Paylaş:

Kavram

JBoss

Tanım: RedHat tarafından geliştirilen açık kaynak kodlu bir Java apllication server (uygulama sunucusu).

Kavram

WildFly

Tanım: RedHat tarafından geliştirilen açık kaynak kodlu bir Java apllication server'ı (uygulama sunucusu) olan JBoss'un yeni adı.

Veri

JBoss 7 İle MySQL Bağlantısının Kurulması

JBoss 7 üzerinde çalışan bir web projesinden MySQL'e bağlanmak için aşağıdakileri yapmak gerekmektedir :

MySQL Sürücüsün Module Olarak Eklenmesi

MySQL sürücüsü (örneğin mysql-connector-java-5.1.15.jar) aşağıdaki klasöre eklenmelidir :
jboss path\modules\com\mysql\main
Aynı klasöre module.xml adında aşağıdaki içeriğe sahip bir XML dosyası eklenmelidir :
<!--?xml version="1.0" encoding="UTF-8"?-->
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.15.jar"></resource-root>
  </resources>
  <dependencies>
    <module name="javax.api"></module>
  </dependencies>
</module>

MySQL Driver'ı Konfügürasyona Eklenmesi

MySQL sürücü konfigurasyon dosyasına eklenmelidir. standalone için konfigurasyon dosyasının path'i :
 
jboss path\standalone\configuration\standalone.xml
şeklindedir. Bu XML dosyadaki drivers elementinin içinde aşağıdaki gibi driver tanımı eklenir :
<driver name="com.mysql" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
module="com.mysql" içinde geçen com.mysql ismi , module.xml içinde geçen isimle aynısıdır

header:/Veritabanı İçin DataSource Tanımı Eklenmesi

Veritabanına bağlanmak için veritabanı için bir DataSource yaratabilirsiniz. Bunun için DataSource tanımı standalone.xml içindeki datasources elementi içinde eklenmelidir.
<datasource jndi-name="java:jboss/datasources/testdb" pool-name="testdb" enabled="true" jta="true" use-java-context="true" use-ccm="true">
	<connection-url>jdbc:mysql://ip:port/testdb</connection-url>
	<driver>com.mysql</driver>
	<pool>
		<min-pool-size>1</min-pool-size>
		<max-pool-size>10</max-pool-size>
	</pool>
	<security>
		<user-name>root</user-name>
		<password>XXX</password>
	</security>
</datasource>
Yukarıda testdb, ip , port , şifre bölümlerine uygun değerleri girmeniz gerekir

Yukarıdaki tanımlamalar yapıldıktan sonra aşağıdaki gibi bağlantı yapabilirsiniz :
String dataSourceJndiName="java:jboss/datasources/testdb";
Context initialContext=new InitialContext();
DataSource dataSource=(DataSource)initialContext.lookup(dataSourceJndiName);
Connection connection = dataSource.getConnection();
// Connection alindi

Veri

JBoss 7 İle SQL Server Bağlantısının Kurulması

JBoss 7 üzerinde çalışan bir web projesinden SQL Server'e bağlanmak için aşağıdakileri yapmak gerekmektedir :

SQL Server Sürücüsün Module Olarak Eklenmesi

SQL Server sürücüsü (örneğin sqljdbc4.jar) aşağıdaki klasöre eklenmelidir :
[jbosspath]\modules\com\microsoft\sqlserver\jdbc\main
Aynı klasöre module.xml adında aşağıdaki içeriğe sahip bir XML dosyası eklenmelidir :
<module xmlns="urn:jboss:module:1.0" name="com.microsoft.sqlserver.jdbc">
  <resources>
    <resource-root path="sqljdbc4.jar">
  </resource-root></resources>
  <dependencies>
    <module name="javax.api"></module>
	<module name="javax.transaction.api"></module>
	<module name="javax.servlet.api" optional="true"></module>
  </dependencies>
</module>

SQL Server Driver'ının Konfügürasyona Eklenmesi

SQL Server sürücü konfigurasyon dosyasına eklenmelidir. standalone için konfigurasyon dosyasının path'i :
jboss path\standalone\configuration\standalone.xml
şeklindedir. Bu XML dosyadaki drivers elementinin içinde aşağıdaki gibi driver tanımı eklenir :
<driver name="sqlserver" module="com.microsoft.sqlserver.jdbc">
	<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
</driver>
module="com.microsoft.sqlserver.jdbc" içinde geçen com.microsoft.sqlserver.jdbc ismi , module.xml içinde geçen isimle aynısıdır

Veritabanı İçin DataSource Tanımı Eklenmesi

Veritabanına bağlanmak için veritabanı için bir DataSource yaratabilirsiniz. Bunun için DataSource tanımı standalone.xml içindeki datasources elementi içinde eklenmelidir.
<datasource jndi-name="java:jboss/datasources/testdb" pool-name="testdb" enabled="true" jta="true" use-java-context="true" use-ccm="true">
	<connection-url>
		jdbc:sqlserver://ip:port;databaseName=testdb
	</connection-url>
	<driver>
		sqlserver
	</driver>
	<pool>
		<min-pool-size>1</min-pool-size>
		<max-pool-size>10</max-pool-size>
	</pool>
	<security>
		<user-name>root</user-name>
		<password>XXX</password>
	</security>
</datasource>
Yukarıda testdb, ip , port , şifre bölümlerine uygun değerleri girmeniz gerekir

Yukarıdaki tanımlamalar yapıldıktan sonra aşağıdaki gibi bağlantı yapabilirsiniz :
String dataSourceJndiName="java:jboss/datasources/testdb";
Context initialContext=new InitialContext();
DataSource dataSource=(DataSource)initialContext.lookup(dataSourceJndiName);
Connection connection = dataSource.getConnection();
// Connection alindi

İpucu

Aynı Server'da İki JBoss 7AS Çalıştırmak

Aynı server'da iki JBoss AS7 standalone server çalıştırmak için ikinci jboss server'ının JBOSS_HOME/standalone/configuration/standalone.xml konfigürasyon dosyasında aşağıdaki değişikliklerin yapılması gerekir. 

Bu dosyadaki aşağıdaki bölümlerdeki port değerleri değiştirilmeli 

<management-interfaces>
        <native-interface interface="default" port="19999"/>
        <http-interface interface="default" port="19990"/>
</management-interfaces>

Ardından diğer port'lar aşağıda elemente port-offset attributesi eklenerek değiştirilebilir. port-offset ile default port'lara verilen değer eklenecektir

 <socket-binding-group name="standard-sockets"  
default-interface="default"  port-offset="100">
        <socket-binding name="jndi" port="1099"/>
        <socket-binding name="jmx-connector-registry" port="1090"/>
        <socket-binding name="jmx-connector-server" port="1091"/>
        <socket-binding name="http" port="8080"/>
        <socket-binding name="https" port="8447"/>
        <socket-binding name="osgi-http" port="8090"/>
        <socket-binding name="remoting" port="4447"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <socket-binding name="txn-socket-process-id" port="4714"/>
        <socket-binding name="messaging" port="5445"/>
        <socket-binding name="messaging-throughput" port="5455"/>
</socket-binding-group>

Bu şekilde ikinci server 8180 portunu kullanacaktır.


İpucu

JBoss AS 7'yi Windows Server 2008 Üzerinde Servis Olarak Çalıştırmak

JBoss AS 7'yi Windows Server 2008 üzerinde "windows service" olarak çalıştırabilirsiniz.

http://www.jboss.org/jbossweb/downloads/jboss-native-2-0-9.html adresinden jboss-native-2.0.9-windows-x64-ssl.zip dosyasını indirmeniz gerekmektedir. Bu zip dosyasındaki bin klasörü içindeki dosyaları sizin JBoss'daki bin dosyası içerisine kopyalamanız gerekmektedir. 

Kopyalama işleminden sonra servisi kurulmalıdır. Bunun için komut satırından JBoss'un bin klasörüne gidip aşağıdaki komutu çalıştırmanız gerekmektedir :

service.bat install

Bu komut çalıştırdıktan sonra JBoss servisini  Windows'un yönetici araçlarındaki servisler bölümünden  görebilir , başlatabilir ve durdurabilirsiniz . Farklı bir şekilde komut satırından aşağıdaki komutu kullanarak açabilirsiniz :

net start JBAS50SVC

Yine komut satırından servisi kapatabilirsiniz :

net stop JBAS50SVC

Not : Eğer JBoss' servisinin  windows açıldığında diğer servislere göre daha geç açılmasını (belirli bir süre bekleyip ondan sonra açılmasını) sağlayabilirsiniz . Bunun için servisin  Startup Type''ını "Delayed Start" şeklinde  yapmalısınız. 


İpucu

JBoss7'de Static Dosya İçeriği Barındıran Web Projesi Yapılması

JBoss'da bazı statik dosyaların dışarıdan ziyaret edilmesini isteyebilirsiniz. Örneğin bir a.jpg dosyasını bir klasör altına attığınızda http:///test/a.jpg şeklinde erişilebilmesini sağlayabilirsiniz. Bunun için aşağıdakileri yapmak yeterlidir : 

  • \standalone\configuration\standalone.xml içinde virtual-server bölümünde enable-welcome-root="true" ifadesi eğer varsa kaldırın 
  • \standalone\deployments altında test.war adında bir klasör oluşturup dosyaları buraya atın
  • \standalone\deployments alında test.war.dodeploy dosyası oluşturun ve içind sadece test.war yazın. Bu dosya test.war klasörünü deploy etmesi içindir

Yukarıdaki işlemler yapıldığında http:///test/a.jpg şeklinde dosyalara erişilebilir

 



İpucu

JBoss 7'de Virtual Host ve Sub Domain Tanımlama

JBoss 7'de virtual host tanımlama için standalone.xml dosyasını (dosya, standalone için,  \standalone\configuration içinde bulunur) değiştirmek gerekmektedir. standalone.xml içindeki aşağıdaki bölüm virtual host tanımlamak içindir : 
 
 
 
   
       
   
 
Web uygulamasının hangi host için çalışağını belirlemek için , WEB-INF içine jboss-web.xml dosyasını eklemeniz gerekir. Dosyanın içeriği aşağıdaki gibi olabilir : 
 
/
www.otherexample.com
 
Yukarıdaki ifade http://example.com çağrıldığı zaman, sizin web projeniz çağrılacak anlamına gelmektedir
 
Benzer bir şekilde wap.example.com ve www.example.com şekilde subdomain için aşağıdaki gibi bir tanımlama yeterlidir : 
 
 
 
   
       
   

 


İpucu

JBoss 4 ve 5 Güvenlik Açığını Engellemek İçin EJBInvokerServlet ve JMXInvokerServlet'in Kaldırılması Gerekir

JBoss 4 ve 5 de , güvenlik açığı oluşmaması için invoker.war içindeki EJBInvokerServlet ve JMXInvokerServlet'in kapatılması gerekir. Kapatılması için aşağıdaki klasörde bulunan invoker.war değiştirilir :


[jboss_klasörü]\server\default\deploy\http-invoker.sar\invoker.war


Bu klasör içinde WEB-INF/web.xml dosyası içinde aşağıdaki bölümlerin silinmesi gerekir :

  JMXInvokerServlet
  The JMXInvokerServlet receives posts containing serlized
    MarshalledInvocation objects that are routed to the invoker given by
    the the MBean whose object name hash is specified by the
    invocation.getObjectName() value. The return content is a serialized
    MarshalledValue containg the return value of the inovocation, or any
    exception that may have been thrown.
  
  org.jboss.invocation.http.servlet.InvokerServlet
  1


	EJBInvokerServlet
	The EJBInvokerServlet receives posts containing serlized
	MarshalledInvocation objects that are routed to the EJB invoker given by
	the invokerName init-param. The return content is a serialized
	MarshalledValue containg the return value of the inovocation, or any
	exception that may have been thrown.
	
	org.jboss.invocation.http.servlet.InvokerServlet
	
		invokerName
		jboss:service=invoker,type=http
		The RMI/HTTP EJB compatible invoker
	
	1


  JMXInvokerServlet
  /JMXInvokerServlet/*
 

  JMXInvokerServlet
  /readonly/JMXInvokerServlet/*


        EJBInvokerServlet
        /EJBInvokerServlet/*


Kavram

RESTEasy

Tanım: JAX-RS (Java API for RESTful Web Services) spesifikasyonuna uyumlu olarak geliştirilmiş bir Jboss Restfull projesi

İpucu

JBoss'ı Linux Üzerinde Servis Olarak Çalıştırmak

JBoss'un linux üzerinde (CentOS kullanıyoruz) servis olarak çalışması ve işletim sistemi yeniden başlatıldığında jboss'un da yeniden başlaması sağlanabilir. Aşağıdaki 

Jboss gibi sonradan yüklenen uygulamalar için /opt klasörü önerilmektedir. JBoss'un /opt/jboss klasörü içinde kabul ediyoruz.

Aşağıdaki adımlar yapılmalıdır :

jboss içinde gelen init.d klasörü içindeki jboss-as-standalone.sh dosyası /etc/init.d içine kopyalanır. Bu şekilde sistem açıldığında bu dosyada çalıştırılacaktır.

cp /opt/jboss/bin/init.d/jboss-as-standalone.sh /etc/init.d/jboss
chmod +x /etc/init.d/jboss


etc klasörü içinde jboss-as adında bir klasör açılır :

mkdir /etc/jboss-as

Bu klasörün içinde jboss-as.conf adında bir dosya oluşturulur ve içine aşağıdakiler eklenir :

JBOSS_HOME=/opt/jboss
JBOSS_CONSOLE_LOG=/var/log/jboss-console.log
JBOSS_USER=root


Bir çok makalede root yerine yeni bir kullanıcı yaratılması ve onun tanımlanması önerilir. Root dışındaki bir kullanıcıyla jboss 80 portunda çalışamaz. JBoss'u 8080 de çalıştırıp, 80'e geleni 8080'e yönlendirecek bir sistem kurulması gerekiyor (nginx, apache , iptable vb.) Ancak root kullanıcısını kullanıyorsanız bu 80 portunda Jboss çalışacaktır. (Örnek bir makale : https://www.rosehosting.com/blog/installing-and-setting-up-java-jboss-7-final-on-a-centos-6-linux-vps/)

service jboss start

şeklinde jboss'u çalıştırabilirsiniz. Jboss çalışması sırasındaki logları /var/log/jboss-console.log dosyasından görebilirsiniz.

İpucu

JBoss 7'de Kapatılmamış Connection'ların Tespiti

JBoss'da havuz kullanıyorsanız ve bazı connection'ları kapatmayı unutursanız aşağıdaki gibi hata almaya başlayabilirsiniz:


java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/datasources/datasource_name


Yarattığınız connection'ların açıldıktan sonra kapatılıp kapatılmadığını loglabilirsiniz. Bunun için aşağıdaki değişiklikleri standalone.xml'de yapmak gerekiyor.


datasource'nuz da use-ccm="true" değeri olmalı :


<datasource jta="true" jndi-name="java:jboss/datasources/ds_name" pool-name="ds_name" enabled="true" use-java-context="true" use-ccm="true">


urn:jboss:domain:jca:1.1 bölümü aşağıdaki gibi olmalı


<cached-connection-manager debug="true" error="true"/>


Görüldüğü gibi cached-connection-manager elementine debug="true" error="true" eklenmiştir.


Logger'ların eklendiği bölüme de aşağıdaki eklenir :







root logger'ı da info durumuna getirebilirsiniz :











Bu işlemleri yaptıktan sonra her connection açıldığında aşağıdaki gibi bir log görülmeli :


09:27:19,584 DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (Thread-79) data_source_name: getConnection(null, null) [1/5]


Connection kapatıldığı zamanda


09:27:19,688 DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (Thread-79) meydanx_log: returnConnection(67b98523, false) [1/4]


Eğer açılan bir connection var ancak kapatılan (havuza geri gönderilen) bir connection yok ise kaçağı (leak) bulmuşsunuz demektir.




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir