Posts Tagged J2EE

Limit number of concurrent MDB instances for JMS

For Stateless bean under Weblogic (weblogic-ejb-jar.xml):

<pool>
<max-beans-in-free-pool>1</max-beans-in-free-pool>
<initial-beans-in-free-pool>1</initial-beans-in-free-pool>
</pool>

For Stateful bean under Weblogic (weblogic-ejb-jar.xml):

<stateful-session-cache>
<max-beans-in-cache>1</max-beans-in-cache>
</stateful-session-cache>

For Entity bean under Weblogic (weblogic-ejb-jar.xml)
<pool>
<max-beans-in-free-pool>1</max-beans-in-free-pool>
<initial-beans-in-free-pool>1</initial-beans-in-free-pool>
</pool>

and instance cache size
<entity-cache>
<max-beans-in-cache>1</max-beans-in-cache>
</entity-cache>

Leave a Comment

WebLogic + JMS Example

Setting up JMS in WebLogic

  • Open the Weblogic Console Window:
    e.g. http://localhost:7001/console
  • Create a persistent JMS store for persistent messages:
    e.g. MyDomain > Services > JMS > Stores
  • Create a new JMS Server:
    e.g. MyDomain > Services > JMS > Servers
  • Create a new JMS Connection Factory:
    e.g. MyDomain > Services > JMS > Connection Factories
  • Create a new JMS Queue

Implement a Message-Driven-Bean (MDB)

  • Create new EJB Project in Eclipse

public class MyMessageBean implements MessageDrivenBean, MessageListener {
//
private Logger log = SystemLogger.getDebugLogger(MyMessageBean.class.getName());
//
private MessageDrivenContext messageContext;
//
public MyMessageBean() {
}
public void ejbRemove() throws EJBException {
messageContext = null;
}
public void setMessageDrivenContext(MessageDrivenContext messageContext)
throws EJBException {
this.messageContext = messageContext;
}
public void onMessage(Message message) {
// do what ever you want to do with the message
log.debug("Message Driven Bean got message: " + message);
}
public void ejbCreate() {
}
}

Add Message-Driven-Bean to Deployment Descriptors

  • ejb-jar.xml:


<enterprise-beans>

<message-driven>
<ejb-name>My</ejb-name>
<ejb-class>com.mydomain.ejb.MyMessageBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
</enterprise-beans>

<assembly-descriptor>

<container-transaction>
<method>
<ejb-name>My</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>

  • weblogic-ejb-jar.xml


<weblogic-enterprise-bean>
<ejb-name>My</ejb-name>
<message-driven-descriptor>
<destination-jndi-name>com.mydomain.jms.mydomainJmsQueue</destination-jndi-name>
</message-driven-descriptor>
<enable-call-by-reference>True</enable-call-by-reference>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>

Implement JMS Client
...
private void sendJms(String message) {
try {
Context ctx = new InitialContext();
QueueConnectionFactory connectionFactory = (QueueConnectionFactory)         ctx.lookup("com.mydomain.jms.mydomainJmsConnectionFactory");
QueueConnection qconn = connectionFactory.createQueueConnection();
QueueSession qsession = qconn.createQueueSession(false, QueueSession.DUPS_OK_ACKNOWLEDGE);
Queue queue = (Queue) ctx.lookup("com.mydomain.jms.mydomainJmsQueue");
//
QueueSender sender = qsession.createSender(queue);
Message msg = qsession.createTextMessage(message);
qconn.start();
sender.send(msg);
log.debug("JMS Message send...");
sender.close();
qsession.close();
qconn.close();
} catch (JMSException ex) {
SystemLogger.getExceptionLogger(1).error("JMSException during sending JMS message.",ex);
} catch (NamingException ex) {
SystemLogger.getExceptionLogger(1).error("NamingException during sending JMS message.",ex);
}
}

Leave a Comment

Eclipse + Tomcat 5.5 + JDBC + Oracle 9

Pre-Condition

Setup Tomcat Management User

To use the Tomcat Management tools, you must create a user with “admin” and “manager” roles. To do this, follow these steps:

  • Open the tomcat-users.xml file in the CATALINA_home/conf directory with a text editor.
  • In this file, add the following entries to create the “admin” and “manager” roles:
    <role rolename="manager"/>
    <role rolename="admin"/>
  • In addition, add the following entry to create the “admin” user:
    <user username="admin" password="admin" fullName="Administrator" roles="admin,manager"/>
  • Save and close the file

Add JDBC driver support to Tomcat

  • Download the latest JDBC Driver from Oracle (e.g. here)
  • Copy jar to $CATALINA_HOME/common/lib
  • Add a context.xml file to the Application’s META-INF directory:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
...
<Resource
name="jdbc/myoracle"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.OracleDriver"
username="<<myUsername>>"
password="<<myPassword>>"
url="jdbc:oracle:thin:@<<myOrcacleServer>>:<<myOrcaclePort>>:<<myOracleService>>"
maxWait="-1"
maxActive="20"
maxIdle="10"
validationQuery="SELECT 1+1 from dual"/>
...
</Context>

  • Add the resource-ref tag to the Application’s WEB-INF directory (not mandatory):


<resource-ref>
<description>Oracle Datasource</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

  • Add JDBC-Example code to Servlet-Example:

Context initContext;
try {
initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
DatabaseMetaData meta = conn.getMetaData();
response.getWriter().write("<html><body>");
response.getWriter().write("Driver Name : "+meta.getDriverName()+"<br/>");
response.getWriter().write("Driver Version : "+meta.getDriverVersion()+"<br/>");
Statement statement = conn.createStatement();
String query = "select * from LOGIN_USER";
//
ResultSet resultSet = statement.executeQuery(query);
//
while (resultSet.next()) {
response.getWriter().write(resultSet.getString(2)+"<br/>");
}
// close connection
conn.close();
conn = null;

Leave a Comment