2016-04-20 6 views
0

Guten Tag. ich mit Version einige Test-Anwendung bereitstellen, wie in https://community.oracle.com/blogs/serli/2010/08/30/how-use-glassfish-application-versioningWie bekomme ich glassfish/javaee Anwendungsversion?

--name asadmin bereitstellen $ = test: BETA-1.1 test.war

Aber wenn ich versuche, Anwendungsname http://javahowto.blogspot.ru/2009/12/how-to-get-module-name-and-app-name.html

zu erhalten initialContext.lookup ("java: app/AppName") - Es wurde ohne Version zurückgegeben. Ist es möglich, eine Version der Anwendung programmatisch zu bekommen?

$ asadmin list-Anwendungen druckt appplication Namen mit Versionen

+0

Bedeckt dies Ihre Frage: http://blog.payara.fish/deploying-multiple-application-versions-on-payara-server? (Payara basiert auf Glassfish). – simdevmon

+0

simdevmon, es zeigen nur Multiversion-Bereitstellungen. Nicht sagen, wie man die aktuelle Anwendungsversion bekommt. – lunicon

Antwort

0

Ich fand einen Platz in der Quelle, wo es AnwName erhalten:

glassfish3 \ Glassfish \ Module \ Container-common.jar com/sun/Unternehmen/Behälter/common/Umsetz/JavaModuleNamingProxy .class-

private String getAppName() throws NamingException { 
    ComponentEnvManager namingMgr = (ComponentEnvManager)this.habitat.getComponent(ComponentEnvManager.class); 

    String appName = null; 
    if (namingMgr != null) { 
     JndiNameEnvironment env = namingMgr.getCurrentJndiNameEnvironment(); 

     BundleDescriptor bd = null; 
     if ((env instanceof EjbDescriptor)) { 
     bd = ((EjbDescriptor)env).getEjbBundleDescriptor(); 
     } else if ((env instanceof BundleDescriptor)) { 
     bd = (BundleDescriptor)env; 
     } 
     if (bd != null) { 
     Application app = bd.getApplication(); 
     appName = app.getAppName(); // <-- HERE! 
     } 
    } 
    if (appName == null) 
     throw new NamingException("Could not resolve java:app/AppName"); 

    return appName; 
    } 

und Application.getAppName (es) in Create

glassfish3 \ Glassfish \ Module \ dol.jar! Com/sun/Unternehmen/deployment/Anwendung .class-

public static Application createApplication(Habitat habitat, String name, ModuleDescriptor <BundleDescriptor> newModule) { 
    Application application = new Application(habitat); 
    application.setVirtual(true); 
    if ((name == null) && (newModule.getDescriptor() != null)) { 
     name = ((BundleDescriptor)newModule.getDescriptor()).getDisplayName(); 
    } 
    String untaggedName = VersioningUtils.getUntaggedName(name); 
    if (name != null) { 
     application.setDisplayName(untaggedName); 
     application.setName(untaggedName); 
     application.setAppName(untaggedName); 
    } 
    newModule.setStandalone(true); 
    newModule.setArchiveUri(untaggedName); 
    if (newModule.getDescriptor() != null) { 
     ((BundleDescriptor)newModule.getDescriptor()).setApplication(application); 
    } 
    application.addModule(newModule); 
    return application; 
    } 

Wie Sie es in Anwendung speichern getaggt Namen können tut. Warum nicht "displayName" verwenden? Trotzdem , ich werde versuchen, einen anderen Weg finden, um Versionsinformationen zu bekommen ... eingestellt werden kann/Lese-Glasfischen application.xml/version-identifier

Update: Glasfischen erstellen Ordner mit der Version in (Domäne | Knoten)/Anwendungen/AppName ~ Version. So können wir einige Ressourcenpfad analysieren :)

static final Pattern APP_VER = Pattern.compile("/applications/([^~/]+)(?:~([^/]*))?"); 

public String getAppVersion() { 
    URL res = getClass().getResource("/META-INF/somefile.xml"); 
    if (res != null) { 
    Matcher ver = APP_VER.matcher(res.getPath()); 
    if (ver.find()) 
     return ver.group(2); 
    } 

    return null; 
} 

Viel Spaß! Vielleicht hat jemand eine schönere Lösung?