configurar spring y ejbs

81 views
Skip to first unread message

Pablo Vagliati

unread,
Feb 15, 2010, 1:40:00 PM2/15/10
to jav...@googlegroups.com, Desarro...@gruposyahoo.com.ar
Hola gente.

Estoy utilizando Spring y EJBs. Soy nuevo en esto. Me esta funcionando todo bien, pero necesito poder especificar la direccion y el puerto del servidor fuera del xml de configuracion del cliente. O sea, yo genero un jar con la aplicacion cliente y actualmente el xml donde estan definidos los ejbs via spring esta en este jar. Necesito que el cliente pueda cambiar la direccion y el puerto del servidor sin tocar el jar.

Es posible algo asi?

Gracias, Pablo.


Pablo Vagliati

unread,
Feb 15, 2010, 1:55:46 PM2/15/10
to jav...@googlegroups.com, Desarro...@gruposyahoo.com.ar
Estoy usando la clase ClassPathXmlApplicationContext para obtener los beans especificandole el archivo de configuracion, algo asi:

        ClassPathXmlApplicationContext path = new ClassPathXmlApplicationContext("client-app-context.xml");
        myBean = path.getBean(beanName);


Y en el archivo defino los beans asi:

    <jee:jndi-lookup id="rolesManager" jndi-name="RolesEJB/remote" resource-ref="false">
        <jee:environment>
                java.naming.factory.initial=org.jboss.security.jndi.JndiLoginInitialContextFactory
                java.naming.provider.url=jnp://localhost:1099
                java.naming.security.principal=jboss
                java.naming.security.credentials=jboss
        </jee:environment>
    </jee:jndi-lookup>


Puedo sacar de alguna forma la direccion del servidor y su puerto como les decia?

Gracias. Pablo.

Matias Tito

unread,
Feb 15, 2010, 1:57:52 PM2/15/10
to jav...@googlegroups.com
Podrías settearlo en un archivo externo de properties

2010/2/15 Pablo Vagliati <jvag...@gmail.com>
--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

Pablo Saavedra

unread,
Feb 15, 2010, 3:06:36 PM2/15/10
to jav...@googlegroups.com
No podes hacer que el jndi environment sea un properties? Yo suelo hacer esto:

<bean id="rolesManager"
   class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="RolesEJB/remote" />
  <property name="resourceRef" value="false" />
  <property name="jndiEnvironment" ref="environment" />
</bean>

<bean id="environment"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="location" value="classpath:/jndi.properties" />
</bean>

Así pones el jndi.properties en el classpath y automáticamente te toma las propiedades, sin necesidad de que esté en el jar.

Espero que te sirva.

2010/2/15 Matias Tito <matia...@gmail.com>

Pablo Vagliati

unread,
Feb 15, 2010, 3:21:43 PM2/15/10
to jav...@googlegroups.com
Buenisimo Pablo. Funciono barbaro. Gracias a todos.

Pablo Vagliati

unread,
Feb 15, 2010, 4:20:11 PM2/15/10
to jav...@googlegroups.com, Desarro...@gruposyahoo.com.ar
Ahi genere el jar y no encuentro forma de que encuentre el jndi.properties (desde eclipise me funciona bien). O sea, no esta en el jar, el manifest del jar setea el classpath a "." y no lo encuentra (FileNotFound..).

Pruebo seteando la variable CLASSPATH en el SO y tampoco. Probe cambiando el bean:

<bean id="environment"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="location" value="classpath:/jndi.properties" />
</bean>

y setearle el location a "classpath:.jndi.properties" (le saco la barra) y tampoco.

Debe ser una pabada pero no le encuentro la vuelta. Se les ocurre algo?

Pablo Saavedra

unread,
Feb 16, 2010, 7:46:35 AM2/16/10
to jav...@googlegroups.com
-cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.

tendrías que hacer

java -cp <donde sea que tengas en jndi.properties> -jar <tu jar>

Saludos.

2010/2/15 Pablo Vagliati <jvag...@gmail.com>

Pablo Vagliati

unread,
Feb 18, 2010, 10:53:31 PM2/18/10
to jav...@googlegroups.com, Gustavo Mota
No hay forma. Me estoy rompiendo la cabeza y probe todo.

