# Language ko-KR translations for PACKAGE package.
# Automatically generated, 2008.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
"POT-Creation-Date: 2009-06-13 23:52+0000\n"
"PO-Revision-Date: 2008-04-04 01:24+0000\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. Tag: title
#: Jms.xml:2
#, no-c-format
msgid "Asynchronicity and messaging"
msgstr ""

#. Tag: para
#: Jms.xml:3
#, no-c-format
msgid ""
"Seam makes it very easy to perform work asynchronously from a web request. "
"When most people think of asynchronicity in Java EE, they think of using "
"JMS. This is certainly one way to approach the problem in Seam, and is the "
"right way when you have strict and well-defined quality of service "
"requirements. Seam makes it easy to send and receive JMS messages using Seam "
"components."
msgstr ""

#. Tag: para
#: Jms.xml:11
#, no-c-format
msgid ""
"But for cases when you are simply want to use a worker thread, JMS is "
"overkill. Seam layers a simple asynchronous method and event facility over "
"your choice of <emphasis>dispatchers</emphasis>:"
msgstr ""

#. Tag: para
#: Jms.xml:18
#, no-c-format
msgid ""
"<literal>java.util.concurrent.ScheduledThreadPoolExecutor</literal> (by "
"default)"
msgstr ""

#. Tag: para
#: Jms.xml:23
#, no-c-format
msgid "the EJB timer service (for EJB 3.0 environments)"
msgstr ""

#. Tag: para
#: Jms.xml:28
#, no-c-format
msgid "Quartz"
msgstr ""

#. Tag: para
#: Jms.xml:34
#, no-c-format
msgid ""
"This chapter first covers how to leverage Seam to simplify JMS and then "
"explains how to use the simpler asynchronous method and event facility."
msgstr ""

#. Tag: title
#: Jms.xml:40
#, no-c-format
msgid "Messaging in Seam"
msgstr ""

#. Tag: para
#: Jms.xml:42
#, no-c-format
msgid ""
"Seam makes it easy to send and receive JMS messages to and from Seam "
"components. Both the message publisher and the message receiver can be Seam "
"components."
msgstr ""

#. Tag: para
#: Jms.xml:48
#, no-c-format
msgid ""
"You'll first learn to setup a queue and topic message publisher and then "
"look at an example that illustrates how to perform the message exchange."
msgstr ""

#. Tag: title
#: Jms.xml:54
#, no-c-format
msgid "Configuration"
msgstr ""

#. Tag: para
#: Jms.xml:55
#, no-c-format
msgid ""
"To configure Seam's infrastructure for sending JMS messages, you need to "
"tell Seam about any topics and queues you want to send messages to, and also "
"tell Seam where to find the <literal>QueueConnectionFactory</literal> and/or "
"<literal>TopicConnectionFactory</literal>."
msgstr ""

#. Tag: para
#: Jms.xml:63
#, no-c-format
msgid ""
"Seam defaults to using <literal>UIL2ConnectionFactory</literal> which is the "
"usual connection factory for use with JBossMQ. If you are using some other "
"JMS provider, you need to set one or both of <literal>queueConnection."
"queueConnectionFactoryJndiName</literal> and <literal>topicConnection."
"topicConnectionFactoryJndiName</literal> in <literal>seam.properties</"
"literal>, <literal>web.xml</literal> or <literal>components.xml</literal>."
msgstr ""

#. Tag: para
#: Jms.xml:73
#, no-c-format
msgid ""
"You also need to list topics and queues in <literal>components.xml</literal> "
"to install Seam managed <literal>TopicPublisher</literal>s and "
"<literal>QueueSender</literal>s:"
msgstr ""

#. Tag: programlisting
#: Jms.xml:79
#, no-c-format
msgid ""
"<![CDATA[<jms:managed-topic-publisher name=\"stockTickerPublisher\" \n"
"                             auto-create=\"true\" \n"
"                             topic-jndi-name=\"topic/stockTickerTopic\"/>\n"
"\n"
"<jms:managed-queue-sender name=\"paymentQueueSender\" \n"
"                          auto-create=\"true\" \n"
"                          queue-jndi-name=\"queue/paymentQueue\"/>]]>"
msgstr ""

