Skip to content

Commit

Permalink
Merge pull request #88 from ayeshLK/local_development
Browse files Browse the repository at this point in the history
Add `commit` and `rollback` functionality to JMS session
  • Loading branch information
ayeshLK committed Aug 7, 2023
2 parents 754ca7e + 8671448 commit 0750c3d
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
14 changes: 14 additions & 0 deletions ballerina/session.bal
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,20 @@ public isolated client class Session {
return new MessageConsumer(self, consumerOptions);
}

# Commits all messages done in this transaction and releases any locks currently held.
#
# + return - `jms:Error` if there is an error or else nil
isolated remote function 'commit() returns Error? = @java:Method {
'class: "io.ballerina.stdlib.java.jms.JmsSession"
} external;

# Rolls back any messages done in this transaction and releases any locks currently held.
#
# + return - `jms:Error` if there is an error or else nil
isolated remote function 'rollback() returns Error? = @java:Method {
'class: "io.ballerina.stdlib.java.jms.JmsSession"
} external;

isolated function createJmsMessage(string messageType) returns handle|Error = @java:Method {
'class: "io.ballerina.stdlib.java.jms.JmsSession"
} external;
Expand Down
48 changes: 48 additions & 0 deletions native/src/main/java/io/ballerina/stdlib/java.jms/JmsSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,52 @@ public static Object createJmsMessage(BObject session, BString messageType) {
exception.getMessage())), cause, null);
}
}

/**
* Commits all messages done in this transaction and releases any locks currently held.
*
* @param session Ballerina session object
* @return {@link javax.jms.Message} or Ballerina `jms:Error` if the session is not using a local transaction or
* else the JMS provider fails to commit the transaction due to some internal error.
*/
public static Object commit(BObject session) {
Object nativeSession = session.getNativeData(NATIVE_SESSION);
if (Objects.isNull(nativeSession)) {
return ErrorCreator.createError(ModuleUtils.getModule(), JMS_ERROR,
StringUtils.fromString("Could not find the native JMS session"), null, null);
}
try {
((Session) nativeSession).commit();
} catch (JMSException exception) {
BError cause = ErrorCreator.createError(exception);
return ErrorCreator.createError(ModuleUtils.getModule(), JMS_ERROR,
StringUtils.fromString(String.format("Error while committing the JMS transaction: %s",
exception.getMessage())), cause, null);
}
return null;
}

/**
* Rolls back any messages done in this transaction and releases any locks currently held.
*
* @param session Ballerina session object
* @return {@link javax.jms.Message} or Ballerina `jms:Error` if the session is not using a local transaction or
* else the JMS provider fails to roll back the transaction due to some internal error.
*/
public static Object rollback(BObject session) {
Object nativeSession = session.getNativeData(NATIVE_SESSION);
if (Objects.isNull(nativeSession)) {
return ErrorCreator.createError(ModuleUtils.getModule(), JMS_ERROR,
StringUtils.fromString("Could not find the native JMS session"), null, null);
}
try {
((Session) nativeSession).rollback();
} catch (JMSException exception) {
BError cause = ErrorCreator.createError(exception);
return ErrorCreator.createError(ModuleUtils.getModule(), JMS_ERROR,
StringUtils.fromString(String.format("Error while rolling back the JMS transaction: %s",
exception.getMessage())), cause, null);
}
return null;
}
}

0 comments on commit 0750c3d

Please sign in to comment.