How to use WebLogic 12c provided Maven Synchronization Plug-In ?

Hi,

Maven based development and deployment is the choice of most of the developers. WebLogic 12c has worked a lot on that direction.

Oracle Fusion Middleware 12c provides Maven Synchronization plug-in that simplifies the process of setting up repositories and completely eliminates the need to know what patches are installed in a particular environment.

Oracle homes in 12c contain maven directories which contain Maven Project Object Models (POMs) for artifacts provided by Oracle, archetypes for creating projects, and Maven plug-ins provided by Oracle, for executing various build operations.

WebLogic 12c (12.2.1.0) also provides “org.apache.maven_3.2.5” inside it, Which can be used to run Maven in your machines.

    export M2_HOME=/PATH/TO/wls1221/oracle_common/modules/org.apache.maven_3.2.5

As part of this example we will see how to install the Oracle Maven Synchronization Plug-In. Few things to remember while going through this article:

Point-1). The default maven local repository location is in the “${HOME}/.m2/repository” directory.

Point-2). For this demo we are using “Oracle WebLogic Server 12.2.1 (12c)” which can be downloaded from: http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-main-097127.html

Point-3). Even if WebLogic 12c provides it’s own Maven installation, we are using our own Maven Installation. Users can use any maven of their choice.

Setting up Classpath and Maven Environment.

Step-1). First of all we will set the environment variables and the ClassPath by running the “setWLSEnv.sh” script.

   $ cd /Users/jsensharma/NotBackedUp/Installed/wls1221/wlserver/server/bin

   $ ./setWLSEnv.sh 

   $ export MW_HOME=/Users/jsensharma/NotBackedUp/Installed/wls1221

If JAVA_HOME is not set then please set that as well in the same command prompt.
Deploy the plugin as following:

Installing Oracle Maven Synchronization plug-in in Local Maven Repo

Step-2). Before we start using the “Oracle Maven Synchronization Plug-In” we will need to install it in our local repository (default: “${HOME}/.m2/repository”) on your computer, or We can also deploy it into our shared internal repository. So Lets run the following command, Make sure to move to the below mentioned directory before running the command mentioned below:

   
   $ cd /Users/jsensharma/NotBackedUp/Installed/wls1221/oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.2.1
   
   $ mvn deploy:deploy-file -DpomFile=oracle-maven-sync-12.2.1.pom -Dfile=oracle-maven-sync-12.2.1.jar -Durl=file:///Users/jsensharma/.m2/repository
    .
    .
    . 
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ standalone-pom ---
Uploading: file:///Users/jsensharma/.m2/repository/com/oracle/maven/oracle-maven-sync/12.2.1-0-0/oracle-maven-sync-12.2.1-0-0.jar
Uploaded: file:///Users/jsensharma/.m2/repository/com/oracle/maven/oracle-maven-sync/12.2.1-0-0/oracle-maven-sync-12.2.1-0-0.jar (71 KB at 3509.6 KB/sec)
Uploading: file:///Users/jsensharma/.m2/repository/com/oracle/maven/oracle-maven-sync/12.2.1-0-0/oracle-maven-sync-12.2.1-0-0.pom
Uploaded: file:///Users/jsensharma/.m2/repository/com/oracle/maven/oracle-maven-sync/12.2.1-0-0/oracle-maven-sync-12.2.1-0-0.pom (9 KB at 8366.2 KB/sec)
Downloading: file:///Users/jsensharma/.m2/repository/com/oracle/maven/oracle-maven-sync/maven-metadata.xml
Uploading: file:///Users/jsensharma/.m2/repository/com/oracle/maven/oracle-maven-sync/maven-metadata.xml
Uploaded: file:///Users/jsensharma/.m2/repository/com/oracle/maven/oracle-maven-sync/maven-metadata.xml (355 B at 346.7 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.368 s
[INFO] Finished at: 2015-11-03T12:35:46+05:30
[INFO] Final Memory: 7M/245M
[INFO] ------------------------------------------------------------------------

Here the “/Users/jsensharma/.m2/repository” is my default local maven repository path.
NOTE: Please do not use “~” to define the “-Durl” else you mat encounter issues later.

Observation-1). If you will not define the “-Durl” parameter to define your local repository path here then you may get the following kind of error :

   $ mvn deploy:deploy-file -DpomFile=oracle-maven-sync-12.2.1.pom -Dfile=oracle-maven-sync-12.2.1.jar
   .
   .
   .
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ standalone-pom ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.318 s
[INFO] Finished at: 2015-11-02T13:59:15+05:30
[INFO] Final Memory: 6M/245M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file (default-cli) on project standalone-pom: The parameters 'url' for goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file are missing or invalid -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginParameterException

Running Oracle Maven Synchronization plug-in

Step-3). Now lets try to run the “Oracle Maven Synchronization plug-in” to see if everything is working fine or not.

  .
  .
  $ mvn help:describe -Dplugin=com.oracle.maven:oracle-maven-sync:12.2.1-0-0 -Ddetail  
  
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-help-plugin:2.2:describe (default-cli) @ standalone-pom ---
[INFO] com.oracle.maven:oracle-maven-sync:12.2.1-0-0

Name: Oracle Maven Synchronization Plugin
Description: Maven plugin to load a Maven repository with the contents of the
  Oracle Home directory