#. Tag: title
#: Jms.xml:84
#, no-c-format
msgid "Sending messages"
msgstr ""

#. Tag: para
#: Jms.xml:85
#, no-c-format
msgid ""
"Now, you can inject a JMS <literal>TopicPublisher</literal> and "
"<literal>TopicSession</literal> into any Seam component to publish an object "
"to a topic:"
msgstr ""

#. Tag: programlisting
#: Jms.xml:91
#, no-c-format
msgid ""
"<![CDATA[@Name(\"stockPriceChangeNotifier\")\n"
"public class StockPriceChangeNotifier\n"
"{\n"
"   @In private TopicPublisher stockTickerPublisher;   \n"
"\n"
"   @In private TopicSession topicSession;\n"
"\n"
"   public void publish(StockPrice price)\n"
"   {\n"
"        try\n"
"        {\n"
"           stockTickerPublisher.publish(topicSession.createObjectMessage"
"(price));\n"
"        } \n"
"        catch (Exception ex)\n"
"        {\n"
"           throw new RuntimeException(ex);\n"
"        } \n"
"   }\n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:93
#, no-c-format
msgid "or to a queue:"
msgstr ""

#. Tag: programlisting
#: Jms.xml:95
#, no-c-format
msgid ""
"<![CDATA[@Name(\"paymentDispatcher\")\n"
"public class PaymentDispatcher\n"
"{\n"
"   @In private QueueSender paymentQueueSender;   \n"
"    \n"
"   @In private QueueSession queueSession;\n"
"    \n"
"   public void publish(Payment payment)\n"
"   {\n"
"      try\n"
"      {\n"
"         paymentQueueSender.send(queueSession.createObjectMessage"
"(payment));\n"
"      } \n"
"      catch (Exception ex)\n"
"      {\n"
"         throw new RuntimeException(ex);\n"
"      } \n"
"   }\n"
"}]]>"
msgstr ""

#. Tag: title
#: Jms.xml:100
#, no-c-format
msgid "Receiving messages using a message-driven bean"
msgstr ""

#. Tag: para
#: Jms.xml:101
#, no-c-format
msgid ""
"You can process messages using any EJB 3 message-driven bean. The MDB can "
"even be a Seam component, in which case it's possible to inject other event- "
"and application- scoped Seam components. Here's an example of the payment "
"receiver, which delegates to a payment processor."
msgstr ""

#. Tag: para
#: Jms.xml:108
#, no-c-format
msgid ""
"You'll likely need to set the create attribute on the <literal>@In</literal> "
"annotation to true (i.e. create = true) to have Seam create an instance of "
"the component being injected. This isn't necessary if the component supports "
"auto-creation (e.g., it's annotated with <literal>@Autocreate</literal>)."
msgstr ""

#. Tag: para
#: Jms.xml:115
#, no-c-format
msgid "First, create an MDB to receive the message."
msgstr ""

#. Tag: programlisting
#: Jms.xml:119
#, no-c-format
msgid ""
"<![CDATA[@MessageDriven(activationConfig = {\n"
"    @ActivationConfigProperty(\n"
"        propertyName = \"destinationType\",\n"
"        propertyValue = \"javax.jms.Queue\"\n"
"    ),\n"
"    @ActivationConfigProperty(\n"
"        propertyName = \"destination\",\n"
"        propertyValue = \"queue/paymentQueue\"\n"
"    )\n"
"})\n"
"@Name(\"paymentReceiver\")\n"
"public class PaymentReceiver implements MessageListener\n"
"{\n"
"   @Logger private Log log;\n"
"\n"
"   @In(create = true) private PaymentProcessor paymentProcessor;\n"
"    \n"
"   @Override\n"
"   public void onMessage(Message message)\n"
"   {\n"
"      try\n"
"      {\n"
"         paymentProcessor.processPayment((Payment) ((ObjectMessage) message)."
"getObject());\n"
"      } \n"
"      catch (JMSException ex)\n"
"      {\n"
"         log.error(\"Message payload did not contain a Payment object\", "
"ex);\n"
"      } \n"
"   }\n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:121
#, no-c-format
msgid ""
"Then, implement the Seam component to which the receiver delegates "
"processing of the payment."
msgstr ""

