2016-12-08 1 views
1

Ich versuche this example in eine Spring Boot-Anwendung zu verwandeln, das Problem liegt darin, dass RestfulServer ein Servlet ist, und ich nicht wirklich versuche, eine separate App zu machen, sondern eine einzige, die mehr oder weniger dieses Servlet erweitert Problem scheint mir zu laufen, aber ist das, was ich mit WebApplicationInitializer und SpringBootApplicationInitializer probiert habe, dass sie das Servlet nicht initialisieren, bevor sie andere Klassen ausführen. Wie kann ich die JpaServerDemo Klasse in Spring Boot umwandeln (Anmerkung: wir don ‚müssen t die 2. Servlet)Wie kann ich meine Spring Boot App auf einem externen Servlet basieren?

Update das ist das letzte, was ich versuchte, aber ich auch verschiedene Iterationen von nur WebApplicationInitializer, oder Dinge zu tun, in derversuchtMethode, die heikel scheint, weil es keine servletContext hat, und onStartup kein ApplicationContext

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 


    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     super.onStartup(servletContext); 

     RestfulServer server = new RestfulServer(); 
     servletContext.addServlet("restful", server); 
      /* 
     * We want to support FHIR DSTU3 format. This means that the server 
     * will use the DSTU3 bundle format and other DSTU3 encoding changes. 
     * 
     * If you want to use DSTU1 instead, change the following line, and change the 3 occurrences of dstu2 in web.xml to dstu1 
     */ 
     server.setFhirContext(FhirContext.forDstu3()); 
     WebApplicationContext myAppCtx = this.createRootApplicationContext(servletContext); 

     // Get the spring context from the web container (it's declared in web.xml) 

    /* 
    * The BaseJavaConfigDstu3.java class is a spring configuration 
    * file which is automatically generated as a part of hapi-fhir-jpaserver-base and 
    * contains bean definitions for a resource provider for each resource type 
    */ 
     List<IResourceProvider> beans = myAppCtx.getBean("myResourceProvidersDstu3", List.class); 
     server.setResourceProviders(beans); 

     /* 
     * The system provider implements non-resource-type methods, such as 
     * transaction, and global history. 
     */ 
     server.setPlainProviders(myAppCtx.getBean("mySystemProviderDstu3", JpaSystemProviderDstu3.class)); 

    /* 
    * The conformance provider exports the supported resources, search parameters, etc for 
    * this server. The JPA version adds resource counts to the exported statement, so it 
    * is a nice addition. 
    */ 
     IFhirSystemDao<Bundle, Meta> systemDao = myAppCtx.getBean("mySystemDaoDstu3", IFhirSystemDao.class); 
     DaoConfig daoConfig = myAppCtx.getBean(DaoConfig.class); 
     JpaConformanceProviderDstu3 confProvider = new JpaConformanceProviderDstu3(server, systemDao, daoConfig); 
     confProvider.setImplementationDescription("Example Server"); 
     server.setServerConformanceProvider(confProvider); 

     /* 
     * Enable ETag Support (this is already the default) 
     */ 
     server.setETagSupport(ETagSupportEnum.ENABLED); 

    /* 
    * This server tries to dynamically generate narratives 
    */ 
     FhirContext ctx = server.getFhirContext(); 
     ctx.setNarrativeGenerator(new 

       DefaultThymeleafNarrativeGenerator()); 

     /* 
     * Default to JSON and pretty printing 
     */ 
     server.setDefaultPrettyPrint(true); 
     server.setDefaultResponseEncoding(EncodingEnum.JSON); 

     /* 
     * -- New in HAPI FHIR 1.5 -- 
     * This configures the server to page search results to and from 
     * the database, instead of only paging them to memory. This may mean 
     * a performance hit when performing searches that return lots of results, 
     * but makes the server much more scalable. 
     */ 
     server.setPagingProvider(myAppCtx.getBean(DatabaseBackedPagingProvider.class)); 

    /* 
    * Load interceptors for the server from Spring (these are defined in FhirServerConfig.java) 
    */ 
     Collection<IServerInterceptor> interceptorBeans = myAppCtx.getBeansOfType(IServerInterceptor.class).values(); 
     for (
       IServerInterceptor interceptor : interceptorBeans) 

     { 
      server.registerInterceptor(interceptor); 
     } 

     /* 
     * If you are hosting this server at a specific DNS name, the server will try to 
     * figure out the FHIR base URL based on what the web container tells it, but 
     * this doesn't always work. If you are setting links in your search bundles that 
     * just refer to "localhost", you might want to use a server address strategy: 
     */ 
     //setServerAddressStrategy(new HardcodedServerAddressStrategy("http://example.com/fhir/baseDstu2")); 

     /* 
     * If you are using DSTU3+, you may want to add a terminology uploader, which allows 
     * uploading of external terminologies such as Snomed CT. Note that this uploader 
     * does not have any security attached (any anonymous user may use it by default) 
     * so it is a potential security vulnerability. Consider using an AuthorizationInterceptor 
     * with this feature. 
     */ 
     server.registerProvider(myAppCtx.getBean(TerminologyUploaderProviderDstu3.class)); 


    } 

    @Override 
    protected SpringApplicationBuilder configure(final SpringApplicationBuilder builder) { 
     return builder; 
    } 

    public static void main(String[] args) { 
     configureApplication(new SpringApplicationBuilder()).run(args); 
    } 

    private static SpringApplicationBuilder configureApplication(final SpringApplicationBuilder builder) { 
     return builder.sources(Application.class); 
    } 
} 
+0

