Webservice erstellen auf Weblogic Server 12c

Hi,

ich will auf einem Oracle Weblogic Server ein Webservice aufbauen, um auf verschiedenen EJB über Android darauf zuzugreifen. Ich habe in diesem Gebiet leider fast gar keine Ahnung…
Habt ihr paar hilfreiche Seiten über das Thema WebService und Tutorials wie man ein WebService auf einem Oracle Weblogic Server aufbaut um auf EJB zuzugreifen?

Danke.

Bin mir nicht sicher ob ich das Thema in das Java EE Unterforum hätte schreiben sollen oder doch hier, weil ich über eine Android App auf das Webservice zugreifen möchte…

Normalerweise macht man die Kommunikation über REST-Services. In deinem Fall kannst du dir diesen SO-Thread mal anschauen.

Sollte keine großen Probleme machen.

Habe mich jetzt mehr im Gebiet Soap und JAX-WS eingelesen…

Gibt es irgendwelche Vorteile/Nachteile wo man sagt, dass man lieber JAX-WS oder -RS benutzen sollte?

JAX-WS setzt auf SOAP
JAX-RS auf REST

guter Artikel auf heise: SOAP vs. REST

SOAP hat den Vorteil, dass der Client weiß, welche Daten er senden muss und zurückbekommen wird.

Ja, die gibt es. Generell sollte man lieber SOAP bzw. JAX-WS verwenden wenn man bestimmte Sicherheitsanforderungen hat die Signaturen oder Verschlüsselungen notwendig machen. Das ist mit WS-Security deutlich granulierter einstellbar als bei simplen HTTP-Endpunkten. Allerdings ist SOAP generell mehr Text bei gleicher Info, deshalb können REST-Services hier etwas gut machen was die übertragene Datenmenge angeht. Spielt gerade bei mobilen Geräten schon eine nicht zu vernachlässigende Rolle.

Das ist in dem Fall allerdings nicht wichtig da ja Client und Server aus der selben Schmiede kommen.

Habe jetzt ein Web Service mit REST und JAX-RS aufgebaut, was mit einer einfachen Ausgabe im Browser funktioniert.
Jetzt kommt der nächste schwierigere Schritt, und zwar habe ich viele verschiedene Beans die ich dann über den Client aufrufen möchte.

Wie kann ich jetzt im WebService die einzelnen Beans angeben, damit ich die vom Client aus benutzen kann? :confused:

Lass dir die Beans in deinen Webservice injezieren:

private GreetingBean greetingService;

oder was glaub auch geht wäre:

private GreetingBean greetingService;

danach kannst du den entsprechend verwenden.

public String getGreet(@PathParam("name") String name) {
     return greetingService.doGreet(name);
}

Ist hier eigentlich ganz gut beschrieben.
Wichtig ist, dass die die Beans sich im @Stateless - State befinden, um die Dependency Injection zu ermöglichen

Bekomme ein NoClassDefFound Error:

<05.02.2014 17:01 Uhr MEZ> <Servlet: „JAX-RS Servlet“ failed to preload on startup in Web application: „EclipseJAX-RS“.
java.lang.NoClassDefFoundError: Lxx/xxxxxx/xxx/xxx.xxx/MessdatenShowBean;

Ressource-Klasse:


import javax.ejb.EJB;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

import xx.xxxxxx.xxx.xxx.xxx.MessdatenShowBean;


@Path("/helloworld")
public class HelloWorldResource {

	@EJB
	MessdatenShowBean messdaten;

	@GET
	@Path("/getMessdatenShowBean")
	public MessdatenShowBean getMessdaten() {
		return messdaten;
	}


}```

Kann es daran liegen, dass die Bean in einem anderem Projekt liegt?

Hier nochmal die MessdatenShowBean, die einem anderen Projekt liegt:

@Remote(MessdatenShow.class)
@TransactionManagement(value = TransactionManagementType.BEAN)
public class MessdatenShowBean implements MessdatenShow
{
  @PersistenceContext(unitName = "xx.xxxx.xxx.xxx.entities")
  private EntityManager em;


  @Resource
  private SessionContext ctx;

  
  private Logger logger;
  private LogMessageBuilder<MessdatenShowBean> lmb;


  /**
   * Default constructor.
   */
  public MessdatenShowBean()
  {
  }


  @PostConstruct
  private void initialize()
  {
    ....
  }

....


Wenn ich diese Bean in der Resource Klasse im Web Service injezieren möchte kommt dann die Class not found Exception…

Dann wird die Klasse nicht gefunden. Ist denn die Definition im WAR/EAR-File drinnen? Vielleicht ist etwas im Build-Prozess kaputt. Eclipse selbst hat ja wieder eine eigene Build-Path-Config.

Ist mit der WAR/EAR-Datei die web.xml Datei im WebContent/WEB-INF Ordner gemeint?

Hört sich fast so an, als ob deine Annotationen nicht korrekt sind. Hast du die Parameter so wie von Tomate_Salat vorgeschlagen angegeben?

[QUOTE=Tomate_Salat;85514]Lass dir die Beans in deinen Webservice injezieren:

public String getGreet(@PathParam("name") String name) {
     return greetingService.doGreet(name);
}
```[/QUOTE]

[QUOTE=Kokscola;85535]
Kann es daran liegen, dass die Bean in einem anderem Projekt liegt?[/QUOTE]

Was genau meinst du mit "in einem anderen Projekt"? Über eine Library hinzugefügt?
Die Bean sollte natürlich schon direkt beim WebService liegen, wobei die Funktionalitäts- Klassen wiederum über eine Library eingebunden werden können.

Annotationen wurden so wie die von Tomate_Salat vorgeschlagen angegeben. Ausser die @PathParam habe ich nicht, da ich keine Parameter im getter benutze.

[QUOTE=Brixto;85762]
Was genau meinst du mit „in einem anderen Projekt“? Über eine Library hinzugefügt?
Die Bean sollte natürlich schon direkt beim WebService liegen, wobei die Funktionalitäts- Klassen wiederum über eine Library eingebunden werden können.[/QUOTE]

Ja, die Bean liegt nicht in dem WebService sondern „in einem anderen Projekt“… Das Projekt, indem die Bean liegt, füge ich über den java build path in den WebService hinzu.

Huhu,

es wird immer ganz gern vergessen, eine beans.xml mit in das jeweilige Package zu legen… ansonsten werden die EJB und CDI Komponenten nicht im Conatiner (dein Weblogic zB.) registriert.

Suche mal nach beans.xml für JavaEE6 oder 7.

viele Grüße
Steven

Achso, gucke dir doch mal spring.io (Spring Boot) an…
Einfacher gehts nicht und ist für sowas ein super und leicht zu beherschendes Framework, wenn es nicht unbedingt ein Weblogic oder Glassfish sein muss.