#. Tag: programlisting
#: Jms.xml:125
#, no-c-format
msgid ""
"<![CDATA[@Name(\"paymentProcessor\")\n"
"public class PaymentProcessor\n"
"{\n"
"   @In private EntityManager entityManager;\n"
"\n"
"   public void processPayment(Payment payment)\n"
"   {\n"
"      // perhaps do something more fancy\n"
"      entityManager.persist(payment);\n"
"   }\n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:127
#, no-c-format
msgid ""
"If you are going to be performing transaction operations in your MDB, you "
"should ensure that you are working with an XA datasource. Otherwise, it "
"won't be possible to rollback database changes if the database transaction "
"commits and a subsequent operation being performed by the message fails."
msgstr ""

#. Tag: title
#: Jms.xml:136
#, no-c-format
msgid "Receiving messages in the client"
msgstr ""

#. Tag: para
#: Jms.xml:137
#, no-c-format
msgid ""
"Seam Remoting lets you subscribe to a JMS topic from client-side JavaScript. "
"This is described in <xref linkend=\"remoting\"/>."
msgstr ""

#. Tag: title
#: Jms.xml:146
#, no-c-format
msgid "Asynchronicity"
msgstr ""

#. Tag: para
#: Jms.xml:148
#, no-c-format
msgid ""
"Asynchronous events and method calls have the same quality of service "
"expectations as the underlying dispatcher mechanism. The default dispatcher, "
"based upon a <literal>ScheduledThreadPoolExecutor</literal> performs "
"efficiently but provides no support for persistent asynchronous tasks, and "
"hence no guarantee that a task will ever actually be executed. If you're "
"working in an environment that supports EJB 3.0, and add the following line "
"to <literal>components.xml</literal>:"
msgstr ""

#. Tag: programlisting
#: Jms.xml:157
#, no-c-format
msgid "<![CDATA[<async:timer-service-dispatcher/>]]>"
msgstr ""

#. Tag: para
#: Jms.xml:159
#, no-c-format
msgid ""
"then your asynchronous tasks will be processed by the container's EJB timer "
"service. If you're not familiar with the Timer service, don't worry, you "
"don't need to interact with it directly if you want to use asynchronous "
"methods in Seam. The important thing to know is that any good EJB 3.0 "
"implementation will have the option of using persistent timers, which gives "
"some guarantee that the tasks will eventually be processed."
msgstr ""

#. Tag: para
#: Jms.xml:167
#, no-c-format
msgid ""
"Another alternative is to use the open source Quartz library to manage "
"asynchronous method. You need to bundle the Quartz library JAR (found in the "
"<literal>lib</literal> directory) in your EAR and declare it as a Java "
"module in <literal>application.xml</literal>. The Quartz dispatcher may be "
"configured by adding a Quartz property file to the classpath. It must be "
"named <literal>seam.quartz.properties</literal>. In addition, you need to "
"add the following line to <literal>components.xml</literal> to install the "
"Quartz dispatcher."
msgstr ""

#. Tag: programlisting
#: Jms.xml:177
#, no-c-format
msgid "<![CDATA[<async:quartz-dispatcher/>]]>"
msgstr ""

#. Tag: para
#: Jms.xml:179
#, no-c-format
msgid ""
"The Seam API for the default <literal>ScheduledThreadPoolExecutor</literal>, "
"the EJB3 <literal>Timer</literal>, and the Quartz <literal>Scheduler</"
"literal> are largely the same. They can just \"plug and play\" by adding a "
"line to <literal>components.xml</literal>."
msgstr ""

#. Tag: title
#: Jms.xml:186
#, no-c-format
msgid "Asynchronous methods"
msgstr ""