Es una pavada seguro.. pero no la encuentro. Probe en linux, probaron en windows. Probe seteando el classpath de distintas maneras.. eh incluso puse la ruta absoluta al archivo.

No encuentra el jndi.properties:

    <bean id="environment" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location" value="classpath:/jndi.properties" />
    </bean>


Ninguna de las combinaciones funciona:
<property name="location" value="classpath:/jndi.properties" />
<property name="location" value="classpath:jndi.properties" />
<property name="location" value="classpath:.jndi.properties" />
<property name="location" value="classpath:./jndi.properties" />
<property name="location" value="/home/pablo/4.binarios/jndi.properties/jndi.properties" />
<property name="location" value="//home/pablo/4.binarios/jndi.properties/jndi.properties" />
<property name="location" value="classpath:./home/pablo/4.binarios/jndi.properties/jndi.properties" />

De las formas que pruebe obtengo la traza que copio abajo. Con la varialble de entorno CLASSPATH y el parametro -cp tambien jugue.

Como les digo soy nuevo en Spring. Lo unico que se me ocurre es que el problema puede venir por la combinacion de clases que uso (para obtener un bean desde mi codigo y en la definicion del bean environment en el application-context.xml). Esto no lo hice yo si no un compañero. Para obtener un bean utilizo:


ClassPathXmlApplicationContext path = new ClassPathXmlApplicationContext("client-app-context.xml");
 return path.getBean(beanName);

Probe tambien cambiando esto a:

ctx = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(resource);
return ctx.getBean(beanName);


Pero tampoco. Es correcto el uso de "org.springframework.beans.factory.config.PropertiesFactoryBean" en la definicion de environtment en el application-context.xml?

Se les ocurre que puede ser? Cualquier idea es mas que bienvenida.

Saludos, Pablo. PD: abajo esta la traza.

Excepcion:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'environment' defined in class path resource [client-app-context.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: class path resource [/home/pablo/4.binarios/jndi.properties] cannot be opened because it does not exist
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1362)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:485)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:170)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:407)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:735)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:369)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:122)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:66)
        at es.com.s21sec.bitacora5.ui.ClientBeanFactory.getBean(ClientBeanFactory.java:58)
        at es.com.s21sec.bitacora5.ui.incidences.ManagersFactory.getIncidencesManager(ManagersFactory.java:17)
        at es.com.s21sec.bitacora5.ui.incidences.events.EventsTable.<init>(EventsTable.java:72)
        at es.com.s21sec.bitacora5.ui.incidences.events.EventsTablePanel.getEventsTable(EventsTablePanel.java:98)
        at es.com.s21sec.bitacora5.ui.incidences.events.EventsTablePanel.initialize(EventsTablePanel.java:75)
        at es.com.s21sec.bitacora5.ui.incidences.events.EventsTablePanel.<init>(EventsTablePanel.java:64)
        at es.com.s21sec.bitacora5.ui.incidences.IncidencesPanel.getEventsTablePanel(IncidencesPanel.java:282)
        at es.com.s21sec.bitacora5.ui.incidences.IncidencesPanel.<init>(IncidencesPanel.java:70)
        at es.com.s21sec.bitacora5.ui.incidences.IncidencesPanel.main(IncidencesPanel.java:317)
Caused by: java.io.FileNotFoundException: class path resource [/home/pablo/4.binarios/jndi.properties] cannot be opened because it does not exist
        at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:142)
        at org.springframework.core.io.support.PropertiesLoaderSupport.loadProperties(PropertiesLoaderSupport.java:178)
        at org.springframework.core.io.support.PropertiesLoaderSupport.mergeProperties(PropertiesLoaderSupport.java:157)
        at org.springframework.beans.factory.config.PropertiesFactoryBean.createInstance(PropertiesFactoryBean.java:98)
        at org.springframework.beans.factory.config.PropertiesFactoryBean.afterPropertiesSet(PropertiesFactoryBean.java:69)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1390)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1359)
        ... 22 more

Pablo Vagliati

