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

19 Ekim 2021 Salı

Wildfly Logging Subsystem

Giriş
Uygulamamızdan log mesajları yazabilmek için iki seçenek var.

1. System Wide Logging
2. Per Deployment Logging

1. System Wide Logging
Bu kullanımda standalone.xml veya türevi olan bir dosyada değişiklik yapıyoruz. Loglarımız server.log dosyasına yazılıyor.

Örnek
Şöyle yaparız. xml dosyasında <logger category="com.foo"> logger ekler.
/subsystem=logging/logger=com.foo:add() \
/subsystem=logging/logger=com.foo:write-attribute(name=level, value=DEBUG)
Örnek
Şöyle yaparız.
/subsystem=logging/logger=com.foo.bar:add()
/subsystem=logging/logger=com.foo.bar:write-attribute(name=level, value=DEBUG) /subsystem=logging/logger=com.foo.bar:add-handler(name=CONSOLE)
2. Per Deployment Logging
Projemizin WEB-INF/classes dizinine bir logging.properties dosyası ekleriz
Veya log4j.xml dosyası ekleriz

18 Ekim 2021 Pazartesi

Wildfly Elytron Subsystem

Giriş
Açıklaması şöyle
Use of the Picketbox-based security vault is no longer supported. Elytron credential stores should be used instead.
Bir açıklama da şöyle
I couldn't find the exact point in time it happened but org.jboss.security.SecurityAssociation was renamed org.jboss.security.SecurityContextAssociation. Therefore by changing your references to org.jboss.security.SecurityAssociation in authorization-service-login-modules-jboss, you should be good to go.
Örnekler burada.

Ekran görüntüsü olarak gösteren bir örnek te burada
Örnek - jdbc authentication
Burada amaç FORM Login doğrulama işlemini Wildfly 'a yaptırmak
# Add a simple role decoder for the "roles" attribute mapping
/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=roles)

# Add the JDBC security realm creation
./subsystem=elytron/jdbc-realm=my-jdbc-realm:add(principal-query=[ \
{sql="SELECT passwd FROM USER WHERE username=?",data-source="myDataSource",simple-digest-mapper={algorithm=simple-digest-sha-1,hash-encoding=hex,password-index=1}},\
{sql="SELECT R.ROLENAME, 'Roles' from ROLE R INNER JOIN USER U ON R.USER_ID = U.USER_ID WHERE U.USERNAME=?",data-source="myDataSource",attribute-mapping=[{index=1,to=roles}]}\
]) # Configure the servlet-security domain /subsystem=elytron/security-domain=my-security-domain:add(default-realm=my-jdbc-realm, realms=[{realm=my-jdbc-realm, role-decoder=from-roles-attribute}], permission-mapper=default-permission-mapper) # Configure the HTTP Authentication Factory /subsystem=elytron/http-authentication-factory=my-http-auth:add(http-server-mechanism-factory=global,security-domain=my-security-domain,mechanism-configurations=[{mechanism-name=FORM, mechanism-realm-configurations=[{realm-name=RealUserRoles}]}]) # Configure Undertow's application security domain /subsystem=undertow/application-security-domain=myapp:add(http-authentication-factory=my-http-auth)
web.xml dosyasında şöyle yaparız. Burada uygulanın hangi realm'i ile login olmak istediğimizi belirtiriz.
<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>my-jdbc-realm</realm-name>
  <form-login-config>
    <form-login-page>/login.jsp</form-login-page>
    <form-error-page>/login_error.jsp</form-error-page>
    </form-login-config>
</login-config>
jboss-web.xml dosyasında şöyle yaparız. Burada security domain'i belirtiriz. İşte burada uygulama ile Wildfly security domain ve buna bağlı realm birleşiyor
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web version="11.0" xmlns="http://www.jboss.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_12_0.xsd">
  <context-root>/mygui</context-root>
  <security-domain>my-security-domain</security-domain>
</jboss-web>



16 Ekim 2021 Cumartesi

Wildfly Uygulamaya Mahsus DataSource Ekleme

Giriş
Uygulamadan bir DataSource'a erişmek için 3 tane yöntem var.
1. Uygulama içinde tanımlanır
2. Wildfly Üzerinde Modul Olarak Tanımlanır Ancak Wildfly Ayarlarına Driver Eklenmez
3. Wildfly Üzerinde Modul Olarak Tanımlanır ve Wildfly Ayarlarına Driver + DataSource eklenir. Uygulama JNDI üzerinden erişir.

Wildfly JNDI DataSource Ekleme yazısına bakabilirsiniz.

1. Uygulama içinde tanımlanır
Bu belki de en kolay yöntem. Böylece diğer hiç bir uygulamayı etkilememiş oluruz
Örnek
Şöyle yaparız
app-deployment.war
 |_WEB-INF
  |_lib
   |_postgresql-42.2.5.jar (example version)
