Skip to content

Commit bf4079a

Browse files
anpanigrANTARYAMI.PANIGRAHI@ORACLE.COM
andauthored
Cross Domain RMI communcation with Message Driven Bean (istio/non-istio) (#2356)
* Modified IstioCrossDomain class for domain1 creation * added mdb tests to istio usecase * re-configured the test order * check for message distribution Co-authored-by: ANTARYAMI.PANIGRAHI@ORACLE.COM <anpanigr@anpanigr-2.subnet1ad3phx.devweblogicphx.oraclevcn.com>
1 parent 7bb8493 commit bf4079a

File tree

17 files changed

+756
-107
lines changed

17 files changed

+756
-107
lines changed

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItCrossDomainTransaction.java

Lines changed: 165 additions & 40 deletions
Large diffs are not rendered by default.

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioCrossDomainTransaction.java

Lines changed: 159 additions & 37 deletions
Large diffs are not rendered by default.

integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/AppBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public boolean buildCoherence() {
109109
copyFolder(APP_DIR + "/" + item, ARCHIVE_SRC_DIR);
110110
}
111111
} catch (IOException ioe) {
112-
getLogger().info("Failed to get the directory " + ARCHIVE_DIR + " ready", ioe);
112+
getLogger().severe("Failed to get the directory " + ARCHIVE_DIR + " ready", ioe);
113113
return false;
114114
}
115115

