konveyor / kai

Konveyor AI - static code analysis driven migration to new targets via Generative AI
Apache License 2.0
25 stars 32 forks source link

Docs: Update README to reflect the correct output after running mock-client.py #158

Open savitharaghunathan opened 7 months ago

savitharaghunathan commented 7 months ago

We should update the first few sections of the sample output to match the current behavior, imo. Feel free to close this issue is a no-op.

Current output for running mock-client.py is

        $ python ./mock-client.py
        200
        {"feeling": "OK!", "recv": {"test": "object"}}
        200
        ## Reasoning

        1. In the Java EE code, we are using `@MessageDriven` annotation which is not supported in Quarkus. We need to replace it with a CDI scope annotation like `@ApplicationScoped`.
        2. The `HelloWorldMDB` class is a Message Driven Bean (MDB) that listens to messages on a specified queue and processes them.
        3. The MDB uses the `javax.jms.TextMessage` class to process the messages.
        4. The MDB is activated using the `@ActivationConfigProperty` annotation which specifies the destination type, destination, and acknowledge mode.
        5. To migrate this code to Quarkus, we need to replace the `@MessageDriven` annotation with `@ApplicationScoped` and use CDI for dependency injection.
        6. We also need to update the `onMessage` method to use the `@Incoming` and `Log` annotations provided by Quarkus.

        ## Updated File

        ```java
        // Update the `HelloWorldMDB` class to use CDI and Quarkus annotations
        @ApplicationScoped
        public class HelloWorldMDB {

            @Incoming("CMTQueue")
            public void onMessage(String msg) {
                Log.info("Received Message: " + msg);
            }
        }
        ```

        This updated file uses the `@ApplicationScoped` annotation to scope the MDB to the application and the `@Incoming` and `Log` annotations to process the messages and log them.
        input...

This is what I get with model - ibm-mistralai/mixtral-8x7b-instruct-v01-q

python ./mock-client.py 200 {"feeling": "OK!", "recv": {"test": "object"}} hello! lmao! 200 updated_file

@ApplicationScoped public class HelloWorldMDB {

@Incoming("CMTQueue")
public void onMessage(String msg) {
    Log.info("Received Message: " + msg);
}

}

total_reasoning, 1 items

  1. Replace the @MessageDriven annotation with a CDI scope annotation like @ApplicationScoped.
  2. Change every javax.jms.* to io.quarkus.jms.*.
  3. Change TextMessage to StringMessage for message type.
  4. Change logger to Log for logging.

used_prompts, 1 items

I will give you a JavaEE file for which I want to take one step towards migrating to Quarkus.

I will provide you with static source code analysis information highlighting an issue which needs to be addressed.

I will also provide you with an example of how a similar issue was solved in the past via a solved example.

You can refer to the solved example for a pattern of how to update the input Java EE file to Quarkus.

Fix only the problem described. Other problems will be solved in subsequent steps so it is unnecessary to handle them now.

Before attempting to migrate the code to Quarkus reason through what changes are required and why.

Pay attention to changes you make and impacts to external dependencies in the pom.xml as well as changes to imports we need to consider.

As you make changes that impact the pom.xml or imports, be sure you explain what needs to be updated.

After you have shared your step by step thinking, provide a full output of the updated file.

Input Information

Input File