#. Tag: para
#: Jms.xml:188
#, no-c-format
msgid ""
"In simplest form, an asynchronous call just lets a method call be processed "
"asynchronously (in a different thread) from the caller. We usually use an "
"asynchronous call when we want to return an immediate response to the "
"client, and let some expensive work be processed in the background. This "
"pattern works very well in applications which use AJAX, where the client can "
"automatically poll the server for the result of the work."
msgstr ""

#. Tag: para
#: Jms.xml:196
#, no-c-format
msgid ""
"For EJB components, we annotate the local interface to specify that a method "
"is processed asynchronously."
msgstr ""

#. Tag: programlisting
#: Jms.xml:201
#, no-c-format
msgid ""
"<![CDATA[@Local\n"
"public interface PaymentHandler\n"
"{\n"
"    @Asynchronous\n"
"    public void processPayment(Payment payment);\n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:203
#, no-c-format
msgid ""
"(For JavaBean components we can annotate the component implementation class "
"if we like.)"
msgstr ""

#. Tag: para
#: Jms.xml:207
#, no-c-format
msgid "The use of asynchronicity is transparent to the bean class:"
msgstr ""

#. Tag: programlisting
#: Jms.xml:211
#, no-c-format
msgid ""
"<![CDATA[@Stateless\n"
"@Name(\"paymentHandler\")\n"
"public class PaymentHandlerBean implements PaymentHandler\n"
"{\n"
"    public void processPayment(Payment payment)\n"
"    {\n"
"        //do some work!\n"
"    }\n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:213
#, no-c-format
msgid "And also transparent to the client:"
msgstr ""

#. Tag: programlisting
#: Jms.xml:217
#, no-c-format
msgid ""
"<![CDATA[@Stateful\n"
"@Name(\"paymentAction\")\n"
"public class CreatePaymentAction\n"
"{\n"
"    @In(create=true) PaymentHandler paymentHandler;\n"
"    @In Bill bill;\n"
"    \n"
"    public String pay()\n"
"    {\n"
"        paymentHandler.processPayment( new Payment(bill) );\n"
"        return \"success\";\n"
"    }\n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:219
#, no-c-format
msgid ""
"The asynchronous method is processed in a completely new event context and "
"does not have access to the session or conversation context state of the "
"caller. However, the business process context <emphasis>is</emphasis> "
"propagated."
msgstr ""

#. Tag: para
#: Jms.xml:225
#, no-c-format
msgid ""
"Asynchronous method calls may be scheduled for later execution using the "
"<literal>@Duration</literal>, <literal>@Expiration</literal> and "
"<literal>@IntervalDuration</literal> annotations."
msgstr ""

#. Tag: programlisting
#: Jms.xml:231
#, no-c-format
msgid ""
"<![CDATA[@Local\n"
"public interface PaymentHandler\n"
"{\n"
"    @Asynchronous\n"
"    public void processScheduledPayment(Payment payment, @Expiration Date "
"date);\n"
"\n"
"    @Asynchronous\n"
"    public void processRecurringPayment(Payment payment, \n"
"                                        @Expiration Date date, \n"
"                                        @IntervalDuration Long interval)'\n"
"}]]>"
msgstr ""

#. Tag: programlisting
#: Jms.xml:233
#, no-c-format
msgid ""
"<![CDATA[@Stateful\n"
"@Name(\"paymentAction\")\n"
"public class CreatePaymentAction\n"
"{\n"
"    @In(create=true) PaymentHandler paymentHandler;\n"
"    @In Bill bill;\n"
"    \n"
"    public String schedulePayment()\n"
"    {\n"
"        paymentHandler.processScheduledPayment( new Payment(bill), bill."
"getDueDate() );\n"
"        return \"success\";\n"
"    }\n"
"\n"
"    public String scheduleRecurringPayment()\n"
"    {\n"
"        paymentHandler.processRecurringPayment( new Payment(bill), bill."
"getDueDate(), \n"
"                                                ONE_MONTH );\n"
"        return \"success\";\n"
"    }\n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:235
#, no-c-format
msgid ""
"Both client and server may access the <literal>Timer</literal> object "
"associated with the invocation. The <literal>Timer</literal> object shown "
"below is the EJB3 timer when you use the EJB3 dispatcher. For the default "
"<literal>ScheduledThreadPoolExecutor</literal>, the returned object is "
"<literal>Future</literal> from the JDK. For the Quartz dispatcher, it "
"returns <literal>QuartzTriggerHandle</literal>, which we will discuss in the "
"next section."
msgstr ""