@@ -245,7 +245,7 @@ public boolean archiveApp() {
245245
checkDirectory(appDir);
246246
for (String appSrcFile : srcFiles) {
247247
if (appSrcFile.length() > 0) {
248-
getLogger().info("copy {0]} to {1} ", appSrcFile, appDir);
248+
getLogger().info("copy {0} to {1} ", appSrcFile, appDir);
249249
String fileName = appSrcFile.substring(appSrcFile.lastIndexOf("/") + 1);
250250
Files.copy(Paths.get(appSrcFile), Paths.get(appDir + "/" + fileName),
251251
StandardCopyOption.REPLACE_EXISTING);

integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/primitive/Kubernetes.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2006,6 +2006,9 @@ public static V1Service getNamespacedService(String namespace, String serviceNam
20062006
* @return node port if service and channel is found, otherwise -1
20072007
*/
20082008
public static int getServiceNodePort(String namespace, String serviceName, String channelName) {
2009+
LoggingFacade logger = getLogger();
2010+
logger.info("Retrieving Service NodePort for service [{0}] in namespace [{1}] for channel [{2}]",
2011+
serviceName, namespace, channelName);
20092012
V1Service service = getNamespacedService(namespace, serviceName);
20102013
if (service != null) {
20112014
V1ServicePort port = service.getSpec().getPorts().stream().filter(

integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonTestUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2050,7 +2050,7 @@ public static String createImageAndVerify(String imageNameBase,
20502050
boolean buildCoherence = false;
20512051

20522052
for (String appSrcDir : appSrcDirList) {
2053-
if (appSrcDir.contains(".war") || appSrcDir.contains(".ear")) {
2053+
if (appSrcDir.contains(".war") || appSrcDir.contains(".ear") || appSrcDir.contains(".jar")) {
20542054
//remove from build
20552055
buildAppDirList.remove(appSrcDir);
20562056
archiveAppsList.add(appSrcDir);

integration-tests/src/test/resources/apps/cdtservlet/build.xml

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<property name="app" value="cdttxservlet" />
1616

1717
<path id="build.classpath">
18-
<pathelement path="${env.ORACLE_HOME}/wlserver/server/lib/weblogic.jar"/>
18+
<pathelement path="${env.ORACLE_HOME}/wlserver/server/lib/weblogic.jar"/>
1919
</path>
2020

2121
<target name="build">
@@ -24,15 +24,16 @@
2424
<mkdir dir="${builddir}" />
2525
<delete dir="${tempdir}" quiet="true" />
2626
<mkdir dir="${tempdir}" />
27-
<mkdir dir="${tempdir}/WEB-INF"/>
28-
<mkdir dir="${tempdir}/WEB-INF/classes"/>
2927
<javac debug="${javac.debug}" srcdir="src"
30-
destdir="${tempdir}/WEB-INF/classes">
28+
destdir="${tempdir}">
3129
<classpath refid="build.classpath"/>
3230
</javac>
33-
<copy file="descriptors/web.xml"
34-
tofile="${tempdir}/WEB-INF/web.xml"/>
35-
<jar destfile="${builddir}/${app}.war" basedir="${tempdir}" />
36-
<delete dir="${tempdir}" quiet="true" />
31+
32+
<war destfile="${builddir}/${app}.war" needxmlfile="no">
33+
<classes dir="${tempdir}"/>
34+
<zipfileset dir="src/application"
35+
includes="CdtTxServlet.java" prefix="src/application"/>
36+
</war>
37+
<delete dir="${tempdir}" quiet="true" />
3738
</target>
38-
</project>
39+
</project>

integration-tests/src/test/resources/apps/cdtservlet/descriptors/web.xml

Lines changed: 0 additions & 15 deletions
This file was deleted.

integration-tests/src/test/resources/apps/cdtservlet/src/application/CdtTxServlet.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,15 @@
2828
import weblogic.transaction.TransactionHelper;
2929
import weblogic.transaction.TransactionManager;
3030

31+
import javax.servlet.*;
32+
import javax.servlet.annotation.*;
33+
import javax.servlet.http.*;
34+
3135
import static java.lang.Thread.sleep;
3236

37+
@WebServlet(name="cdttxservlet", urlPatterns={"/cdttxservlet"},
38+
initParams={ @WebInitParam(name="simpleParam", value="paramValue") } )
39+
3340
public class CdtTxServlet extends HttpServlet {
3441
private static final long serialVersionUID = 1L;
3542
private TransactionManager tm = (TransactionManager)
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<!-- Copyright (c) 2021, Oracle and/or its affiliates.
2+
Licensed under the Universal Permissive License v 1.0 as shown at
3+
https://oss.oracle.com/licenses/upl.-->
4+
5+
<project name="jmsservlet" default="build">
6+
<description>
7+
ant script to build the jms servlet to send/receive message
8+
</description>
9+
10+
<dirname file="${ant.file.jmsservlet}" property="jmsservlet.dir" />
11+
12+
<property environment="env" />
13+
<property name="tempdir" location="temp" />
14+
<property name="builddir" location="build" />
15+
<property name="app" value="jmsservlet" />
16+
17+
<path id="build.classpath">
18+
<pathelement path="${env.ORACLE_HOME}/wlserver/server/lib/weblogic.jar"/>
19+
</path>
20+
21+
<target name="build">
22+
<delete dir="${builddir}" quiet="true" />
23+
<sleep seconds="2"/>
24+
<mkdir dir="${builddir}" />
25+
<delete dir="${tempdir}" quiet="true" />
26+
<mkdir dir="${tempdir}" />
27+
<javac debug="${javac.debug}" srcdir="src"
28+
destdir="${tempdir}">
29+
<classpath refid="build.classpath"/>
30+
</javac>
31+
<war destfile="${builddir}/${app}.war" needxmlfile="no">
32+
<classes dir="${tempdir}"/>
33+
<zipfileset dir="src/application"
34+
includes="JmsTestServlet.java" prefix="src/application"/>
35+
</war>
36+
<delete dir="${tempdir}" quiet="true" />
37+
</target>
38+
</project>
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
// Copyright (c) 2021, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
3+
4+
package application;
5+
6+
import java.io.IOException;
7+
import java.io.PrintWriter;
8+
import javax.servlet.ServletException;
9+
import javax.servlet.annotation.WebServlet;
10+
import javax.servlet.annotation.WebInitParam;
11+
import javax.servlet.http.HttpServletRequest;
12+
import javax.servlet.http.HttpServletResponse;
13+
import javax.servlet.http.HttpServlet;
14+
import java.text.SimpleDateFormat;
15+
import java.text.DateFormat;
16+
17+
import java.util.Hashtable;
18+
import javax.naming.Context;
19+
import javax.naming.InitialContext;
20+
import javax.naming.NamingException;
21+
22+
import javax.jms.ConnectionFactory;
23+
import javax.jms.Destination;
24+
import javax.jms.JMSConsumer;
25+
import javax.jms.JMSContext;
26+
import javax.jms.JMSException;
27+
import javax.jms.JMSProducer;
28+
import javax.jms.MessageConsumer;
29+
import javax.jms.JMSRuntimeException;
30+
import javax.jms.Message;
31+
32+
import javax.transaction.UserTransaction;
33+
import weblogic.transaction.TransactionHelper;
34+
35+
@WebServlet(name="JmsServlet", urlPatterns={"/jmstest"},
36+
initParams={ @WebInitParam(name="simpleParam", value="paramValue") } )
37+
38+
public class JmsServlet extends HttpServlet {
39+
40+
protected void doGet(HttpServletRequest request,
41+
HttpServletResponse response)
42+
throws ServletException, IOException {
43+
response.setContentType("text/plain");
44+
PrintWriter out = response.getWriter();
45+
String action = "";
46+
String destination = "";
47+
String cfactory = "weblogic.jms.ConnectionFactory";
48+
String url = "t3://localhost:7001";
49+
String host = "localhost";
50+
String port = "7001";
51+
int scount = 10;
52+
int rcount = 20;
53+
54+
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
55+
java.util.Date date = new java.util.Date();
56+
57+
try {
58+
59+
action = request.getParameter("action");
60+
out.println("Action ["+action+"]");
61+
62+
destination = request.getParameter("dest");
63+
out.println("Destination ["+destination+"]");
64+
65+
if (request.getParameter("host") != null )
66+
host = request.getParameter("host");
67+
68+
if (request.getParameter("port") != null )
69+
port = request.getParameter("port");
70+
71+
url = "t3://"+host+":"+port;
72+
73+
// Override if url parameter is provided
74+
if (request.getParameter("url") != null )
75+
url = request.getParameter("url");
76+
77+
out.println("Url ["+url+"]");
78+
79+
if (request.getParameter("cf") != null )
80+
cfactory = request.getParameter("cf");
81+
82+
out.println("ConnectionFactory ["+cfactory+"]");
83+
84+
if (request.getParameter("scount") != null )
85+
scount = Integer.parseInt(request.getParameter("scount"));
86+
87+
if (request.getParameter("rcount") != null )
88+
scount = Integer.parseInt(request.getParameter("rcount"));
89+
90+
Hashtable h = new Hashtable();
91+
h.put(Context.INITIAL_CONTEXT_FACTORY,
92+
"weblogic.jndi.WLInitialContextFactory");
93+
h.put(Context.PROVIDER_URL,url);
94+
h.put(Context.SECURITY_PRINCIPAL, "weblogic");
95+
h.put(Context.SECURITY_CREDENTIALS, "welcome1");
96+
Context cxt = null;
97+
cxt = new InitialContext(h);
98+
out.println("Got Initial Context from " + url);
99+
Destination d = (Destination)cxt.lookup(destination);
100+
out.println("Destination Lookup Successful ");
101+
ConnectionFactory qcf= (ConnectionFactory)cxt.lookup(cfactory);
102+
out.println("ConnectionFactory Lookup Successful");
103+
104+
JMSContext context = qcf.createContext();
105+
106+
if ( action.equals("send") ) {
107+
out.println("Sending ("+scount+") message to ["+destination+"]");
108+
String msg = "["+dateFormat.format(date)+"] Welcome to WebLogic Kubenates Operator";
109+
for ( int i=0; i<scount; i++)
110+
context.createProducer().send(d,msg);
111+
out.println("["+dateFormat.format(date)+"] Sent ("+scount+") message to ["+destination+"]");
112+
} else if ( action.equals("receive") ) {
113+
out.println("Receiving message from ["+destination+"]");
114+
Message msg=null;
115+
int count = 0;
116+
int s1count=0;
117+
int s2count=0;
118+
JMSConsumer consumer = (JMSConsumer) context.createConsumer(d);
119+
do {
120+
// msg = consumer.receiveNoWait();
121+
msg = consumer.receive(5000);
122+
if ( msg != null ) {
123+
// out.println("message content ["+msg.getBody(String.class)+"]");
124+
if (msg.getBody(String.class).contains("managed-server1"))
125+
s1count++;
126+
if (msg.getBody(String.class).contains("managed-server2"))
127+
s2count++;
128+
count++;
129+
}
130+
} while( msg != null);
131+
132+
out.println("Found ("+s1count+") message from [managed-server1]");
133+
out.println("Found ("+s2count+") message from [managed-server2]");
134+
135+
if ( count == rcount ) {
136+
out.println("Drained ("+count+") message from ["+destination+"]");
137+
138+
if ( s1count == s2count )
139+
out.println("Messages are distributed across MDB instances");
140+
else
141+
out.println("Messages are NOT distributed across MDB instances");
142+
143+
} else {
144+
out.println("Found ("+count+") message on ["+destination+"] instead of ["+rcount+"]");
145+
}
146+
}
147+
148+
} catch (Exception e) {
149+
out.println("Send/Receive FAILED with Unknown Exception " + e);
150+
e.printStackTrace();
151+
if (e instanceof JMSException)
152+
if (((JMSException)e).getLinkedException() != null)
153+
((JMSException)e).getLinkedException().printStackTrace();
154+
} finally {
155+
out.close();
156+
}
157+
158+
}
159+
160+
protected void doPost(HttpServletRequest request, HttpServletResponse response)
161+
throws ServletException, IOException {
162+
doGet(request,response);
163+
}
164+
}

0 commit comments

Comments
 (0)