2011-08-08 31 views
8

Tengo un pequeño problema con el servidor de aplicaciones Websphere 7.0 (WAS7) y la lectura de Environment Varaibles.Lea una variable de entorno en Java con Websphere

con Tomcat, he definido como una variable

<Environment name="myVar" type="java.lang.String" value="myVarOnServeur" 

y lo leí con una búsqueda en el initialContext:

Context ctx = new InitialContext(); 
String myVar = (String) ctx.lookup("java:comp/env/myVar"); 

y funciona!

Pero con Websphere, defino una variable de entorno en la GUI pero no puedo leerla en mi código de Java. Tengo una NamingException.

http://fullahead.org/work/stackoverflow/was-environment-variables.png

¿Cómo se puede hacer para solucionar mi problema?

Respuesta

-3

No veo nada allí que diga que esas entradas se pueden leer a través de ctx.lookup ("java: comp/env/...");

+7

Este es un comentario que vale la pena, pero apenas una respuesta. –

+0

@Nicola Musatti No estoy de acuerdo. Muestra que el OP probablemente está ladrando el árbol equivocado por completo. – EJP

+5

Podría estar de acuerdo si el problema original no tenía solución, pero como se han propuesto al menos dos soluciones, una de las cuales implica el enfoque propuesto en la pregunta. Nuevamente, esta no es una respuesta. –

4

puede poner algo como lo siguiente en su archivo web.xml, que debería estar en el directorio de la aplicación WEB-INF:

<env-entry> 
    <env-entry-name>myVar</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>myVarOnServeur</env-entry-value> 
</env-entry> 

Por cierto esta es una sintaxis estándar y debería funcionar en todos los servidores de aplicaciones. Lo estoy usando con WebSphere, JBoss y WebLogic. Se puede consultar exactamente como lo hace en su ejemplo.

3

Usted debe ser capaz de resolver estos a través de WebSphere AdminOperationsMBean:

//sample code from WAS 7 Infocenter 
private String expandVariable(String s) throws 
         javax.management.JMException { 
    com.ibm.websphere.management.AdminService as = 
    com.ibm.websphere.management.AdminServiceFactory.getAdminService(); 

    String server = as.getProcessName(); 
    String mBeanName = "*:*,type=AdminOperations,process=" + server; 

    java.util.Set result = as.queryNames(
    new javax.management.ObjectName(mBeanName) , null); 

    return (String) as.invoke((javax.management.ObjectName) 
          result.iterator().next(), 
          "expandVariable", 
          new Object[]{"${"+s+"}"}, 
          new String[]{"java.lang.String"}); 
} 

Ver Creating, editing and deleting WebSphere variables.

+2

No quiero un código específico para Websphere. Mi aplicación web debe funcionar en TomCat y Websphere. – lookfire

4

Si lo que quiere es definir y administrar sus propias variables, eche un vistazo a Entorno-> Naming-> nombre de los enlaces de espacio. Puede enlazar nombres jndi a constantes de cadena allí. ver String binding settings

+0

¿cuál es la diferencia entre esto y lo que alzobair menciona? - nota para ibm, ¿por qué quieres que haga 100 pasos para hacer lo que hace Tomcat en 1 línea de xml? –

+0

El método que mencioné es una forma de enlazar valores de cadena a una entrada jndi. Las menciones de Alzobair le brindan la capacidad de objetos más complejos que se pueden configurar a través de la consola de administración, overkill para una sola cadena. – svachon

+0

@KalpeshSoni ha! ¿Crees que leerán eso? –

6

para definir web.xml dentro

<env-entry> 
    <env-entry-name>varName</env-entry-name> 
    <env-entry-value>56</env-entry-value> 
    <env-entry-type>java.lang.String</env-entry-type> 
</env-entry> 

ver con Java

Context envEntryContext = (Context) new InitialContext().lookup("java:comp/env"); 
String mydata = (String)envEntryContext.lookup("varName"); 
+0

Esta es para mí la respuesta más correcta que funcionará en la mayoría si no en todos los productos de conservación – Kirby

3

Usted está buscando en el lugar equivocado.

Debe agregar la variable en Entorno-> Nombrar-> Encuadernaciones de espacio de nombre-> Nuevo.

Si elige el tipo de cadena de encuadernación, "Encuadernación identificador" y "Nombre del espacio de nombres ..." miVar, se puede obtener el valor de la variable:

Context ctx = new InitialContext(); 
String myVar = (String) ctx.lookup("cell/persistent/myVar"); 
3

Websphere 7.0 - 8 personas.5

Set Variable Consola de administración ---> Websphere Servidores de aplicaciones -----> Your_sever_name ---> Java y gestión de procesos ---> Definición de proceso -> Java Virtual Machine -> Propiedades personalizadas

obtener el valor en Java System.getProperty ("Your_Variable")

4

On WebSphere follow this settings

On era seguir el ajuste anterior, donde nombre es su clave y el valor es el valor de su propiedad. en mi ejemplo utilicé Name: Test Value: este es el valor de la prueba. Después de configurar estos valores, reinicie su servidor de aplicaciones. en su código Java, llame a System.getProperty ("TEST") donde test es el nombre de su propiedad y el valor mostrará

Cuestiones relacionadas