#. Tag: programlisting
#: Jms.xml:240
#, no-c-format
msgid ""
"<![CDATA[@Local\n"
"public interface PaymentHandler\n"
"{\n"
"    @Asynchronous\n"
"    public Timer processScheduledPayment(Payment payment, @Expiration Date "
"date);\n"
"}]]>"
msgstr ""

#. Tag: programlisting
#: Jms.xml:242
#, no-c-format
msgid ""
"<![CDATA[@Stateless\n"
"@Name(\"paymentHandler\")\n"
"public class PaymentHandlerBean implements PaymentHandler\n"
"{\n"
"    @In Timer timer;\n"
"    \n"
"    public Timer processScheduledPayment(Payment payment, @Expiration Date "
"date)\n"
"    {\n"
"        //do some work!\n"
"        \n"
"        return timer; //note that return value is completely ignored\n"
"    }\n"
"\n"
"}]]>"
msgstr ""

#. Tag: programlisting
#: Jms.xml:244
#, no-c-format
msgid ""
"<![CDATA[@Stateful\n"
"@Name(\"paymentAction\")\n"
"public class CreatePaymentAction\n"
"{\n"
"    @In(create=true) PaymentHandler paymentHandler;\n"
"    @In Bill bill;\n"
"    \n"
"    public String schedulePayment()\n"
"    {\n"
"        Timer timer = paymentHandler.processScheduledPayment( new Payment"
"(bill), \n"
"                                                              bill.getDueDate"
"() );\n"
"        return \"success\";\n"
"    }\n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:246
#, no-c-format
msgid "Asynchronous methods cannot return any other value to the caller."
msgstr ""

#. Tag: title
#: Jms.xml:253
#, no-c-format
msgid "Asynchronous methods with the Quartz Dispatcher"
msgstr ""

#. Tag: para
#: Jms.xml:255
#, no-c-format
msgid ""
"The Quartz dispatcher (see earlier on how to install it) allows you to use "
"the <literal>@Asynchronous</literal>, <literal>@Duration</literal>, "
"<literal>@Expiration</literal>, and <literal>@IntervalDuration</literal> "
"annotations as above. But it has some powerful additional features. The "
"Quartz dispatcher supports three new annotations."
msgstr ""

#. Tag: para
#: Jms.xml:259
#, no-c-format
msgid ""
"The <literal>@FinalExpiration</literal> annotation specifies an end date for "
"the recurring task. Note that you can inject the <code>QuartzTriggerHandle</"
"code>."
msgstr ""

#. Tag: programlisting
#: Jms.xml:261
#, no-c-format
msgid ""
"<![CDATA[\n"
"        @In QuartzTriggerHandle timer;\n"
"        \n"
"    // Defines the method in the \"processor\" component\n"
"    @Asynchronous\n"
"    public QuartzTriggerHandle schedulePayment(@Expiration Date when, \n"
"                                 @IntervalDuration Long interval,\n"
"                                 @FinalExpiration Date endDate, \n"
"                                 Payment payment) \n"
"    { \n"
"        // do the repeating or long running task until endDate\n"
"    }\n"
"    \n"
"    ... ...\n"
"    \n"
"    // Schedule the task in the business logic processing code\n"
"    // Starts now, repeats every hour, and ends on May 10th, 2010\n"
"    Calendar cal = Calendar.getInstance ();\n"
"    cal.set (2010, Calendar.MAY, 10);\n"
"    processor.schedulePayment(new Date(), 60*60*1000, cal.getTime(), "
"payment);\n"
"]]>"
msgstr ""

