Estoy creando un servicio web, que se ejecutan en el servidor GlassFish, y quiero tener algunas propiedades personalizadas. Para esto estoy utilizando el Properties clase. El código que estoy usando es:

Properties p=new Properties();
File f=new File(System.getProperty("user.dir"), "settings.properties");
p.load(new FileInputStream(f));  

Pero ¿cómo puedo obtener el settings.properties-archivo en mi directorio config?

No estoy seguro acerca de mi ruta de clases, ya que este es administrado por NetBeans y GlassFish. Supongo que mi .war-archivo es añadido a la ruta de clases, cuando la implementación de…

He añadido mi propia solución, pero si alguien podía venir para arriba con una solución mejor, sería muy bienvenida…

OriginalEl autor doekman | 2009-02-10

8 Comentarios

  1. 11

    Lugar de su propiedad archivos en la <glassfish-install-dir>/glassfish/domains/<domain-name>/lib/clases directorio y que será accesible desde dentro de sus aplicaciones a través de la un resourcebundle clase. Por ejemplo, agregar un archivo de propiedades con nombre configuración.propiedades a este directorio y, a continuación, tener acceso a los valores del archivo como este:

    Un resourcebundle.getBundle(«ajustes»).getString(«mi-propiedad-clave»);

    OriginalEl autor Brent Clay

  2. 5

    La solución que funciona es en realidad bastante simple:

    URL url =  this.getClass().getResource("/package/name/file.properties");
    p = new Properties();
    p.load(new FileInputStream(new File(url.getFile())));

    ¿Por qué no venir nadie con esto?

    Es que tu config?

    OriginalEl autor doekman

  3. 3

    Alternativas:

    Dependiendo de cómo su dominio está configurado, usted podría ser capaz de utilizar asadmin create-system-properties desde la línea de comandos. Ejecutar/ver asadmin create-system-properties --help para obtener más información.

    O la administración de las propiedades del sistema a través de la interfaz de administración de Glassfish. Aquí está el enlace por defecto: http://localhost:4848/configuration/systemProperties.jsf?configName=server-config

    Que bueno saber, y podría resultar útil. Me gustaría tener algunos de los ajustes de fuera de mi contenedor. Pero la versión número debe estar en el interior del contenedor, así que quiero utilizar una propiedad de archivo. Ventaja: el número de versión también es actualizable por el script de compilación (ant).

    OriginalEl autor fredarin

  4. 1

    Ver aquí de cómo se puede leer un archivo de propiedades de la classpath:

    URL url =  ClassLoader.getSystemResource("test.properties");
    Properties p = new Properties();
    p.load(new FileInputStream(new File(url.getFile())));

    Usted, a continuación, sólo tiene que añadir su configuración de directorio a la ruta de clases.

    Si tiene problemas al usar el código anterior se trate de ServletContext.getResource.

    ¿Cómo puedo agregar la configuración de directorio a la ruta de clases en GlassFish/NetBeans? No puedo encontrar en cualquier lugar…
    Acaba de poner en su WEB-INF/classes directorio
    He intentado eso, pero ya no funciona…
    Podría intentar ServletContext.getResource?

    OriginalEl autor kgiannakakis

  5. 1

    Yo he probado un montón, pero he solucionado con esto:

            //ServletContext ctx
            InputStream stream = ctx.getResourceAsStream("version.properties");
            p = new Properties();
            p.load(stream);

    Tengo que pasar el ServletContext desde un jsp página con una llamada a getServletContext()getServletContext(). No es ideal, pero es la única manera de conseguir que funcione…

    Sería bueno si alguien podía pensar en otra solución, que se puede trabajar withyout la ServletContext.

    OriginalEl autor doekman

  6. 0

    +1 para poner en tu classpath.

    Si usted está utilizando la Primavera (y recomiendo a usted hacer si no está ya por muchas razones) cuando se puede cargar un archivo de propiedades como esta:

    database.username=scott
    database.password=tiger

    y poner las referencias en el contexto de la aplicación como:

    <property name="username" value="${database.username}"/>

    (suponiendo que se ha configurado la propiedad configurador) y se producirá un error si el archivo no se puede cargar o de la propiedad no existe. La aplicación no se iniciará. Esto es realmente una buena cosa. Permite encontrar problemas realmente muy rápidamente, mucho mejor que el fallando en silencio, que a veces pueden tener efectos catastróficos.

    Sólo el uso de primavera para la configuración? Prefiero usar alguna norma de las cosas.
    Eso no es todo que usted utilice la Primavera para (obviamente). Particularmente para las aplicaciones Web que se ejecutan en el servidor de aplicaciones, no puedo imaginar un escenario en el que yo no uso la Primavera. Después de que el JDK tiene que ser el segundo más comúnmente utilizado tarro(s).
    Estamos creando webservices.
    Sólo quiero leer una propiedad de archivo. Que no debería ser tan difícil?
    La primavera no aporta nada nuevo aquí, pero no estándar dependencias.

    OriginalEl autor cletus

  7. 0

    Copia su archivo de propiedades para la web/WEB-INF/classes camino

    Properties p=new Properties();
    p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myproperty.properties"));

    OriginalEl autor mssb

  8. 0

    Ser consciente de que tiene a cerrar el InputStream. De lo contrario obtendrá un SocketException tarde o temprano.

    #|2013-xx-xxTxx:xx:xx.162+0200|WARNING|sun-appserver2.1|sun.rmi.transport.tcp|_ThreadID=431; _ThreadName=RMI TCP Accept-0;_RequestID=xyz;|RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=42384] throws
    java.net.SocketException: Too many open files
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
        at java.net.ServerSocket.implAccept(ServerSocket.java:453)
        at java.net.ServerSocket.accept(ServerSocket.java:421)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
        at java.lang.Thread.run(Thread.java:662)
    |#]

    La Carga De Propiedades

    OriginalEl autor thommy

Dejar respuesta

Please enter your comment!
Please enter your name here