2016-04-20 2 views
0

Добрый день. развернуть некоторое тестовое приложение с версией, как в https://community.oracle.com/blogs/serli/2010/08/30/how-use-glassfish-application-versioningКак получить версию приложения Glassfish/javaee?

$ asadmin развернуть --name = тест: бета-1,1 test.war

Но когда я пытаюсь получить имя приложения http://javahowto.blogspot.ru/2009/12/how-to-get-module-name-and-app-name.html

initialContext.lookup ("java: app/AppName") - Он возвращается без версии. Можно ли запрограммировать версию приложения?

$ asadmin список-приложения печатают имена с версией приложения с

+0

Этот вопрос охватывает ваш вопрос: http://blog.payara.fish/deploying-multiple-application-versions-on-payara-server? (Payara основан на Glassfish). – simdevmon

+0

simdevmon, его просто показывают многоверсионные развертывания. Не говорите, как получить текущую версию приложения. – lunicon

ответ

0

Я нашел место в источнике, где он получит AppName:

glassfish3 \ GlassFish \ модули \ контейнерного common.jar ком/ВС/предприятия/контейнер/общее/осущ/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; 
    } 

и Application.getAppName() устанавливается в createApplication

glassfish3 \ GlassFish \ модули \ dol.jar! Ком/ВС/предприятие/разворачивание/Применения .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; 
    } 

Как вы можете видеть, оно не сохранить помеченное имя внутри приложения. Почему бы не использовать displayName? Тем не менее, я постараюсь найти другой способ, чтобы получить информацию о версии ... можно установить/прочитать GlassFish-application.xml/версии идентификатор

Update: GlassFish создать папку с версией в (домен | узел)/приложения/APPNAME ~ версии. Поэтому мы можем проанализировать некоторый путь ресурса :)

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; 
} 

Удачи! Может быть, у кого-то есть более прекрасное решение?

Смежные вопросы