#. Tag: para
#: Jms.xml:263
#, no-c-format
msgid ""
"Note that the method returns the <literal>QuartzTriggerHandle</literal> "
"object, which you can use later to stop, pause, and resume the scheduler. "
"The <literal>QuartzTriggerHandle</literal> object is serializable, so you "
"can save it into the database if you need to keep it around for extended "
"period of time."
msgstr ""

#. Tag: programlisting
#: Jms.xml:265
#, no-c-format
msgid ""
"<![CDATA[QuartzTriggerHandle handle =\n"
"         processor.schedulePayment(payment.getPaymentDate(), \n"
"                                   payment.getPaymentCron(), \n"
"                                   payment);\n"
"        payment.setQuartzTriggerHandle( handle );\n"
"        // Save payment to DB\n"
"        \n"
"        // later ...\n"
"        \n"
"        // Retrieve payment from DB\n"
"        // Cancel the remaining scheduled tasks\n"
"        payment.getQuartzTriggerHandle().cancel();\n"
"]]>"
msgstr ""

#. Tag: para
#: Jms.xml:267
#, no-c-format
msgid ""
"The <literal>@IntervalCron</literal> annotation supports Unix cron job "
"syntax for task scheduling. For instance, the following asynchronous method "
"runs at 2:10pm and at 2:44pm every Wednesday in the month of March."
msgstr ""

#. Tag: programlisting
#: Jms.xml:270
#, no-c-format
msgid ""
"<![CDATA[\n"
"    // Define the method\n"
"    @Asynchronous\n"
"    public QuartzTriggerHandle schedulePayment(@Expiration Date when, \n"
"                                 @IntervalCron String cron, \n"
"                                 Payment payment) \n"
"    { \n"
"        // do the repeating or long running task\n"
"    }\n"
"    \n"
"    ... ...\n"
"    \n"
"    // Schedule the task in the business logic processing code\n"
"    QuartzTriggerHandle handle = \n"
"      processor.schedulePayment(new Date(), \"0 10,44 14 ? 3 WED\", "
"payment);\n"
"]]>"
msgstr ""

#. Tag: para
#: Jms.xml:272
#, no-c-format
msgid ""
"The <literal>@IntervalBusinessDay</literal> annotation supports invocation "
"on the \"nth Business Day\" scenario. For instance, the following "
"asynchronous method runs at 14:00 on the 2nd business day of each month. By "
"default, it excludes all weekends and US federal holidays until 2010 from "
"the business days."
msgstr ""

#. Tag: programlisting
#: Jms.xml:275
#, no-c-format
msgid ""
"<![CDATA[\n"
"    // Define the method\n"
"    @Asynchronous\n"
"    public QuartzTriggerHandle schedulePayment(@Expiration Date when, \n"
"                                 @IntervalBusinessDay NthBusinessDay nth, \n"
"                                 Payment payment) \n"
"    { \n"
"        // do the repeating or long running task\n"
"    }\n"
"    \n"
"    ... ...\n"
"    \n"
"    // Schedule the task in the business logic processing code\n"
"    QuartzTriggerHandle handle = \n"
"      processor.schedulePayment(new Date(), \n"
"          new NthBusinessDay(2, \"14:00\", WEEKLY), payment);\n"
"]]>"
msgstr ""

#. Tag: para
#: Jms.xml:277
#, no-c-format
msgid ""
"The <literal>NthBusinessDay</literal> object contains the configuration of "
"the invocation trigger. You can specify more holidays (e.g., company "
"holidays, non-US holidays etc.) via the <literal>additionalHolidays</"
"literal> property."
msgstr ""

