Configuracion JMS (Weblogic – java con spring)

abria que tener corriendo el welogic y poner en el navegador

http://localhost:7001/console/

creacion un cluster con el weblogic

Entornos-> cluster

pulsamos boton nuevo.

se introduce un nombre del cluster

pulsamos boton de aceptar.

creacion un servidores con el weblogic

Entornos-> Servidores

boton nuevo.

se introduce un nombre del cluster

el puerto del servidores
seleccionamos «Si hacer este servidor sea miembre de un cluster existente»
selecionamos el cluster que hemos relacionado
pulsamos boton siguinte.
pulsamos boton Terminar.

Para la configuracion de JMS

primero empezare para la configuracion en el welogic

Servicios->Mensajes->Servidores JMS,

se pulsa a nuevo
se introduce un nombre del JMS
pulsamos boton siguinte.
seleccionamos destino
pulsamos boton Terminar.

Para poner el nombre JNDI para la cosas JMS

Servicions -> mensajes -> modulos JMS

si no hay ningun modulo se crea uno nuevo. y se hace de esta manera
se pulsa a nuevo
se introduce un nombre del sistema de JMS
pulsamos boton siguinte.
seleccionamos el cluster donde tengamos nuestro servidores.
pulsamos boton siguinte.
No seleccionamos nada y pulsamos boton Terminar.

cuando ya tienes creado un sistema jms
volvemos a Servicions -> mensajes -> modulos JMS
se pulsa a nuevo
como queremos crear una cola seleccionamos «Cola»
pulsamos boton siguinte.
introducimos un nombre y tambien el nombre JNDI
pulsamos boton Terminar.

Luego habria que configurar la parte spring. Esta claro que en la parte java habria que tener unos minimos para ahora no voy a ponerme a explica como es la creacion del un proyecto web con spring(pero podria ser otro punto muy bueno para el log). y que cada proyecto tiene su configuracion y que no todos son iguales he intentado extrapolar esos problemas dando importancia a la configuracion propia de jms

Teniendo en cuento lo anterior voy a dar pequeñas pinceladas a la configuracion , o lo
que yo he tenido que hacer para implementar las colas jms en mi proyecto. Espero que esto
tambien sirva

en mi ficher de configuracion en mi caso es kernel.properties.xml

tengo unas etiquetas para la configuracion y el arquivo que debe de cargar para empezar

   <JMSManagerImpl>
<ctx>jms.sender.context.test.xml</ctx> //nombre del fichero
<JMSMessageTypeTest>weblogicCola</JMSMessageTypeTest> //nombre de la propiedad
  </JMSManagerImpl>

el fichero que voy a configurar ahora mismo es jms.sender.context.test.xml

como estamos usando spring debemos de tenere
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:amq="http://activemq.apache.org/schema/core" xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/util
                        http://www.springframework.org/schema/util/spring-util-3.0.xsd
                        http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-3.0.xsd">
<context:annotation-config />

y terminar  con la etiqueta </beans>

        <bean id="weblogicCola" class="isf.domain.gcjms.DefaultProductorImpl">
               <property name="template">
               <ref bean="weblogicJmsTemplate" />
               </property>
               <property name="destination" ref="colaTEST"/>
        </bean>

<bean id="weblogicJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="weblogicConnectionFactory" />
</property>
<property name="destinationResolver">
<ref bean="weblogicDestinationResolver" />
</property>
</bean>

<bean id="colaTEST" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/micola" /> //nombre JNDI
<property name="jndiTemplate" ref="weblogicJndiTemplate" />
</bean>

<bean id="weblogicJndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7010,localhost:7011,localhost:7012</prop>
</props>
</property>
</bean>

el fichero que voy a configurar ahora mismo es jms.listener.context.test.xml

como estamos usando spring debemos de tenere
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:amq="http://activemq.apache.org/schema/core" xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/util
                        http://www.springframework.org/schema/util/spring-util-3.0.xsd
                        http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-3.0.xsd">
