Не могу найти Vaadin ClassResource - PullRequest
0 голосов
/ 07 марта 2011

Я пытаюсь использовать класс Vaadin ClassResource для загрузки свойств соединения с моей базой данных из файла, который будет развернут с помощью WAR, но я не могу найти этот файл. Я использую Vaadin 6.5.2, Tomcat 7.0.6, и я поместил мой файл app.properties в тот же пакет, что и основной файл приложения.

Мой код в Scala. Вот что я пытаюсь:

val cr = new ClassResource("app.properties",this) // "this" is the application
debug("resource mimeType = {}",cr.getMIMEType)
debug("resource bufferSize = {}", cr.getBufferSize)
debug("resource cacheTime = {}",cr.getCacheTime)
debug("resource fileName = {}", cr.getFilename)
val ds = cr.getStream
if (ds != null) {  
  debug("download stream bufferSize = {}", ds.getBufferSize)
  debug("download stream cacheTime = {}",ds.getCacheTime)

  val is = ds.getStream // get InputStream

  if (is != null) {
    val props = new Properties
    props.load(is)
    val dbHost = props.get("db.host").asInstanceOf[String]
    val dbName = props.get("db.name").asInstanceOf[String]
    val dbPort = props.get("db.port").asInstanceOf[String]
    val dbUser = props.get("db.user").asInstanceOf[String]
    val dbPass = props.get("db.pass").asInstanceOf[String]
    val dbUri = props.get("db.uri").asInstanceOf[String]
  } else {
    debug("Input stream was null")
  }
} else {
  debug("Download stream was null")
}

А вот и результат:

08:51:59.617 ["http-bio-8084"-exec-11] DEBUG c.sentientswarm.propdesk.AppConfig$ - resource mimeType = application/octet-stream
08:51:59.620 ["http-bio-8084"-exec-11] DEBUG c.sentientswarm.propdesk.AppConfig$ - resource bufferSize = 0
08:51:59.621 ["http-bio-8084"-exec-11] DEBUG c.sentientswarm.propdesk.AppConfig$ - resource cacheTime = 86400000
08:51:59.621 ["http-bio-8084"-exec-11] DEBUG c.sentientswarm.propdesk.AppConfig$ - resource fileName = app.properties
08:51:59.621 ["http-bio-8084"-exec-11] DEBUG c.sentientswarm.propdesk.AppConfig$ - download stream bufferSize = 0
08:51:59.621 ["http-bio-8084"-exec-11] DEBUG c.sentientswarm.propdesk.AppConfig$ - download stream cacheTime = 86400000
08:51:59.621 ["http-bio-8084"-exec-11] DEBUG c.sentientswarm.propdesk.AppConfig$ - Input stream was null

Я попытался разместить файл конфигурации в разных местах, включая верхнюю часть src, в верхней части папки VAADIN, в которой хранятся темы, и где он находится в данный момент (в том же пакете, что и основное приложение), но результаты всегда одинаковы. Может кто-нибудь сказать мне, что я делаю не так ???

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Вот как мы это делаем.

        InputStream is=null;
    try
    {
        is=Application.class.getClassLoader().getResourceAsStream("Application.properties");
    }
    catch(Exception x)
    {
        log.error("Error loading 'Application.properties' properties",x);
        return null;
    }

    if (is!=null)
    {
        try
        {
            Properties props=new Properties();
            props.load(is);
            return(props);
        }
        catch (IOException e)
        {
            log.error("Error reading properties 'Application.properties' ",e);
        }
    }

    return(null);

Однако, если честно, мы не создаем войн и держим наше приложение невзорванным.Помните, что Application.class - это не приложение Vaadin, а наша собственная оболочка вокруг приложения Vaadin.

0 голосов
/ 12 декабря 2012

Я скопировал файл .properties в каталог контекста приложения и прочитал его следующим образом

Properties properties = new Properties();
properties.load(new FileInputStream(getContext().getBaseDirectory().getAbsolutePath() + "/application.properties"));

Вызывается указанный выше код из класса приложения.

...