4

アノテーション リソースを使用して接続ファクトリを取得するのに問題があります。JNDI ルックアップではうまく機能しますが、アノテーションでは機能しません。私の接続ファクトリは null です。

これは、JNDIルックアップを使用した私のコードです(機能):

ConnectionFactory factory = (ConnectionFactory)context.lookup("/ConnectionFactory");

これは注釈付きの私のコードです:

@Resource(mappedName = "java:/ConnectionFactory")
private ConnectionFactory factory;

/ConnectionFactory、java:/JmsXA、JmsXA などのように別の mapsName を試しましたが、まだ nullpointerexception :-/.

誰かがアイデアを持っている場合...

どうも !

これは私のクラスです:

@Stateless
public class ModuleCommunicationHandler implements IModuleCommunicationHandler
{

  /** The connection factory. */
  @Resource(mappedName = "java:/ConnectionFactory")
  private ConnectionFactory factory;

...........

/**
* {@inheritDoc}
*/
@Override
public void sendMessage(JMSMessage jmsMessage, int deliveryMode, int acknowledgeMode) throws TechnicalException
{

try
{
  context = new InitialContext();

  factory = (ConnectionFactory)context.lookup("/ConnectionFactory");

  // Setting the destination - Topic or Queue
  destination = (Destination)context.lookup(jmsMessage.getDestination());

  connection = factory.createConnection();
  session = connection.createSession(false, acknowledgeMode);

  sender = session.createProducer(destination);
  connection.start();

  // Creating the message
  message = session.createTextMessage();
  message.setText(jmsMessage.getBodyMessage());

  // Sending the message
  sender.setDeliveryMode(deliveryMode);
  sender.send(message);

.....

そして、これはログです:

15:05:32,609 ERROR [STDERR] com.*.*.*.server.exception.ModuleCommunicationException: java.lang.NullPointerException
15:05:32,609 ERROR [STDERR]     at com.*.*.*.server.service.ModuleCommunicationHandler.sendMessage(ModuleCommunicationHandler.java:147)
15:05:32,664 ERROR [STDERR] Caused by: java.lang.NullPointerException
15:05:32,664 ERROR [STDERR]     at com.*.*.*.server.service.ModuleCommunicationHandler.sendMessage(ModuleCommunicationHandler.java:108)
4

1 に答える 1

1

(問題のクラスの) すべてのコードを確認せずに言うのは難しいですが、通常の容疑者のいくつかを次に示します。

  1. @Resource アノテーション インスタンスはタイプを指定しないため、デフォルトでフィールドのタイプになります。実際のリソースがabcConnectionFactoryであるのに、フィールドがxyzConnectionFactoryである場合、何らかのエラーが発生します。
  2. アノテーション付きクラスがマネージド (注入) クラスとしてデプロイされていない可能性があります。つまり、デプロイ時にクラスが EJB として扱われることを確認しないと、インジェクション アノテーションが適用されません。例については、この投稿を参照してください。

これが発生した場合、ログにスタック トレースが記録されませんか?

于 2012-05-10T13:37:02.107 に答える