Domanda

Quindi, ecco il mio problema:
Ho un message driven bean X e vorrei fare uso di strumento X onMessage() metodo.Lascia presumere che ho una sola istanza del bean in esecuzione nel mio app server, quindi, vorrei inizializzare log4j in ejbCreate().Questo significherebbe che avrei dovuto fare qualcosa di simile a questo:

public void ejbCreate() {
    PropertyConfigurator.configure(Classloader.getResourceAsStream("xyz_log4j.properties"));
}

Tuttavia, questo non aiuta.Non importa quello che faccio, ho sempre il mio flusso nullo, ho provato altre versioni :questo.getClass().getStream() e ResourceBundle.

Ho vaso sotto la mia proprietà di file e test.jar e ha aggiunto sotto l'ORECCHIO librerie (sto usando RAD7) e ha ottenuto riflette nel mio manifesto.mf.

Che ci sia qualcuno che faccia questo problema prima?Se sì, come hai fatto a risolverlo?Apprezzo il vostro aiuto...

È stato utile?

Soluzione

Non vorrei raccomandare configurazione di log4j in EJB metodo di creazione.Più EJBeans può essere attivata / passivato in contenitori capriccio per la specifica J2EE.Quindi c'è una possibilità che si finisce configurazione di log4j più volte.Consiglia l'utilizzo di avvio di fagioli, che sono garantiti per essere richiamato solo 1 volta.

Altri suggerimenti

Se stai ricevendo questo dall'interno di un file JAR, allora vi state perdendo un / iniitial:

Classloader.getResourceAsStream("/xyz_log4j.properties")

E a seconda di quale directory contiene il file delle proprietà, è necessario specificare il percorso di questa directory relativa alla parte superiore della gerarchia delle classi. Ad esempio, se questo file proprietà si trova nella stessa directory di net.mine.Program, allora si dovrebbe fare questo:

Classloader.getResourceAsStream("/net/mine/xyz_log4j.properties")

Non credo si può leggere dalla directory META-INF utilizzando getResourceAsStream(), ma non ho mai provato così forse c'è un modo per farlo.

Si potrebbe provare difficile codificare il nome della classe nel carico.

<name of your class>.class.getResourceAsStream(fileName);

In alternativa si consiglia di guardare in SLF4J . Il che è una facciata che può sedere in cima Log4J. L'API è per lo più lo stesso (lo stesso creatore credo), e SLF4J non richiede una chiamata di inizializzazione esplicato, che semplifica le cose un po '.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top