Group Id: com.oracle.maven
Artifact Id: oracle-maven-sync
Version: 12.2.1-0-0
Goal Prefix: oracle-sync

This plugin has 2 goals:

oracle-sync:help
  Description: Display help.
  Implementation: com.oracle.maven.sync.ODMHelp
  Language: java

  This mojo doesn't use any parameters.

oracle-sync:push
  Description: Install to the local repository and optionally deploy to a
    remote repository from the specified oracle home
    
    
    The plugin will use your current Maven settings to determine the path to
    the local repository and, optionally, a remote deployment repository. For
    details on how to configure Maven's repository settings, see the Maven
    settings reference: http://maven.apache.org/settings.html
    
    You can specify the parameters on the command line like this:
    -DserverId=archiva-internal -DdryRun=false -DfailOnError=false
    
    To override the localRepository target used by the plugin, you can specify
    the following option on the command-line:
    -Dmaven.local.repo=/alternate/path/to/repository
    
    To supply an alternate settings.xml for purposes of this operation, use the
    --settings option. For example:
    
     mvn --settings /alternate/path/settings.xml ... 
    ...or in your POM like this:
     <plugin>
         <groupId>com.oracle.maven</groupId>
         <artifactId>oracle-maven-sync</artifactId>
         <version>12.2.1-0-0</version>
         <configuration>
           <oracleHome>/home/mark/Oracle/Middleware</oracleHome>
           <failOnError>false</failOnError>
         </configuration>
       </plugin> 
  Implementation: com.oracle.maven.sync.ODMPushMojo
  Language: java

  Available parameters:

    dryRun (Default: false)
      User property: dryRun
      If set to 'true' this goal execution will only log push actions but will
      not actually make any changes.

    failOnError (Default: true)
      User property: failOnError
      If set to 'true' the plugin will stop and return an error immediately
      upon the first failure to deploy an artifact. Otherwise, the plugin will
      log the error and attempt to complete deployment of all other artifacts.

    localRepository (Default: ${localRepository})
      Provide an alternate local repository path to install pushed artifacts
      to.

    oracleHome
      User property: oracleHome
      Path to the Oracle home.
      Required.

    overwriteParent (Default: false)
      User property: overwriteParent
      If true, the plugin will overwrite POM artifacts with ancestry to
      oracle-common if they exist in the target repository. The default value
      of false will prevent automatic overwrite of customized POM contents. If
      any such POMs are encountered during plugin execution, an error will be
      thrown and handled according to the failOnError flag value. To carry over
      changes, save the existing POMs, run the push goal with
      overwriteParent=true and manually transfer the changes to the newly
      pushed POMs.

    pushDuplicates (Default: false)
      User property: pushDuplicates
      Push all duplicate locations. If multiple POMs with different Maven
      coordinates (GAV) are assigned to the same location path, the plugin will
      push them all to the destination repository if this flag is true.
      If the value is false, the push operation will fail. Set failOneError to
      false if you would like to skip all duplicates except the GAV in the set
      of duplicates that is encountered first.

    serverId
      User property: serverId
      This is the ID of the server (repository) in your settings.xml file -
      where you have specified the remote Maven repository and its
      authentication information. The plugin will only install to the local
      repository if this parameter is not set.


[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.880 s
[INFO] Finished at: 2015-11-03T12:43:43+05:30
[INFO] Final Memory: 9M/245M
[INFO] ------------------------------------------------------------------------

Observation-2). Just in case if you encounter the following error while running the above command, Then make sure that in the previous step while running the “mvn deploy:deploy-file” you specified the fully qualified PATH for the “-Durl”. (Do not use ~ character while defining the URL)

$ mvn help:describe -Dplugin=com.oracle.maven:oracle-maven-sync:12.2.1-0-0 -Ddetail  