<context:annotation-config />

y terminar  con la etiqueta </beans>

    <bean id="weblogicJndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7010,localhost:7011,localhost:7012
</prop>
</props>
</property>
</bean>

<bean id="weblogicDestinationResolver"
class="org.springframework.jms.support.destination.JndiDestinationResolver">
<property name="jndiTemplate">
<ref bean="weblogicJndiTemplate" />
</property>
<property name="cache">
<value>true</value>
</property>
</bean>

<bean id="weblogicConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="weblogicJndiTemplate" />
</property>
<property name="jndiName"> // nombre que tiene las colas JMS por defectgo
<value>weblogic/jms/ConnectionFactory</value>
</property>
</bean>

<bean id="weblogicJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="weblogicConnectionFactory" />
</property>
<property name="destinationResolver">
<ref bean="weblogicDestinationResolver" />
</property>
</bean>

<jms:listener-container container-type="default" connection-factory="weblogicConnectionFactory" acknowledge="transacted" concurrency="10" destination-resolver="weblogicDestinationResolver">
<jms:listener id="listener" destination="jms/micola" ref="testMessageListener" method="onMessage" />
</jms:listener-container>

<bean id="testMessageListener" class="isf.domain.gcjms.JMSSessionAwareMessageListenerImpl">
<property name="consumerAsyncronous">
<bean class="isf.domain.gccmq.core.listener.ConsumerWLSTest"></bean> //nombre y paquete de la clase lisener
</property>
</bean>
</beans>

y en la parte de java

he crrado una clase main para probarlo

public class JMSManualTest {

public static void main(String[] args) throws IOException {
System.out.println("Arrancando Spring Context...");
//levanto el contexto de spring para que la parte de lisener este activa cuando yo mando.
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:jms.listener.context.test.xml");
System.out.println("Spring Context OK");
do{
System.out.println("Mensaje a enviar:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String mensaje = "";
boolean finComando = false;
while(!finComando){
String line = br.readLine();
if(line.endsWith(";")){
if(line.length() > 1){
mensaje += line.substring(0, line.length()-1);
}
finComando = true;
}else{
mensaje += line;
}
}
System.out.println("Enviando mensaje...");
sendJMSMessage(mensaje);
System.out.println("Mensaje enviado");
}while(true);
}

public static void sendJMSMessage(String message){
JMSMessage mensaje = new JMSMessage(message, "");
mensaje.setJmsMessageType("JMSMessageTypeTest");
mensaje.setJmsPriority(1);
//Especifica la fecha de expiraci�n del mensaje
mensaje.setJmsExpiration(3000);
//Identificador de correlaci�n, usado para asociar un mensaje con otro mensaje
//mensaje.setJmsCorrelationId(Long.toString(System.currentTimeMillis()));
//Permite uno de los dos modos de entrega permitidos,persistente o no persistente
mensaje.setJmsDeliveryMode(1);
//Usado para identificar la prioridad del mensaje
mensaje.setJmsPriority(1);

//Propiedades del mensaje
// Properties prueba = new Properties();
// prueba.put("Rango", 7);
// mensaje.setJmsProperties(prueba);
//Indica si un mensaje ha sido entregado
mensaje.setJmsRedelivered(true);

try {
JMSFactory.getInstance().producer(mensaje);
} catch (JMSInvalidDefinitionBeanException e) {
e.printStackTrace();
} catch (JMSMessageWrapperException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}

 en la parte de recivir

public class ConsumerWLSTest implements IConsumerAsynchronous {

@Override
public JMSMessage onMessageJms(JMSMessage _jmsmessage) {
return onMessageJms(_jmsmessage, null);
}

@Override
public JMSMessage onMessageJms(JMSMessage _jmsmessage, Session _session) {
try{
System.out.println("Mensaje Recibido: [" + _jmsmessage.getJmsBody() + "]");
return null;
}finally{
try {
_session.commit();
} catch (JMSException e) {
e.printStackTrace();
}
}
}

}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *