2011-12-07 11 views
9

Qualcuno sa se è possibile creare un argomento e il relativo factory di connessione in modo problematico? Attualmente uso l'utilità di amministrazione glassfish per creare il mio argomento e il suo factory di connessione. Se non riesco a crearlo in codice, glassfish/openmq hanno un argomento di default e conn factory che posso usare?Come creare jms Topic e TopicConnectionFactory in modo programmatico?

risposta

15

Se si desidera aggirare la creazione manuale delle risorse solo nell'amministratore, è possibile semplicemente distribuirle con il file "glassfish-resources.xml" (GF 3.1, vedere http://docs.oracle.com/cd/E18930_01/html/821-2417/giyhh.html).

È necessario un admin-oggetto-risorsa come questo (un argomento):

<admin-object-resource enabled="true" jndi-name="jms/myTopic" 
    object-type="user" res-adapter="jmsra" res-type="javax.jms.Topic"> 
    <property name="Name" value="physicalTopic"/> 
</admin-object-resource> 

essere consapevoli del fatto che è necessario utilizzare i valori "Nome" diverse per il soggetto (qui: "physicalTopic") se implementa più argomenti i cui messaggi non devono essere confusi.

Inoltre è necessario un connettore-risorsa che fa riferimento a un pool di connessione connettore di tipo javax.jms.TopicConnectionFactory.

Se non si mira alla creazione dinamica di risorse utilizzando il descrittore di distribuzione glassfish-resources.xml sembra essere il modo migliore.

Si prega di notare che le risorse impiegate in questo modo sono applicazioni di ambito: http://docs.oracle.com/cd/E18930_01/html/821-2417/giydj.html

"GlassFish-resources.xml" è il file per il GF 3.x, per GF 2.x era "sun-resources.xml ". Il file si trova nella cartella "Risorse del server" nella vista del progetto se si utilizza NetBeans. Attenzione: il file glassfish-resources.xml in "Risorse del server" viene utilizzato solo da NetBeans se si utilizza NetBeans per la distribuzione! NetBeans sa come creare queste risorse e svolge questo compito. Se distribuisce direttamente un orecchio a GlassFish senza NetBeans - che sembra molto probabile per un ambiente di produzione - è necessario fornire GlassFish-resources.xml in:

  • META-INF del modulo EJB o WEB -INF della tua GUERRA per risorse con ambito modulo
  • META-INF della tua applicazione aziendale per risorse a livello di applicazione In NetBeans puoi farlo inserendo il file nella cartella "Configuration Files" della tua vista progetto (che è src/conf/nel file system).

È possibile creare facilmente questa definizione di risorsa utilizzando la procedura guidata [Nuovo messaggio guidato da Bean] di NetBeans (è sufficiente aggiungere un MBean selezionando [Nuovo ...]). Nella procedura guidata scegli "Destinazioni progetto"> [Aggiungi]. Un completo 3.1 esempio si presenta così:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd"> 
<resources> 
    <admin-object-resource enabled="true" jndi-name="jms/myDestination" res-type="javax.jms.Topic" res-adapter="jmsra"> 
     <property name="Name" value="PhysicalTopic"/> 
    </admin-object-resource> 
    <connector-connection-pool name="jms/myDestinationFactoryPool" connection-definition-name="javax.jms.TopicConnectionFactory" resource-adapter-name="jmsra"/> 
    <connector-resource enabled="true" jndi-name="jms/myDestinationFactory" pool-name="jms/myDestinationFactoryPool" /> 
</resources> 

Questo è l'annotazione MBean:

@MessageDriven(mappedName = "java:app/jms/myDestination", activationConfig = 
{ 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), 
    @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"), 
    @ActivationConfigProperty(propertyName = "clientId", propertyValue = "NewMessageBean"), 
    @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "NewMessageBean") 
}) 
public class NewMessageBean implements MessageListener 
{ 
[...] 

Attenzione: "java: app /" in mappedName è corretto solo se si utilizza risorse dell'applicazione ambito. Puoi risparmiare "java: app /" nella definizione in glassfish-resources.xml. La guida alla distribuzione di GF dice: "I nomi JNDI delle risorse con ambito applicazione iniziano con java: app o java: module.Se uno di questi prefissi non è specificato nel nome JNDI, viene aggiunto."

È inoltre possibile introdurre un altro livello di riferimento indiretto utilizzando "nome" anziché "mappedName". È quindi necessario fornire un file denominato "application-client.xml" in cui il nome (logico) viene mappato a una posizione "fisica" JNDI.

+0

Grazie! Sapresti per caso dove ottengo la sintassi per aggiungere la risorsa factory di connessione al file glassfish-resources.xml? Inoltre non ho trovato un file glassfish-resources.xml nella mia directory di installazione. Dove dovrei attaccare questo file dopo ho capito come generarlo? Esiste uno pre esistente che posso modificare e forse imparare da? – simgineer

Problemi correlati