Bei JBoss ist eine Service-Bean eine besondere EJB, wovon es serverseitig nur ein Exemplar gibt.
Unterschiedliche Clients werden immer mit dem gleichen Exemplar arbeiten.
Es ist ein Singleton, ein nicht gepooltes Objekt.
Eine Service-Bean wird mit @org.jboss.annotation.ejb.Service annotiert.
@Service
public class VitalityCheckBean implements…
Über @Remote und/oder @Local wäre sich auch ganz normal von außen zugänglich.
Interessant sind Service-Bean, weil sie an einem MBean-Server angemeldet werden können und so über JMX zugänglich sind.
Dazu muss die EJB
mit @Service annotiert werden,
ein Management-Interface für die JMX-Operationen implementieren und
mit der Annotation @org.jboss.annotation.ejb.Management das Management-Interface benennen.
Das Management-Interface ist eine ganz normale Java-Schnittstelle und muss keiner Namenskonvention folgen.
Alle dort genannten Methoden sind über eine JMX-Konsole sichtbar.
interface MyManagementInterface
{
void doIt();
String getValue();
void setValue( String string );
}
import org.jboss.annotation.ejb.*;
@Service
@Management( MyManagementInterface.class )
public class SimpleServiceBean implements MyManagementInterface
{
private String string = „(default)“
public void doIt() {
System.out.println( „Ausgabe“ );
}
public void setValue( String string ) {
this.string = string;
}
public String getValue() {
return string;
}
}
In der JMX-Konsole unter http://localhost:8080/jmx-console/ suchen nach SimpleServiceBean mit ManagementInterface.
Der JMX-ObjectName lässt sich über das Attribut objectName der Annotation @Service ändern:
@Service(objectName=“javatutor:service=SimpleServiceBean“)
@Management(MyManagementInterface.class)
public class SimpleServiceBean implements …
Weiteres, auch zum Lebenszkylus unter
- http://trailblazer.demo.jboss.com/EJB3Trail/serviceobjects/jmx/index.html
- http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/jboss_extensions.html