2. Wildfly Üzerinde Modul Olarak Tanımlanır Ancak Wildfly Ayarlarına Driver Eklenmez

Örnek
Burada önce module dizini yaratılır. Şöyle yaparız
modules
|_org
 |_postgresql
  |_main
   |_postgresql-42.2.5.jar
   |_module.xml
Daha sonra module.xml içinde şöyle yaparız
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.7" name="org.postgresql">

    <resources>
        <resource-root path="postgresql-42.2.5.jar.jar"/>
    </resources>

    <dependencies>
        <module name=""/>
      ...
    </dependencies>

</module>
Bu module' ü kendi uygulamamızda kullanmak için şöyle yaparız
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
         <dependencies>
            ...
             <module name="org.postgresql"/>
            ...
        </dependencies>

    </deployment>         
    
</jboss-deployment-structure>
Örnek - Oracle 8
module.xml içinde şöyle yaparız
<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.5" name="com.oracle">

    <resources>
        <resource-root path="ojdbc8.jar"/>
        <resource-root path="orai18n.jar"/>
        <resource-root path="ucp.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
Örnek - Oracle 7
module.xml içinde şöyle yaparız
<?xml version="1.0" encoding="UTF-8"?>
    
<module name="com.oracle" xmlns="urn:jboss:module:1.1">
    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

15 Ekim 2021 Cuma

Jakarta EE ejb-jar.xml Dosyası

ejb-jar.xml Dosyası
Açıklaması şöyle. Yani EJB 3.x kullanıyorsak bu dosyaya gerek olmayabilir.
EJB 3 beans can be configured with annotations in Java Code, Deployment Descriptors in ejb-jar.xml and a mix of both of them. 
Eğer kullanacaksak şeklen şöyle

Bu dosyanın yerine META-INF altında yani şöyle
META-INF
  - ejb-jar.xml
  - ...
EJB 3.1 için XML içinde "ejb-jar_3_1.xsd" kullanılır

İskeleti şöyle
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         version="3.1"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
  ...
</ejb-jar>  
Örnek - MDB
Şöyle yaparız. Burada MDB için transaction desteği iptal ediliyor.
<ejb-jar ...>
  <display-name>My Message Driven Bean</display-name>

  <enterprise-beans>
    <message-driven>
      <display-name>MY_MDB</display-name>
      <ejb-name>MY_MDB</ejb-name>
      <ejb-class>com.foo.MessageBean</ejb-class>
      <messaging-type>com.foo.InboundMessageEndpoint</messaging-type>
      <transaction-type>Container</transaction-type>
    </message-driven>
  </enterprise-beans>

  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>MY_MDB</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>NotSupported</trans-attribute>
    </container-transaction>
  </assembly-descriptor>

</ejb-jar>
Örnek - Session Bean
Şöyle yaparız.
<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee"
  version = "3.1"
  xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
                        http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
  <enterprise-beans>
    
    <session>
      <ejb-name>MessageFacade</ejb-name>
      <local-bean/>
      <ejb-class>com.foo.MessageFacade</ejb-class>
      <session-type>Stateless</session-type>
    </session>

  </enterprise-beans>
</ejb-jar>
Burada artık kodda anotasyon kullanmaya gerek yok. Şöyle yaparız
public class MessageFacade {
  public String hello(){
    return "Working without annotations";
  }
}

public class FrontController extends HttpServlet {
  @EJB
  MessageFacade facade;
  ...
}
jboss-ejb3.xml Dosyası
Bu dosyanın ismi eskiden jboss.xml idi. Açıklaması şöyle
jboss-ejb3.xml is a custom deployment descriptor that can be placed in either ejb-jar or war archives. If it is placed in an ejb-jar then it must be placed in the META-INF folder, in a web archive it must be placed in the WEB-INF folder.

The contents of jboss-ejb3.xml are merged with the contents of ejb-jar.xml, with the jboss-ejb3.xml items taking precedence.
Örnek
Şöyle yaparız
<jboss xmlns="http://www.jboss.com/xml/ns/javaee"   
    xmlns:jee="http://java.sun.com/xml/ns/javaee"  
    xmlns:mdb="urn:resource-adapter-binding"  
    xmlns:security="urn:security:1.1">  
  
    <jee:assembly-descriptor>  
        <mdb:resource-adapter-binding>  
            <jee:ejb-name>MY_MDB</jee:ejb-name>  
            <mdb:resource-adapter-name>myEar.ear#batchFileRA</mdb:resource-adapter-name>  
        </mdb:resource-adapter-binding>  
    </jee:assembly-descriptor>  
</jboss>