.
.
$ mvn help:describe -Dplugin=com.oracle.maven:oracle-maven-sync:12.2.1-0-0 -Ddetail  
[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/com/oracle/maven/maven-metadata.xml
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-help-plugin:2.2:describe (default-cli) @ standalone-pom ---
Downloading: https://repo.maven.apache.org/maven2/com/oracle/maven/oracle-maven-sync/12.2.1-0-0/oracle-maven-sync-12.2.1-0-0.pom
[WARNING] The POM for com.oracle.maven:oracle-maven-sync:jar:12.2.1-0-0 is missing, no dependency information available
Downloading: https://repo.maven.apache.org/maven2/com/oracle/maven/oracle-maven-sync/12.2.1-0-0/oracle-maven-sync-12.2.1-0-0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.425 s
[INFO] Finished at: 2015-11-03T12:37:40+05:30
[INFO] Final Memory: 10M/245M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-help-plugin:2.2:describe (default-cli) on project standalone-pom: Plugin does not exist: Plugin could not be found, please check its coordinates for typos and ensure the required plugin repositories are defined in the POM
[ERROR] com.oracle.maven:oracle-maven-sync:maven-plugin:12.2.1-0-0
[ERROR] 
[ERROR] from the specified remote repositories:
[ERROR] central (https://repo.maven.apache.org/maven2, releases=true, snapshots=false)
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

NOTE:
It is always better to add the “pluginGroup” inside the “/Users/jsensharma/.m2/settings.xml” (${user.home}/.m2/settings.xml) file as following:

<?xml version="1.0" encoding="UTF-8"?> 
<settings xmlns="http://maven.apache.org/settings/1.0.0"  
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
  <pluginGroups> 
    <pluginGroup>com.oracle.maven</pluginGroup>
  </pluginGroups>  
</settings>

Populating the local repository

Now as the plugin is setup properly hence we will now go ahead and push the WebLogic JARs to the Maven repository. We will achieve it by using the “com.oracle.maven:oracle-maven-sync” command as following:


mvn com.oracle.maven:oracle-maven-sync:12.2.1-0-0:push -Doracle-maven-sync.oracleHome=/Users/jsensharma/NotBackedUp/Installed/wls1221 -DtestingOnly=false

Article is done here. Following part is just to simplify this whole above mentioned lengthy process. So i have written following kind of very simple shell script to automate these steps.
.
.
.
.
.

Simplified Shell Script to Do the Above

I have written the following kind of simple Shell script “weblogic_maven_sync.sh” which will make this whole task easy. Just make sure to set the Variables properly in this script.

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
echo "JAVA_HOME = $JAVA_HOME"
echo 
export M2_HOME=/Users/jsensharma/NotBackedUp/Support_Tools/apache_maven_3.2.3
echo "M2_HOME = $M2_HOME"
echo
export M2_REPO=/Users/jsensharma/.m2/repository
echo "M2_REPO=$M2_REPO"
echo
export MW_HOME=/Users/jsensharma/NotBackedUp/Installed/wls1221
echo "MW_HOME = $MW_HOME"
echo
export PATH=$JAVA_HOME/bin:/Users/jsensharma/NotBackedUp/Support_Tools/apache_maven_3.2.3/bin:$PATH:
echo "PATH = $PATH"

cd $MW_HOME//wlserver/server/bin
. ./setWLSEnv.sh

cd $MW_HOME/oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.2.1

mvn deploy:deploy-file -DpomFile=oracle-maven-sync-12.2.1.pom -Dfile=oracle-maven-sync-12.2.1.jar -Durl=file://${M2_REPO}

mvn help:describe -Dplugin=com.oracle.maven:oracle-maven-sync:12.2.1-0-0 -Ddetail  

mvn com.oracle.maven:oracle-maven-sync:12.2.1-0-0:push -Doracle-maven-sync.oracleHome=$MW_HOME -DtestingOnly=false

mvn archetype:crawl -Dcatalog=$HOME/.m2/archetype-catalog.xml

.
.

Known Issue

While running this script or while manually following these steps you might face the following error, which seems to be because of bad “org/apache/maven/doxia/doxia-sink-api/1.1/doxia-sink-api-1.1.pom” pom , Contact Apache regarding this:

[INFO] ------------------------------------------------------------------------
[INFO] ISSUE DETAILS:
[INFO] ------------------------------------------------------------------------
[INFO]  POM PARSE ERROR : 
[INFO]  ISSUE #1: /Users/jsensharma/NotBackedUp/Installed/wls1221/wlserver/../oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.2.1/~/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.1/doxia-sink-api-1.1.pom
   Failed to parse POM at "/Users/jsensharma/NotBackedUp/Installed/wls1221/wlserver/../oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.2.1/~/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.1/doxia-sink-api-1.1.pom".  Repository copy will not be performed for this artifact    POM /Users/jsensharma/NotBackedUp/Installed/wls1221/wlserver/../oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.2.1/~/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.1/doxia-sink-api-1.1.pom appears to be missing a necessary GAV component: G:A:V:P null:doxia-sink-api:null:jar
[INFO]    
[INFO] 
[INFO] IMPORTANT NOTE
[INFO] This operation may have added/updated archetypes in your repository.
[INFO] To update your archetype catalog, you should run:
[INFO] 'mvn archetype:crawl -Dcatalog=$HOME/.m2/archetype-catalog.xml'

.
.
Source Code
Please find this script in the MiddlewareMagicDemos Github repo.
https://github.com/jaysensharma/MiddlewareMagicDemos/tree/master/WebLogic/Maven/Maven_Synchronization_Plug-In
.
.
Regards
Jay SenSharma


Apache Camel based EJB Client accessing the EJBs deployed on WebLogic 12c

Hi,

In our last demo we have seen how to develop and deploy an EJB3.0 based application on WebLogic 12c and how to access those EJBs from a standalone java code. See the following for more details on this: http://middlewaremagic.com/weblogic/?p=8283

However as part of this example we will see how ti use Apache Camel’s “org.apache.camel.component.ejb.EjbComponent” in order to access an EJB deployed on WebLogic12c. In order to see more about the Apache Camel EJB Component, which binds EJBs to Camel message exchanges, please refer to : http://camel.apache.org/ejb.html

So lets begin with writing the EJB Project.

We are assuming that you have already developed and deployed your EJB on WebLogic 12c as described in the article: http://middlewaremagic.com/weblogic/?p=8283 Now we will continue from there and will try developing a simple apache camel based client.

Developing Camel Based EJB Client

Step-1). First of all lets make a directory “Apache_Camel_As_WebLogic_EJB_Client” We will place our client artifacts there.

   $ mkdir -p Apache_Camel_As_WebLogic_EJB_Client/src/main/java/ejb3
   $ mkdir -p Apache_Camel_As_WebLogic_EJB_Client/src/main/resources/META-INF/spring

Step-2). As we are assuming that you have already deployed your EJB application on WebLogic 12c. The client needs the EJB remote interface to invoke the EJBs. Hence we will use the “HelloRemote.java” EJB remote interface here. Create a file “HelloRemote.java” as following inside the “Apache_Camel_As_WebLogic_EJB_Client/src/main/java/ejb3” directory.