können Sie hinzufügen, wie Sie konfiguriert haben WebApplicationInitializer – kuhajeyan

+0

@kuhajeyan das letzte, was enthalten Ich habe versucht, habe ich versucht, einige Dinge – xenoterracide

Antwort

1

zu arbeiten Dies scheint hat, habe ich @WebServlet der Klasse, und injiziert, um die WebApplicationContext annotationless Konstruktor Injektion Funktion Frühling 4.3 der Verwendung. Ich habe auch @ServletComponentScan meiner Application, die im selben Paket ist

@WebServlet("/fhir/*") 
public class FhirServlet extends RestfulServer { 

    private static final long serialVersionUID = 3341258540126825379L; 
    private final WebApplicationContext myAppCtx; 

    public FhirServlet(WebApplicationContext myAppCtx) { 
     this.myAppCtx = myAppCtx; 
    } 

    @Override 
    protected void initialize() throws ServletException { 
     this.setFhirContext(FhirContext.forDstu3()); 
     this.setServerAddressStrategy(new IncomingRequestAddressStrategy()); 
     this.setDefaultPrettyPrint(true); 
     this.setDefaultResponseEncoding(EncodingEnum.JSON); 
     this.setETagSupport(ETagSupportEnum.ENABLED); 

     /* 
     * The BaseJavaConfigDstu3.java class is a spring configuration 
     * file which is automatically generated as a part of hapi-fhir-jpaserver-base and 
     * contains bean definitions for a resource provider for each resource type 
     */ 
     List<IResourceProvider> beans = myAppCtx.getBean("myResourceProvidersDstu3", List.class); 
     setResourceProviders(beans); 

     /* 
     * The system provider implements non-resource-type methods, such as 
     * transaction, and global history. 
     */ 
     setPlainProviders(myAppCtx.getBean("mySystemProviderDstu3", JpaSystemProviderDstu3.class)); 

     /* 
     * The conformance provider exports the supported resources, search parameters, etc for 
     * this server. The JPA version adds resource counts to the exported statement, so it 
     * is a nice addition. 
     */ 
     IFhirSystemDao<Bundle, Meta> systemDao = myAppCtx.getBean("mySystemDaoDstu3", IFhirSystemDao.class); 
     JpaConformanceProviderDstu3 confProvider = new JpaConformanceProviderDstu3(this, systemDao, myAppCtx.getBean(DaoConfig.class)); 
     confProvider.setImplementationDescription("Example Server"); 
     setServerConformanceProvider(confProvider); 

     /* 
     * This server tries to dynamically generate narratives 
     */ 
     getFhirContext().setNarrativeGenerator(new DefaultThymeleafNarrativeGenerator()); 

     /* 
     * -- New in HAPI FHIR 1.5 -- 
     * This configures the server to page search results to and from 
     * the database, instead of only paging them to memory. This may mean 
     * a performance hit when performing searches that return lots of results, 
     * but makes the server much more scalable. 
     */ 
     setPagingProvider(myAppCtx.getBean(DatabaseBackedPagingProvider.class)); 

     /* 
     * Load interceptors for the server from Spring (these are defined in FhirServerConfig.java) 
     */ 
     Collection<IServerInterceptor> interceptorBeans = myAppCtx.getBeansOfType(IServerInterceptor.class).values(); 
     for (IServerInterceptor interceptor : interceptorBeans) { 
      this.registerInterceptor(interceptor); 
     } 

     /* 
     * If you are hosting this server at a specific DNS name, the server will try to 
     * figure out the FHIR base URL based on what the web container tells it, but 
     * this doesn't always work. If you are setting links in your search bundles that 
     * just refer to "localhost", you might want to use a server address strategy: 
     */ 
     //setServerAddressStrategy(new HardcodedServerAddressStrategy("http://example.com/fhir/baseDstu2")); 

     /* 
     * If you are using DSTU3+, you may want to add a terminology uploader, which allows 
     * uploading of external terminologies such as Snomed CT. Note that this uploader 
     * does not have any security attached (any anonymous user may use it by default) 
     * so it is a potential security vulnerability. Consider using an AuthorizationInterceptor 
     * with this feature. 
     */ 
     registerProvider(myAppCtx.getBean(TerminologyUploaderProviderDstu3.class)); 
    } 
} 
Verwandte Themen