#. Tag: programlisting
#: Jms.xml:279
#, no-c-format
msgid ""
"<![CDATA[\n"
"public class NthBusinessDay implements Serializable\n"
"{\n"
"      int n;\n"
"      String fireAtTime;\n"
"      List <Date> additionalHolidays;\n"
"      BusinessDayIntervalType interval;\n"
"      boolean excludeWeekends;\n"
"      boolean excludeUsFederalHolidays;\n"
"\n"
"      public enum BusinessDayIntervalType { WEEKLY, MONTHLY, YEARLY }\n"
"\n"
"      public NthBusinessDay ()\n"
"      {\n"
"        n = 1;\n"
"        fireAtTime = \"12:00\";\n"
"        additionalHolidays = new ArrayList <Date> ();\n"
"        interval = BusinessDayIntervalType.WEEKLY;\n"
"        excludeWeekends = true;\n"
"        excludeUsFederalHolidays = true;\n"
"      }     \n"
"      ... ...\n"
"}\n"
"]]>"
msgstr ""

#. Tag: para
#: Jms.xml:281
#, no-c-format
msgid ""
"The <literal>@IntervalDuration</literal>, <literal>@IntervalCron</literal>, "
"and <literal>@IntervalNthBusinessDay</literal> annotations are mutually "
"exclusive. If they are used in the same method, a <literal>RuntimeException</"
"literal> will be thrown."
msgstr ""

#. Tag: title
#: Jms.xml:286
#, no-c-format
msgid "Asynchronous events"
msgstr ""

#. Tag: para
#: Jms.xml:287
#, no-c-format
msgid ""
"Component-driven events may also be asynchronous. To raise an event for "
"asynchronous processing, simply call the <literal>raiseAsynchronousEvent()</"
"literal> method of the <literal>Events</literal> class. To schedule a timed "
"event, call the <literal>raiseTimedEvent()</literal> method, passing a "
"<emphasis>schedule</emphasis> object (for the default dispatcher or timer "
"service dispatcher, use <literal>TimerSchedule</literal>). Components may "
"observe asynchronous events in the usual way, but remember that only the "
"business process context is propagated to the asynchronous thread."
msgstr ""

#. Tag: title
#: Jms.xml:299
#, no-c-format
msgid "Handling exceptions from asynchronous calls"
msgstr ""

#. Tag: para
#: Jms.xml:301
#, no-c-format
msgid ""
"Each asynchronous dispatcher behaves differently when an exception "
"propagates through it. For example, the <literal>java.util.concurrent</"
"literal> dispatcher will suspend further executions of a call which repeats, "
"and the EJB3 timer service will swallow the exception. Seam therefore "
"catches any exception which propagates out of the asynchronous call before "
"it reaches the dispatcher."
msgstr ""

#. Tag: para
#: Jms.xml:311
#, no-c-format
msgid ""
"By default, any exception which propagates out from an asynchronous "
"execution will be caught and logged at error level. You can customize this "
"behavior globally by overriding the <literal>org.jboss.seam.async."
"asynchronousExceptionHandler</literal> component:"
msgstr ""

#. Tag: programlisting
#: Jms.xml:319
#, no-c-format
msgid ""
"<![CDATA[@Scope(ScopeType.STATELESS)\n"
"@Name(\"org.jboss.seam.async.asynchronousExceptionHandler\")\n"
"public class MyAsynchronousExceptionHandler extends "
"AsynchronousExceptionHandler { \n"
"\n"
"   @Logger Log log;\n"
"   \n"
"   @In Future timer;\n"
"   \n"
"   @Override\n"
"   public void handleException(Exception exception) {\n"
"      log.debug(exception);\n"
"      timer.cancel(false);\n"
"   }\n"
"   \n"
"}]]>"
msgstr ""

#. Tag: para
#: Jms.xml:321
#, no-c-format
msgid ""
"Here, for example, using <literal>java.util.concurrent</literal> dispatcher, "
"we inject its control object and cancel all future invocations when an "
"exception is encountered"
msgstr ""

#. Tag: para
#: Jms.xml:327
#, no-c-format
msgid ""
"You can also alter this behavior for an individual component by implementing "
"the method <literal>public void handleAsynchronousException(Exception "
"exception);</literal> on the component. For example:"
msgstr ""

#. Tag: programlisting
#: Jms.xml:334
#, no-c-format
msgid ""
"<![CDATA[   public void handleAsynchronousException(Exception exception) {\n"
"      log.fatal(exception);\n"
"   }]]>"
msgstr ""