package ejb3;
import javax.ejb.*;
@Remote
public interface HelloRemote {
        public String sayHello(String name);
}

Step-3). Now we will create the XML based apache camel context route. In order to do that lets create a file “camel-context.xml” inside the “Apache_Camel_As_WebLogic_EJB_Client/src/main/resources/META-INF/spring” directory as following:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xmlns:p="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <p:properties id="jndiProperties">
        <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
        <prop key="java.naming.provider.url">t3://localhost:7001</prop>
        <!--
        <prop key="remote.connection.default.username">ejbuser</prop>
        <prop key="remote.connection.default.password">ejbuser@123</prop>
        -->
    </p:properties>


    <!-- setup Camel EJB component -->
    <bean id="ejbComponent" class="org.apache.camel.component.ejb.EjbComponent">
        <property name="properties" ref="jndiProperties"/>
    </bean>
    
    <camel:camelContext xmlns="http://camel.apache.org/schema/spring">
      <camel:route id="testCamelEJBClient">
            <camel:from uri="timer:foo?period=5000"/>
            <setBody>
                <simple>MiddlewareMagic!!!</simple>
            </setBody>
            <!-- NOTE: "java:global/TestApp/TestEJB/HelloBean!ejb3.HelloRemote" is the JNDI name of WLS 12c deployed EJB -->
            <camel:to uri="ejbComponent:java:global/TestApp/TestEJB/HelloBean!ejb3.HelloRemote?method=sayHello" />
            
            <camel:log message="[EJB Response] ===> ${body}" />
      </camel:route>
    </camel:camelContext>

</beans>

Step-4). Just in case if we want to provide your own logging configuration to DEBUG the camel code and its execution then we can add the following kind of “log4j.properties” file inside the “Apache_Camel_As_WebLogic_EJB_Client/src/main/resources” directory.

#
# The logging properties used
#
log4j.rootLogger=INFO, out
#log4j.logger.org.apache.camel=DEBUG
log4j.logger.org.springframework=INFO

# CONSOLE appender not used by default
log4j.appender.out=org.apache.log4j.ConsoleAppender
log4j.appender.out.layout=org.apache.log4j.PatternLayout
log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n

log4j.throwableRenderer=org.apache.log4j.EnhancedThrowableRenderer

Step-5). Now we will write the most important part which will make the whole project and will define how the execution will happen. Hence lets write the “pom.xml” file inside the “Apache_Camel_As_WebLogic_EJB_Client” location as following:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>middleware.magic</groupId>
  <artifactId>Apache_Camel_As_WebLogic12c_EJB_Client</artifactId>
  <packaging>jar</packaging>
  <version>1.0</version>
  <name>Apache Camel As WebLogic 12c Based EJB Client</name>
  <url>http://middlewaremagic.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <middleware.home>/Users/jsensharma/NotBackedUp/Installed/wls12130</middleware.home> <!-- CHANGE ME !!! -->
  </properties>

  <dependencies>   
       <!-- Needed to have access to WebLogic related class access like "weblogic.jndi.WLInitialContextFactory" -->
       <dependency>
        	<groupId>weblogic</groupId>
        	<artifactId>needed.jars</artifactId>
        	<version>1.0</version>
            <scope>system</scope>   
            <systemPath>${middleware.home}/wlserver/server/lib/wlthint3client.jar</systemPath>     	
       </dependency>  
             
       <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>2.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring</artifactId>
            <version>2.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xbean</groupId>
            <artifactId>xbean-spring</artifactId>
            <version>3.16</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
          <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
             <version>1.2.15</version>
             <exclusions>
                <exclusion>
                     <groupId>com.sun.jmx</groupId>
                     <artifactId>jmxri</artifactId>
                </exclusion>
                <exclusion>
                     <groupId>com.sun.jdmk</groupId>
                     <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                     <groupId>javax.jms</groupId>
                     <artifactId>jms</artifactId>
                </exclusion>
             </exclusions>
           </dependency>
           <dependency>
               <groupId>org.apache.camel</groupId>
               <artifactId>camel-ejb</artifactId>
               <version>2.15.0</version>
            </dependency>
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-api</artifactId>
                <version>6.0</version>
                <scope>provided</scope>
            </dependency>
   </dependencies>

   <pluginRepositories>
      <pluginRepository>
         <id>apache.snapshots</id>
         <name>Apache Development Snapshot Repository</name>
         <url>https://repository.apache.org/content/repositories/snapshots/</url>
         <releases>
            <enabled>false</enabled>
         </releases>
         <snapshots>
            <enabled>true</enabled>
         </snapshots>
      </pluginRepository>
   </pluginRepositories>

   <repositories>
      <repository>
         <id>apache.snapshots</id>
         <name>Apache Development Snapshot Repository</name>
         <url>https://repository.apache.org/content/repositories/snapshots/</url>
         <releases>
            <enabled>false</enabled>
         </releases>
         <snapshots>
            <enabled>true</enabled>
         </snapshots>
      </repository>
   </repositories>
   
  <build>
    <defaultGoal>install</defaultGoal>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>

      <!-- allows the route to be ran via 'mvn camel:run' -->
      <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-maven-plugin</artifactId>
        <version>2.15.4</version>
      </plugin>
    </plugins>
  </build>
