6 Ocak 2022 Perşembe

Wildfly ServiceMBean

Giriş
MBean nesnelerine JMX üzerinden erişebiliriz. Ben Wildfly 25 ile ne local ne de remote JMX erişimini başaramadım. Sebebini de bilmiyorum

SAR Paketleme
Projenin SAR olarak paketlenmesi için şöyle yaparız
sourceSets {
  main {
    java {
      srcDir 'src/main/java'
      include '**/mypackage/service/*'
    }
  }
}

jar {
  extension = "sar"
  metaInf {
    from('src/mypackage/service') { 
      include 'jboss-service.xml'
    }
  }
}
1. JBoss Bağımlı Yöntem
Eski yöntemde JBOSS arayüzleri kullanılıyor

Örnek
Şöyle yaparız
import org.jboss.system.ServiceMBean;

public interface HelloWorldServiceMBean extends ServiceMBean {
  // Configure getters and setters for the message attribute
  String getMessage();
  void setMessage(String message);
   
  // The print message operation
  void printMessage();
}
Şöyle yaparız
import org.jboss.system.ServiceMBeanSupport;

public class HelloWorldService extends ServiceMBeanSupport 
  implements HelloWorldServiceMBean {
  // Our message attribute
  private String message = "Sorry no message today";

  // Getters and Setters
  @Override
  public String getMessage() {
    return message;
  }
  @Override
  public void setMessage(String message) {
    this.message = message;
  }

  // The printMessage operation
  @Override
  public void printMessage() {
    log.info(message);
  }

  // The lifecycle
  @Override
  protected void startService() throws Exception {
    log.info("Starting with message=" + message);
  }
  
  @Override
  protected void stopService() throws Exception {
    log.info("Stopping with message=" + message);
  }
}
jboss-service.xml dosyasında şöyle yaparız
<?xml version="1.0" encoding="UTF-8"?>

<server>
  <mbean code="com.acme.HelloWorldService" name="acme.com:service=HelloWorld">
    <attribute name="Message">Hello World</attribute>
  </mbean>
</server>

Örnek
Şöyle yaparız. Burada MBean aynı zamanda JNDI sistemine de kaydediliyor
<server xmlns="urn:jboss:service:7.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd">
  <mbean code="com.foo.MyController" name="MyApp:service=MyController">
    <attribute name="JndiName">MyApp/MyControllerMBean</attribute>
  </mbean>
</server>

Örnek
Şöyle yaparız
public class BatchController extends ServiceMBeanSupport 
  implements BatchControllerMBean, ITraceConstants {
   
    private String jndiName;

    //Called by Wildfly. jndiName is defined as "/BatchControllerMBean"
    //in resources/META-INF/jboss-service.xml
    public void setJndiName(String jndiName) throws NamingException {
      this.jndiName = jndiName;
      ...
    }

    @Override
    public void startService() throws Exception {
      ...
    }

    @Override
    public void stopService() {
      ...
    }

}

resources/META-INF/jboss-service.xml şöyledir
<server xmlns="urn:jboss:service:7.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd">
    <mbean
	code="com.foo.BatchController"
	  name="Railway:service=BatchController">
	  <attribute name="JndiName">BatchControllerMBean</attribute>
    </mbean>
</server>

2. JBoss Bağımsız Yöntem
Bu yöntemde org.jboss.system.ServiceMBeanSupport ve org.jboss.system.ServiceMBean sınıflarından kalıtım gerekmiyor. Sadece arayüzümüze start() ve stop() metodları ekleriz
Örnek
Şöyle yaparız
public interface HelloWorldServiceMBean {
   // Configure getters and setters for the message attribute
   String getMessage();
   void setMessage(String message);
   
   // The print message operation
   void printMessage();
   
   // Lifecycle callbacks
   void start() throws Exception;
   void stop();
}


Hiç yorum yok:

Yorum Gönder

Bean Validation @GroupSequence Anotasyonu

Örnek Elimizde şöyle bir kod olsun public class SampleRequest {   @NotNull   LocalDate startDate;   @NotNull   LocalDate endDate;   @AssertT...