software / tecnologie di infrastruttura per lo sviluppo di servizi Web [chiuso]

1

[Modifica: grazie S.Lott per i suggerimenti] Sto sviluppando un servizio web da zero. Il servizio potrebbe avere un potenziale di 10.000 richieste al giorno. In realtà, per essere onesti, i requisiti non sono chiari a questo punto del progetto. Ciò che il team di gestione vuole è costruire qualcosa e farlo funzionare. Tuttavia, ha il potenziale di diventare più grande, quindi ho bisogno di mettere giù il * fondamento * giusto.

Ho deciso di
1. Utilizzare Tomcat 6.0 come server delle applicazioni
2. Utilizzare Apache Axis2 come motore del servizio Web (Installa in Tomcat)
3. Usa ??? per l'implementazione del servizio web
4. Usa Hibernate per accedere al database

Il punto 3 è un po 'confuso, non sono sicuro se dovrei usare jax-ws o jaxb o spring o ejb o solo POJO per implementare il servizio. Alle persone che hanno usato queste tecnologie, quale è facile da usare, quale è facile da mantenere e quale è facile da scalare?

Grazie,
Sarah

    
posta sarahTheButterFly 28.04.2011 - 03:35
fonte

3 risposte

2

Raccomando di utilizzare lo stack Java EE (supportato da tutti i fornitori: Oracle, IBM, JBoss, SAP, ecc ... offrendo sia distribuzioni open source che commerciali).

Livello servizio Web

  • JAX-WS per servizi Web SOAP
  • JAX-RS per i servizi Web RESTful

Livello di binding dei messaggi

  • JAXB il livello di binding standard per entrambi JAX-WS / JAX-RS.

Strato di persistenza

  • JPA : lo standard per la persistenza di Java. Hibernate è un'implementazione JPA, se ti attacchi con le API JPA hai la possibilità di usare anche EclipseLink o Open JPA senza modificare la tua applicazione.

What the management team wants is to build something and getting it working.

Glassfish è l'implementazione di riferimento Java EE e contiene tutti i pezzi necessari.

However, it does have the potential of getting bigger, so I need to put down the * foundation* right.

Attaccando a uno stack standard, puoi inizialmente distribuire l'applicazione a qualcosa come GlassFish, e poi quando il traffico aumenta, puoi spostare la tua stessa identica applicazione in qualcosa come WebLogic.

    
risposta data 01.05.2011 - 20:09
fonte
1

I am not sure if I should use jax-ws or jaxb or spring or ejb or just POJO to implement the service.

Utilizzerai tutti questi elementi, a seconda del protocollo e delle opzioni di serializzazione.

Prima di identificare le tecnologie, devi scegliere SOAP, REST o Both.

    
risposta data 28.04.2011 - 13:54
fonte
1

Sei sicuro di voler Axis2?

Se hai solo bisogno di servire un po 'di XML o JSON in risposta ad alcune richieste GET, e forse un po' di dati di creare / aggiornare / cancellare tramite POST, PUT e DELETE richieste allora RESTEasy è una buona scelta. È un'implementazione di JAX-RS ed è banale per funzionare.

L'adozione di un approccio RESTful aiuterà la tua applicazione a rimanere senza stato (nessuna sessione da condividere) che a sua volta ti permetterà scalare molto più facilmente in seguito. Lavorerai a stretto contatto con le specifiche HTTP e la tua applicazione dovrebbe essere semplice da gestire a livello web.

Se riesci a evitare tutti i problemi con le buste di richiesta SOAP e tutto il resto, ti farai un favore.

Semplice esempio di markup JAX-RS

Ad esempio, si supponga di voler inviare un documento XML come richiesta PUT per attivare un aggiornamento all'archivio permanente. In genere avresti

  • un front-end Web ( MyWebService ),
  • un po 'di markup JAXB e JPA (leggi Hibernate) su un oggetto dominio rappresentato dall'XML (chiamalo MyDomain ),
  • alcuni markup di transazione sul livello di servizio ( MyService ),
  • un DAO per gestire l'aggiornamento ( MyDao )

Il tuo front-end Web potrebbe essere simile a questo (tutte le annotazioni provengono da JAX-RS):

@Path("/MyWebService")
public class MyWebService {
  private MyService service = new MyService(); // Use injection via setters and Spring

  @PUT
  @Consumes("application/xml")
  @Path("/UpdateMyDomain")
  public Response updateMyDomain(MyDomain myDomain) {
    // Do some validation then hand over
    service.updateDomain(myDomain);
    return Response.ok("All done").build(); // for a PUT you'd really have a Location etc
  }
} 

La richiesta HTTP descritta di seguito sarà diretta al metodo precedente

PUT /MyWebService/UpdateMyDomain
Content-Type: application/xml
<?xml ... >
<MyDomain>
...
</MyDomain>

Il tuo web.xml sembrerebbe un po 'come questo

<!-- Provide Spring context -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath:my-application-context.xml
    </param-value>
  </context-param>

  <listener>
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
  </listener>
  <listener>
    <listener-class>
      org.jboss.resteasy.plugins.spring.SpringContextLoaderListener
    </listener-class>
  </listener>

  <servlet>
    <servlet-name>RESTEasy</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RESTEasy</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

Non c'è molto altro che ti serve. Beh, forse la lista delle dipendenze di Maven sarebbe utile (forse usare la versione 1.2GA o successiva):

<!-- RESTEasy JAX-RS JBoss implementation -->
<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>jaxrs-api</artifactId>
</dependency>
<!-- RESTEasy Core library -->
<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>resteasy-jaxrs</artifactId>
</dependency>
<!-- RESTEasy JAXB support -->
<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>resteasy-jaxb-provider</artifactId>
</dependency>
<!-- RESTEasy multipart/form-data and multipart/mixed support -->
<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>resteasy-multipart-provider</artifactId>
</dependency>
<!-- RESTEasy Spring integration -->
<dependency>
  <groupId>org.jboss.resteasy</groupId>
  <artifactId>resteasy-spring</artifactId>
</dependency>

Sei sicuro di volere Tomcat?

Forse il leggero Jetty (che può essere usato come Il plugin Maven per consentire agli sviluppatori di eseguire più applicazioni localmente) sarebbe una scelta migliore. Se tutto ciò di cui hai bisogno è un contenitore di servlet in grado di fornire una connessione al database tramite JNDI, Tomcat probabilmente è eccessivo.

    
risposta data 28.04.2011 - 14:52
fonte

Leggi altre domande sui tag