</project>

Running the Camel Based EJB Client

Step-6). Now lets run the client code as following:

For Unix Based OS

$ export M2_HOME=/PATH/TO/apache_maven_3.2.3
$ export JAVA_HOME=/PATH/TO/jdk1.8.0_60
$ export PATH=$JAVA_HOME/bin:/PATH/TO/apache_maven_3.2.3/bin:$PATH
$ cd /PATH/TO/Apache_Camel_As_WebLogic_EJB_Client

For Windows Based OS

$ set M2_HOME=C:\PATH\TO\apache_maven_3.2.3
$ set JAVA_HOME=C:\PATH\TO\jdk1.8.0_60
$ set PATH=%JAVA_HOME%/bin;C:\PATH\TO\apache_maven_3.2.3\bin;%PATH%
$ cd C:\Apache_Camel_As_WebLogic_EJB_Client

Step-7). Once the environment is set then run the Apache Camel Based ejb client as following:

   $ mvn clean camel:run

.
.

Raw output of the client execution

$ mvn clean camel:run
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Apache Camel As WebLogic 12c Based EJB Client 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ Apache_Camel_As_WebLogic12c_EJB_Client ---
[INFO] 
[INFO] >>> camel-maven-plugin:2.15.4:run (default-cli) > test-compile @ Apache_Camel_As_WebLogic12c_EJB_Client >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Apache_Camel_As_WebLogic12c_EJB_Client ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5:compile (default-compile) @ Apache_Camel_As_WebLogic12c_EJB_Client ---
[INFO] Compiling 1 source file to /Apache_Camel_As_WebLogic_EJB_Client/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ Apache_Camel_As_WebLogic12c_EJB_Client ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Apache_Camel_As_WebLogic_EJB_Client/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5:testCompile (default-testCompile) @ Apache_Camel_As_WebLogic12c_EJB_Client ---
[INFO] No sources to compile
[INFO] 
[INFO] <<< camel-maven-plugin:2.15.4:run (default-cli) < test-compile @ Apache_Camel_As_WebLogic12c_EJB_Client <<<
[INFO] 
[INFO] --- camel-maven-plugin:2.15.4:run (default-cli) @ Apache_Camel_As_WebLogic12c_EJB_Client ---
[INFO] Using org.apache.camel.spring.Main to initiate a CamelContext
[INFO] Starting Camel ...
[pache.camel.spring.Main.main()] MainSupport                    INFO  Apache Camel 2.15.0 starting
[pache.camel.spring.Main.main()] ClassPathXmlApplicationContext INFO  Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@32ef2304: startup date [Sun Nov 01 21:48:40 IST 2015]; root of context hierarchy
[pache.camel.spring.Main.main()] XmlBeanDefinitionReader        INFO  Loading XML bean definitions from file [/Apache_Camel_As_WebLogic_EJB_Client/target/classes/META-INF/spring/camel-context.xml]
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Apache Camel 2.15.0 (CamelContext: camel-1) is starting
[pache.camel.spring.Main.main()] ManagedManagementStrategy      INFO  JMX is enabled
[pache.camel.spring.Main.main()] DefaultTypeConverter           INFO  Loaded 183 type converters
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as it may improve performance.
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Route: testCamelEJBClient started and consuming from: Endpoint[timer://foo?period=5000]
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Total 1 routes, of which 1 is started.
[pache.camel.spring.Main.main()] SpringCamelContext             INFO  Apache Camel 2.15.0 (CamelContext: camel-1) started in 0.751 seconds

[mel-1) thread #0 - timer://foo] testCamelEJBClient             INFO  [EJB Response] ===> [HelloBean] Says Hello, MiddlewareMagic!!!, Date: Sun Nov 01 21:48:44 IST 2015

[mel-1) thread #0 - timer://foo] testCamelEJBClient             INFO  [EJB Response] ===> [HelloBean] Says Hello, MiddlewareMagic!!!, Date: Sun Nov 01 21:48:49 IST 2015

[mel-1) thread #0 - timer://foo] testCamelEJBClient             INFO  [EJB Response] ===> [HelloBean] Says Hello, MiddlewareMagic!!!, Date: Sun Nov 01 21:48:54 IST 2015

[mel-1) thread #0 - timer://foo] testCamelEJBClient             INFO  [EJB Response] ===> [HelloBean] Says Hello, MiddlewareMagic!!!, Date: Sun Nov 01 21:48:59 IST 2015

Source Code:
The complete source code of this demo can be found at the following git repo:
https://github.com/jaysensharma/MiddlewareMagicDemos/tree/master/WebLogic/ApacheCamel/Apache_Camel_As_WebLogic_EJB_Client

.
.
Regards
Jay SenSharma


Writing WebLogic 12c based EJB 3.0 project and Standalone client using Maven Build

Hi,

As part of this demo we will see how to write a fully maven based WebLogic12c deployable application which will contain an EJB Project which we will deploy on WebLogic using the 12c specific maven plugin “wls-maven-plugin”. In the same sample we will use the “exec-maven-plugin” plugin as well to run our Remote Weblogic EJB Client code.

As part of this code was we will learn the following things:

1). Writing a simple EJB EAR project using Maven.
2). Deploying the EAR project on WebLogic 12c using “wls-maven-plugin”
3). Running a Simple EJB Client code with the help of “exec-maven-plugin”