File name: "the/file/under/consideration.java" Source file contents:

  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2015, Red Hat, Inc. and/or its affiliates, and individual
   * contributors by the @authors tag. See the copyright.txt in the
   * distribution for a full listing of individual contributors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * http://www.apache.org/licenses/LICENSE-2.0
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.jboss.as.quickstarts.cmt.mdb;

  import java.util.logging.Logger;

  import javax.ejb.ActivationConfigProperty;
  import javax.ejb.MessageDriven;
  import javax.jms.JMSException;
  import javax.jms.Message;
  import javax.jms.MessageListener;
  import javax.jms.TextMessage;

  /**
   * <p>
   * A simple Message Driven Bean that asynchronously receives and processes the messages that are sent to the queue.
   * </p>
   *
   * @author Serge Pagop (spagop@redhat.com)
   *
   */
  @MessageDriven(name = "HelloWorldMDB", activationConfig = {
      @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
      @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/CMTQueue"),
      @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
  public class HelloWorldMDB implements MessageListener {

      private static final Logger logManager = Logger.getLogger(HelloWorldMDB.class.toString());

      /**
       * @see MessageListener#onMessage(Message)
       */
      public void onMessage(Message receivedMessage) {
          TextMessage textMsg = null;
          try {
              if (receivedMessage instanceof TextMessage) {
                  textMsg = (TextMessage) receivedMessage;
                  logManager.info("Received Message: " + textMsg.getText());
              } else {
                  logManager.warning("Message of wrong type: " + receivedMessage.getClass().getName());
              }
          } catch (JMSException ex) {
              throw new RuntimeException(ex);
          }
      }
  }

Issues

Issue 1

Issue to fix: "Enterprise Java Beans (EJBs) are not supported in Quarkus. CDI must be used. Please replace the @MessageDriven annotation with a CDI scope annotation like @ApplicationScoped." Line number: 36 Solved example:

diff --git a/src/main/java/org/jboss/as/quickstarts/cmt/mdb/HelloWorldMDB.java b/src/main/java/org/jboss/as/quickstarts/cmt/mdb/HelloWorldMDB.java
index 2a80846..5165d25 100644
--- a/src/main/java/org/jboss/as/quickstarts/cmt/mdb/HelloWorldMDB.java
+++ b/src/main/java/org/jboss/as/quickstarts/cmt/mdb/HelloWorldMDB.java
@@ -16,14 +16,10 @@
  */
 package org.jboss.as.quickstarts.cmt.mdb;

-import java.util.logging.Logger;
+import org.eclipse.microprofile.reactive.messaging.Incoming;

-import javax.ejb.ActivationConfigProperty;
-import javax.ejb.MessageDriven;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.TextMessage;
+import io.quarkus.logging.Log;
+import jakarta.enterprise.context.ApplicationScoped;

 /**
  * <p>
@@ -33,28 +29,11 @@ import javax.jms.TextMessage;
  * @author Serge Pagop (spagop@redhat.com)
  *
  */
-@MessageDriven(name = "HelloWorldMDB", activationConfig = {
-    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
-    @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/CMTQueue"),
-    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
-public class HelloWorldMDB implements MessageListener {
+@ApplicationScoped
+public class HelloWorldMDB {

-    private static final Logger LOGGER = Logger.getLogger(HelloWorldMDB.class.toString());
-
-    /**
-     * @see MessageListener#onMessage(Message)
-     */
-    public void onMessage(Message rcvMessage) {
-        TextMessage msg = null;
-        try {
-            if (rcvMessage instanceof TextMessage) {
-                msg = (TextMessage) rcvMessage;
-                LOGGER.info("Received Message: " + msg.getText());
-            } else {
-                LOGGER.warning("Message of wrong type: " + rcvMessage.getClass().getName());
-            }
-        } catch (JMSException e) {
-            throw new RuntimeException(e);
-        }
+    @Incoming("CMTQueue")
+    public void onMessage(String msg) {
+        Log.info("Received Message: " + msg);
     }
 }

Issue 2

Issue to fix: "Please change every that you can to a punny name." Line number: -1

Output Instructions

Structure your output in Markdown format such as:

Reasoning

Write the step by step reasoning in this markdown section. If you are unsure of a step or reasoning, clearly state you are unsure and why.

Updated File

// Write the updated file for Quarkus in this section

Additional Information (optional)

If you have any additonal details or steps that need to be performed, put it here

jwmatthews commented 7 months ago

Do we want to continue to point folks to the mock-client.py or should we instead update README to use example/run_demo.py?