unread,
Feb 18, 2010, 10:58:23 PM2/18/10
to jav...@googlegroups.com
Les recuerdo que el problema esta cuando saco el jndi.properties del jar que generero. Si esta dentro del jar funciona sin problemas (java -jar archivo.jar).

Alguna idea?

Pablo Saavedra

unread,
Feb 19, 2010, 7:09:53 AM2/19/10
to jav...@googlegroups.com
Ok, proba usando file:///home/pablo/4.binarios/jndi.properties/

Ahi lo debería encontrar. Una pregunta, eso es un jar, como encuentra la librería de spring? Me podrías decir como lo ejecutas y donde tenes los jars?

Saludos.

2010/2/19 Pablo Vagliati <jvag...@gmail.com>

Pablo Vagliati

unread,
Feb 19, 2010, 1:24:42 PM2/19/10
to jav...@googlegroups.com
Lo genero con la opcion "Export>JAR ejecutable" de Eclipse. Te expande/descomprime todas las librerias en el jar generado.

Pablo Saavedra

unread,
Feb 19, 2010, 1:35:15 PM2/19/10
to jav...@googlegroups.com
te mete todo en el jar? Entonces debe ser el MANIFEST el problema. Qué dice?

2010/2/19 Pablo Vagliati <jvag...@gmail.com>

Pablo Vagliati

unread,
Feb 19, 2010, 1:41:38 PM2/19/10
to jav...@googlegroups.com, Gustavo Mota
Ahi parece que lo encontró usando:

file://./jndi.properties

Ahora me tira un UnknownHostException. En el jndi.properties tengo:


java.naming.factory.initial=org.jboss.security.jndi.JndiLoginInitialContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.security.principal=jboss
java.naming.security.credentials=jboss

Por que puede ser (si en el jndi.properties no cambien nada)?

Pablo Saavedra

unread,
Feb 19, 2010, 1:44:16 PM2/19/10
to jav...@googlegroups.com
Está el jboss levantado?

2010/2/19 Pablo Vagliati <jvag...@gmail.com>

Pablo Vagliati

unread,
Feb 19, 2010, 1:52:38 PM2/19/10
to jav...@googlegroups.com
Si, esta corriendo el JBoss.

Acabo de probar, cambiando el:


<property name="location" value="classpath:/jndi.properties" />
a:

<property name="location" value="file://./jndi.properties" />

Y funciona lo mas bien.

Pablo Vagliati

unread,
Feb 19, 2010, 2:42:21 PM2/19/10
to jav...@googlegroups.com
Parece que el problema sigue siendo el original: no encuentra el jndi.properties. Solo que al ponerlo como:

          file://./jndi.prueba.properties

Por algun motivo no se queja de no encontrarlo, y sigue. Pero como no lo encontro no tiene la url del servidor por eso me tira un UnknownHostException.

Entonces sigo como en un principio: "no puedo hacer que encuentre el archivo jndi.properties".

Alguna idea mas?

El 19 de febrero de 2010 16:44, Pablo Saavedra <pablo.a....@gmail.com> escribió:

Pablo Saavedra

unread,
Feb 19, 2010, 2:44:19 PM2/19/10
to jav...@googlegroups.com
Te repito lo del manifest. Con file:// tratá de ponerle el path absoluto.

2010/2/19 Pablo Vagliati <jvag...@gmail.com>

Pablo Vagliati

unread,
Feb 19, 2010, 2:48:32 PM2/19/10
to jav...@googlegroups.com
Ahi con el path absoluto como decias lo encontró:

<property name="location" value="file:///home/pablo/4.binarios/jndi.properties" />

Tengo que ver como relativizarlo ahora.

Pablo Saavedra

unread,
Feb 19, 2010, 3:03:50 PM2/19/10
to jav...@googlegroups.com
Probá sin el ./, por ej: file://jndi.properties

Pablo Vagliati

unread,
Feb 19, 2010, 4:01:32 PM2/19/10
to jav...@googlegroups.com
Millon de gracias Pablo. Efectivamente el MANIFEST creado por Eclipse. Gracias, Saludos, Pablo.
Reply all
Reply to author
Forward
Message has been deleted
0 new messages