So lets begin with writing the EJB Project.

Developing EJB Project

Step-1). First of all lets make a directory “WebLogic_EJB_Demo_Using_Maven” where we will keep both our “EJB_Project” and “EJB_Client_Project”.

    $ mkdir /WebLogic_EJB_Demo_Using_Maven
    $ mkdir -p /WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/src/main/application/META-INF
    $ mkdir -p /WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestEJB/src/main/java/ejb3

Step-2). Now we will write the “HelloRemote.java”, the remote interface of our Stateless EJB, Inside the “EJB_Project/TestEJB/src/main/java/ejb3”.

package ejb3;
import javax.ejb.*;
@Remote
public interface HelloRemote {
        public String sayHello(String name);
}

Step-3). Similarly we will write the Stateless Bean “HelloBean.java” inside the “EJB_Project/TestEJB/src/main/java/ejb3” as following

package ejb3;
import javax.ejb.*;
@Stateless
public class HelloBean implements HelloRemote {
        public String sayHello(String name) {
           System.out.println("\n\t hello("+name+") invoked, Hello HelloBean Date:  "+new java.util.Date());
           return "Hello, "+name+", Date: "+new java.util.Date();
        }
 }

Step-4). Now we will write the most important part. So lets create a maven build the file “pom.xml” inside the “/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestEJB” directory.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <parent>
        <groupId>middleware.magic</groupId>
        <artifactId>WebLogic12_EJB_Demo_With_Maven</artifactId>
        <version>1.0</version>
    </parent>

    <properties>
        <ear.app.name>TestApp</ear.app.name>
        <ejb.jar.name>TestEJB</ejb.jar.name>
    </properties>
    
    <modelVersion>4.0.0</modelVersion>
    <groupId>middleware.magic</groupId>
    <artifactId>TestEJB</artifactId>
    <version>1.0</version>
    <packaging>ejb</packaging>


    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.0</version>
        </dependency>
        <dependency>
        	<groupId>javax.ejb</groupId>
        	<artifactId>ejb-api</artifactId>
        	<version>3.0</version>
            <scope>provided</scope>        	
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-ejb-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <ejbVersion>3.0</ejbVersion>
                    <archive>
                        <manifest>
                            <useUniqueVersions>false</useUniqueVersions>
                            <addClasspath>false</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Step-5). Similarly we will write another “pom.xml” inside the “/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp” as following:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>middleware.magic</groupId>
        <artifactId>WebLogic12_EJB_Demo_With_Maven</artifactId>
        <version>1.0</version>
    </parent>

    <properties>
        <ear.app.name>TestApp</ear.app.name>
        <ejb.jar.name>TestEJB</ejb.jar.name>
    </properties>
    
    <groupId>middleware.magic</groupId>
    <artifactId>TestApp</artifactId>
    <name>${artifactId}</name>
    <version>1.0</version>
    <packaging>ear</packaging>

    <dependencies>
        <dependency>
            <groupId>middleware.magic</groupId>
            <artifactId>TestEJB</artifactId>
            <version>1.0</version>
            <type>ejb</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <applicationName>${artifactId}</applicationName>
                    <finalName>${ear.app.name}</finalName>
                    <version>6</version>
                    <defaultLibBundleDir>lib</defaultLibBundleDir>
                    <fileNameMapping>no-version</fileNameMapping>
                    <skinnyWars>true</skinnyWars>
                    <modules>
                        <ejbModule>
                            <groupId>middleware.magic</groupId>
                            <artifactId>${ejb.jar.name}</artifactId>
                        </ejbModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Step-6). So far we have written the child project pom.xml, Now lets write the main “pom.xml” file inside the “/WebLogic_EJB_Demo_Using_Maven/EJB_Project” as following:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>middleware.magic</groupId>
    <artifactId>WebLogic12_EJB_Demo_With_Maven</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
        <middleware.home>/PATH/TO/Installed/wls12130</middleware.home>  <!— CHANGE ME!!! —>
   	<admin.server.url>t3://localhost:7001</admin.server.url>  <!— CHANGE ME!!! —>
        <admin.username>weblogic</admin.username>                 <!— CHANGE ME!!! —>
        <admin.password>weblogic1</admin.password>                <!— CHANGE ME!!! —>
        <ear.app.name>TestApp</ear.app.name>                      
        <ejb.jar.name>TestEJB</ejb.jar.name>                       
    </properties>
    
    <modules>
        <module>${ejb.jar.name}</module>
        <module>${ear.app.name}</module>
    </modules>
    
    
    <dependencies>
      <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
      </dependency>
    </dependencies>
  
  
    <build>
         <plugins>
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>2.3.2</version>
               <configuration>
                  <source>1.7</source>
                  <target>1.7</target>
               </configuration>
            </plugin>

            <plugin>
               <groupId>com.oracle.weblogic</groupId> 
               <artifactId>wls-maven-plugin</artifactId> 
               <version>12.1.3.0</version> 
               <configuration> 
                 <middlewareHome>${middleware.home}</middlewareHome>
                 <adminurl>${admin.server.url}</adminurl>
                 <user>${admin.username}</user>
                 <password>${admin.password}</password>
                 <name>${ear.app.name}</name>
                 <source>${ear.app.name}/target/${ear.app.name}.ear</source>          
               </configuration> 
            </plugin>  
         </plugins>
     </build>
     
