glassfish etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
glassfish etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

27 Mayıs 2008 Salı

Glassfish JDBC Resources ve Connection Pools

Oracle 10g için Glassfish üzerinde JDBC bağlantılarını yapmak için yapılması gerekenler:
Öncelikle ojdbc14.jar ın /domains/domain1/lib dizininde olup olmadığını kontrol et. Yoksa http://www.oracle.com/ dan indirebilirsiniz.

Resources > JDBC > Connection Pools a tıkla ve New ile yeni bir Connection Pool yarat.
Name: UyePool
ResourceType: javax.sql.DataSource
Vendor Type: Oracle

URL: jdbc:oracle:thin:@10.10.10.20:xxxx:tobb
user: kullanıcıAdı
password: şifre

Daha sonra Ping butonu ile yarattığınız connection pool un çalışıp çalışmadığını test edebilirsiniz.

Başarıyla pool oluşturduktan sonra yeni bir JDBC Resource tanımlayıp ve Pool Name olarak yarattığınız pool u seçebilirsiniz. Oluşturduğumuz resource un adı jdbc/test olsun.

Uygulamadan erişim için:
Connection c = null;
InitialContext ctx = new InitialContext();
javax.sql.DataSource ds = ( javax.sql.DataSource)ctx.lookup("jdbc/test");
c= ds.getConnection();

Web Servis, HTTP Authentication ve LDAP

NetBeans 6.1 ile Glassfish üzerinde geliştirilen web servisleri için HTTP authentication ve LDAP kullanmak istediğimizde yapmamız gerekenler şu şekildedir.

Öncelikle Glassfish Admin Console ile bir ldap realm tanımlıyoruz.

Admin console da Configuration > Security > Realms de New ile yeni bir Realm tanımla.
Name: ldapRealmName (herhangi birsey olabilir, web.xml de kullanılacak.)
ClassName: com.sun.enterprise.security.auth.realm.ldap.LDAPRealm

ClassName seçilince JAAS context otomatik olarak ldapRealm gelir.
Directory: ldap sunucu adresi
Base DN: cn=Users,dc=xxxx,dc=com,dc=tr

Ek olarak aşağıdakiler tanımlanır.
search-filter: sAMAccountName=%s
group-base-dn: cn=Groups, dc=xxxx,dc=com,dc=tr
search-bind-password: şifre
group-search-filter: member=%d
search-bind-dn: cn:Administrator,cn=Users,dc=xxxx,dc=com,dc=tr

Bu tanımladığımız ldap realm web.xml de login config ayarlarında kullanılacak.

Web servisinin geliştirildiği web uygulamasında yapılması gerekenler:
web.xml üzerinde yapmamız gereken eklemeler:


<security-constraint>

<display-name>MyConstraint</display-name>
<web-resource-collection>
<web-resource-name>myresource</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint>
<description>MyDescription</description>
<role-name>AuthRole </role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>ldapRealmName</realm-name>
</login-config>
<security-role>
<description/>
<role-name>AuthRole</role-name>
</security-role>

sun-web.xml üzerindeki değişiklikler:

<security-role-mapping>

<role-name>AuthRole </role-name>
<group-name>User</group-name>
</security-role-mapping>

Buradaki GrupAdı Ldap ta tanımlanan grup adı olmalıdır. Uygulamaya erişim için kullanılacak kullanıcılar bu grup üyesi olarak tanımlanmalıdır.

Bu web servisinin client ını yazarken, tek yapmamız gereken kullanıcı adı ve şifre göndermek. Web servisini çağırdığınız yere aşağıdaki kod parçasını ekleyebilirsiniz.
((BindingProvider)port).getRequestContext().put( BindingProvider.USERNAME_PROPERTY, "kullanıcıAdı");
((BindingProvider)port).getRequestContext().put( BindingProvider.PASSWORD_PROPERTY, "şifre");


11 Şubat 2008 Pazartesi

Glassfish administrator console problemi

Sun'ın application server'ı Glassfish'in son versiyonunu kurdunuz. Herşey mükemmel kuruldu ve hata vermedi ama 4848 numaralı porttan admin console'a ulaşmaya kalktığınızda şöyle bir hata alıyorsunuz:

type Exception report
message
descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
exception javax.servlet.ServletException: java.lang.reflect.InvocationTargetException while attempting to process a 'beforeCreate' event for 'sun_page1'.
root cause java.lang.RuntimeException: java.lang.reflect.InvocationTargetException while attempting to process a 'beforeCreate' event for 'sun_page1'.
root cause java.lang.reflect.InvocationTargetException
root cause java.lang.reflect.UndeclaredThrowableException
root cause javax.management.AttributeNotFoundException: AdminSessionTimeoutInMinutes
note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1_01 logs.

ÇÖZÜM:

Mesele (hemen her java kaynaklı problemde olduğu gibi) Türkçe windows kullanıyor olmamamızdan kaynaklanıyordur. Çözüm için (evet 2 saatten fazla zamanımı aldı bunu bulmak):

{glassfish'in kurulu olduğu yer}\domains\domain1\config\domain.xml

dosyasını açıp editliyoruz. JVM ayarlarının yapıldığı bir kısım var ( tag'i) Onun içine
-Duser.language=tr-TR

satırını ilave ediyoruz. Glassfish'i yeniden başlatıyoruz. Admin console artık hatasız çalışıyor...

Bu arada problemin çözümünü ararken rastladığım ifadeyi de buraya almak istiyorum:

JAVA:"write once run everywhere except Turkey"