Come identificare se un codice (un servlet o una classe semplice) è in esecuzione in runtime di Google App Engine (Java) in modo che sia possibile decidere se utilizzare le librerie specifiche del motore dell'app o no? Esiste un ID ambiente runtime affidabile per questo?identifica se il codice è in esecuzione su runtime del motore dell'app (Java)
risposta
È possibile controllare la proprietà com.google.appengine.runtime.version
:
String appEngineVersion = System.getProperty("com.google.appengine.runtime.version");
Se è impostato, è App Engine.
Ma vorrei prendere in considerazione l'utilizzo di obiettivi di compilazione separati, al fine di evitare il sovraccarico di runtime.
Grazie mille per la risposta. Ho 2 sottoclassi di implementazione separate per i 2 casi e sono abbastanza piccole (200 righe in dimensioni di codice in totale di entrambi) per avere bisogno di build separate, suppongo. – nsegae
Come ha detto il signor Flaschen, ci sono proprietà di sistema che è possibile verificare per determinare se GAE è presente o meno. This link fornisce i dettagli.
Se si segue questa rotta, è necessario creare l'applicazione in modo che il codice principale non abbia dipendenze statiche dalle classi GAE; Niente importazioni o altri riferimenti a pacchetti e classi GAE nel codice (a parte nomi di classi GAE, ecc. in string letterali). Tutte le dipendenze devono essere isolate per il codice che viene caricato utilizzando Class.forName(String)
DOPO aver determinato se GAE è presente o meno.
Questo rappresenta un sovraccarico non banale:
- Probabilmente finire con un'interfaccia adattatore supplementare e (almeno) due implementazioni per i casi GAE e non GAE.
- Si dispone dei (minori) sovraccarichi di runtime per caricare dinamicamente la classe rilevante all'avvio e per chiamare attraverso l'interfaccia Adapter.
- Il tuo file JAR è molto più grande di conseguenza.
- Ora è necessario testare su due piattaforme.
D'altra parte, si ha il potenziale vantaggio di avere un JAR che funziona sia in GAE e contesti non GAE.
C'è anche un altro modo per farlo. Questo è spiegato bene nella documentazione del gaevfs su come scrivere codice portabile: http://code.google.com/p/gaevfs/wiki/ApplicationPortability
Di interesse per voi è la seguente riga:
boolean isGoogleAppEngine = getServletContext().getServerInfo().contains("Google");
Come spiegato here è possibile controllare la seguente proprietà:
String environment = System.getProperty(
"com.google.appengine.runtime.environment")
environment
è "Produzione" quando è in esecuzione su App Engine e "Sviluppo" quando è in esecuzione nel server di sviluppo.
simile a quello che ha scritto @Reza, ma un po 'più pulito:
uso SystemProperty.environment.value()
per ottenere "Produzione" durante l'esecuzione su App Engine, e "Sviluppo " durante l'esecuzione nel server di sviluppo.
ho visto nessuna soluzione type-safe qui ecco che è:
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
// The app is running on App Engine...
}
- 1. Caricamento del codice byte Java in Runtime
- 2. Identifica se il dispositivo è Kindle
- 3. Controllare se il codice è in esecuzione in Interface Builder
- 4. Esecuzione del codice java compilato in fase di esecuzione
- 5. Identifica il motivo per cui il motore dell'app Google è lento
- 6. Modifica del codice al runtime
- 7. Determinare se il programma è in esecuzione su Windows Server
- 8. Controlla se il servizio è in esecuzione su Android?
- 9. Esecuzione del codice prolog su un iPhone
- 10. Rileva se il server ADB è in esecuzione su Android?
- 11. Verifica se il server è in linea dal codice Java
- 12. Come rilevare se Java Runtime è installato o meno
- 13. controlla se qualche programma exe è in esecuzione su Windows
- 14. Come sapere se il tuo codice è in esecuzione su un iPhone o un iPhone3G?
- 15. Come posso sapere quale Runtime Host è correntemente in esecuzione il mio codice?
- 16. Esecuzione di script groovy in codice Java
- 17. Il modo migliore per rilevare se il codice è in esecuzione in un server delle applicazioni java
- 18. Come sapere se il codice è in esecuzione localmente da Visual Studio/Cassini
- 19. Come faccio a sapere che il mio codice è in esecuzione su Mono?
- 20. Misurazione del runtime di un codice C++?
- 21. Utilizzando il motore SAXON Xpath in Java
- 22. Rileva se MATLAB startup.m è in esecuzione su un worker
- 23. Codice iOS per identificare il supporto del metallo in runtime?
- 24. Esecuzione di script Groovy incorporati in Java su runtime per Android
- 25. Motore di report Java leggero
- 26. Identifica se un indirizzo di posta elettronica è "pubblico"
- 27. Compilazione di String come codice durante il runtime su Android
- 28. Ottenere l'identità della firma del codice su runtime?
- 29. Ottieni il nome del file in esecuzione in Java?
- 30. Motore di ricerca in Java?
Eventuali duplicati di [Come controllare in Java App Engine se siamo sulla workstation di sviluppo] (http://stackoverflow.com/ domande/1574637/how-to-check-in-java-app-engine-if-we-are-on-development-workstation) –