</project>

Step-7). Now lets start the WebLogic server and then deploy the EJB project. In order to deploy the EJB Project, Open a terminal and then run the following commands. The Maven plugin will build the EAR containing the EJB as well as it will deploy it to WebLogic server.

For Unix Based OS

$ export M2_HOME=/PATH/TO/apache_maven_3.2.3
$ export JAVA_HOME=/PATH/TO/jdk1.8.0_60
$ export PATH=$JAVA_HOME/bin:/PATH/TO/apache_maven_3.2.3/bin:$PATH

$ cd /WebLogic_EJB_Demo_Using_Maven/EJB_Project
$ mvn clean install wls:deploy 

For Windows Based OS

$ set M2_HOME=C:\PATH\TO\apache_maven_3.2.3
$ set JAVA_HOME=C:\PATH\TO\jdk1.8.0_60
$ set PATH=%JAVA_HOME%/bin;C:\PATH\TO\apache_maven_3.2.3\bin;%PATH%

$ cd C:\WebLogic_EJB_Demo_Using_Maven\EJB_Project
$ mvn clean install wls:deploy 

In case if you face any error / exception while running the WebLogic 12c Maven plugin “wls-maven-plugin” then please refer to the article:
http://middlewaremagic.com/weblogic/?p=8217

RAW Output of EJB Project Build and Deployment

$ mvn clean install wls:deploy
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for middleware.magic:TestApp:ear:1.0
[WARNING] The expression ${artifactId} is deprecated. Please use ${project.artifactId} instead.
[WARNING] The expression ${artifactId} is deprecated. Please use ${project.artifactId} instead.
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] WebLogic12_EJB_Demo_With_Maven
[INFO] TestEJB
[INFO] TestApp
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building WebLogic12_EJB_Demo_With_Maven 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ WebLogic12_EJB_Demo_With_Maven ---
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ WebLogic12_EJB_Demo_With_Maven ---
[INFO] Installing /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/pom.xml to /Users/jsensharma/.m2/repository/middleware/magic/WebLogic12_EJB_Demo_With_Maven/1.0/WebLogic12_EJB_Demo_With_Maven-1.0.pom
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building TestEJB 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TestEJB ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TestEJB ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestEJB/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ TestEJB ---
[INFO] Compiling 2 source files to /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestEJB/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ TestEJB ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestEJB/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ TestEJB ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ TestEJB ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-ejb-plugin:2.3:ejb (default-ejb) @ TestEJB ---
[INFO] Building EJB TestEJB-1.0 with EJB version 3.0
[INFO] Building jar: /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestEJB/target/TestEJB-1.0.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ TestEJB ---
[INFO] Installing /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestEJB/target/TestEJB-1.0.jar to /Users/jsensharma/.m2/repository/middleware/magic/TestEJB/1.0/TestEJB-1.0.jar
[INFO] Installing /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestEJB/pom.xml to /Users/jsensharma/.m2/repository/middleware/magic/TestEJB/1.0/TestEJB-1.0.pom
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building TestApp 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TestApp ---
[INFO] Deleting /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/target
[INFO] 
[INFO] --- maven-ear-plugin:2.9:generate-application-xml (default-generate-application-xml) @ TestApp ---
[INFO] Generating application.xml
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ TestApp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/src/main/resources
[INFO] 
[INFO] --- maven-ear-plugin:2.9:ear (default-ear) @ TestApp ---
[INFO] Copying artifact [ejb:middleware.magic:TestEJB:1.0] to [TestEJB.jar]
[INFO] Building zip: /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/target/TestApp-1.0/TestEJB.jar
[INFO] Copying artifact [jar:org.slf4j:slf4j-api:1.7.0] to [lib/slf4j-api.jar]
[INFO] Copy ear sources to /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/target/TestApp-1.0
[INFO] Could not find manifest file: /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/target/TestApp-1.0/META-INF/MANIFEST.MF - Generating one
[INFO] Building jar: /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/target/TestApp.ear
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ TestApp ---
[INFO] Installing /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/target/TestApp.ear to /Users/jsensharma/.m2/repository/middleware/magic/TestApp/1.0/TestApp-1.0.ear
[INFO] Installing /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/pom.xml to /Users/jsensharma/.m2/repository/middleware/magic/TestApp/1.0/TestApp-1.0.pom
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building WebLogic12_EJB_Demo_With_Maven 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- wls-maven-plugin:12.1.3.0:deploy (default-cli) @ WebLogic12_EJB_Demo_With_Maven ---
[INFO] ++====================================================================++
[INFO] ++  wls-maven-plugin: deploy                                          ++
[INFO] ++====================================================================++
weblogic.Deployer invoked with options:  -noexit -adminurl t3://localhost:7001 -user weblogic -deploy -name TestApp -source TestApp/target/TestApp.ear
<Oct 29, 2015 11:02:23 PM IST> <Info> <J2EE Deployment SPI> <BEA-260121> <Initiating deploy operation for application, TestApp [archive: /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Project/TestApp/target/TestApp.ear], to configured targets.> 
Task 0 initiated: [Deployer:149026]deploy application TestApp on myserver.
Task 0 completed: [Deployer:149026]deploy application TestApp on myserver.
Target state: deploy completed on Server myserver

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] WebLogic12_EJB_Demo_With_Maven ..................... SUCCESS [  2.781 s]
[INFO] TestEJB ............................................ SUCCESS [  0.824 s]
[INFO] TestApp ............................................ SUCCESS [  0.327 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.298 s
[INFO] Finished at: 2015-10-29T23:02:24+05:30
[INFO] Final Memory: 19M/310M
[INFO] ------------------------------------------------------------------------

Writing WebLogic EJB Client Code

Step-8). Now lets start writing the client project. So first of all lets make the following directories:

$ mkdir -p /WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/src/main/java/ejb3
$ mkdir -p /WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/src/main/java/client
$ mkdir -p /WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/src/main/resources

Step-9). Now lets first place the above created “HelloRemote.java” inside the “/WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/src/main/java/ejb3” directory so that the client can use it.

package ejb3;
import javax.ejb.*;
@Remote
public interface HelloRemote {
        public String sayHello(String name);
}

Step-10). Now the main step of writing the EJB Client. So lets create a file “WebLogicEJBClient.java” inside the “/WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/src/main/java/client” as following:

package client;
import javax.naming.*;
import java.util.*;
import ejb3.HelloRemote;

public class WebLogicEJBClient {
  public static void main(String ar[]) throws Exception {
    Context context = null;
	try {
          Properties props = new Properties();
          props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
          props.put(Context.PROVIDER_URL, "t3://localhost:7001"); 
          //props.put(Context.SECURITY_PRINCIPAL, "ejbUserOne");
          //props.put(Context.SECURITY_CREDENTIALS, "ejbPasswordOne@123");
          context = new InitialContext(props);	
          
          System.out.println("\n\n****************************************");
	      System.out.println("\n\t[WebLogicEJBClient] Got initial Context: "+context);	

          String EJB_JNDI_NAME="java:global/TestApp/TestEJB/HelloBean!ejb3.HelloRemote";
          
          HelloRemote remote = (HelloRemote) context.lookup(EJB_JNDI_NAME);
          String result = remote.sayHello("MiddlewareMagic!!!");
          System.out.println("\n\t[WebLogicEJBClient] Got response from EJB : " + result);
          System.out.println("\n****************************************\n\n");
          
     } catch(Exception e) {
			e.printStackTrace();
     }     
   }
}

Step-11). Now lets run the EJB Client code as following:

For Unix Based OS

$ export M2_HOME=/PATH/TO/apache_maven_3.2.3
$ export JAVA_HOME=/PATH/TO/jdk1.8.0_60
$ export PATH=$JAVA_HOME/bin:/PATH/TO/apache_maven_3.2.3/bin:$PATH

$ cd /WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project

$ mvn clean install exec:exec

For Windows Based OS

$ set M2_HOME=C:\PATH\TO\apache_maven_3.2.3
$ set JAVA_HOME=C:\PATH\TO\jdk1.8.0_60
$ set PATH=%JAVA_HOME%/bin;C:\PATH\TO\apache_maven_3.2.3\bin;%PATH%

$ cd C:\WebLogic_EJB_Demo_Using_Maven\EJB_Client_Project

$ mvn clean install exec:exec

RAW Output of Client Code Execution:


$ mvn clean install exec:exec



[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building WebLogic12_EJB_Client 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ WebLogic12_EJB_Client ---
[INFO] Deleting /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ WebLogic12_EJB_Client ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ WebLogic12_EJB_Client ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 2 source files to /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ WebLogic12_EJB_Client ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ WebLogic12_EJB_Client ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ WebLogic12_EJB_Client ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ WebLogic12_EJB_Client ---
[INFO] Building jar: /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/target/WebLogic12_EJB_Client-1.0.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ WebLogic12_EJB_Client ---
[INFO] Installing /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/target/WebLogic12_EJB_Client-1.0.jar to /Users/jsensharma/.m2/repository/middleware/magic/WebLogic12_EJB_Client/1.0/WebLogic12_EJB_Client-1.0.jar
[INFO] Installing /Users/jsensharma/NotBackedUp/MM_Tests/WLS/FINAL_EJB_CAMEL/WebLogic_EJB_Demo_Using_Maven/EJB_Client_Project/pom.xml to /Users/jsensharma/.m2/repository/middleware/magic/WebLogic12_EJB_Client/1.0/WebLogic12_EJB_Client-1.0.pom
[INFO] 
[INFO] --- exec-maven-plugin:1.4.0:exec (default-cli) @ WebLogic12_EJB_Client ---


****************************************

	[WebLogicEJBClient] Got initial Context: javax.naming.InitialContext@1889f191

	[WebLogicEJBClient] Got response from EJB : Hello, MiddlewareMagic!!!, Date: Thu Oct 29 23:02:44 IST 2015

****************************************


[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.231 s
[INFO] Finished at: 2015-10-29T23:02:45+05:30
[INFO] Final Memory: 14M/245M
[INFO] ------------------------------------------------------------------------

Source Code:
The complete source code of this demo can be found at the following git repo:
https://github.com/jaysensharma/MiddlewareMagicDemos/tree/master/WebLogic/EJB/WebLogic_EJB_Demo_Using_Maven
.
.
Regards
Jay SenSharma


Copyright © 2010-2012 Middleware Magic. All rights reserved. |