cancel
Showing results for 
Search instead for 
Did you mean: 

JCR-RMI beginnings....

euleon
Champ in-the-making
Champ in-the-making
Hello:

I've trying to understand the RMI API that is in extension-jcr-rmi-1.0.0-src.zip in order to use it to develop a layer for my Company.
I've installed it successfully. I've also added and configured properly this module (in order to solve the issue commented in the forum):extension-jcr-thread-bound-1.1.jar

I've run the test called jcrRmiTest.jsp and it works. So, I've tried to make a small program following the example in jcrRmiTest.jsp and using ECLIPSE to develop and run it.
My environment is:
a Virtual Machine with DEBIAN where Alfresco is installed. There, I run the RMIREGISTRY.  I work from my localhost and try to connect to ALFRESCO using RMI, and I get this exception when trying to login:

unexpected exception encountered [org.apache.jackrabbit.rmi.client.RemoteRepositoryException: Connection refused to host: 127.0.1.1; nested exception is:
   java.net.ConnectException: Connection refused: connect: Connection refused to host: 127.0.1.1; nested exception is:
   java.net.ConnectException: Connection refused: connect]


I've checked that in the file: authority-services-context.xml is the user admin admin.
I've tried also to change the famous RMI port to 50502 on alfresco-shared.properties and that's even worst because it doesn't bind….

Any suggestion?
Your help is much appreciated.

This is the source code:


import java.rmi.Naming;

import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import org.apache.jackrabbit.rmi.client.ClientAdapterFactory;
import org.apache.jackrabbit.rmi.client.LocalAdapterFactory;
import org.apache.jackrabbit.rmi.remote.RemoteRepository;
public class Connection {

   public static void main(String[] pArgs)
   {
      /* define locals */
      String vRmiRegistryLocation = null;
      Object vRemoteObjectReference = null;
      Repository vJcrRepository = null;
      LocalAdapterFactory vLocalAdapterFactory = null;
      Session vJcrSession = null;
      Node vJcrNode = null;
      String vRmiServerName = null;
      String vRmiServerPort = null;
      String vRmiBindingName = null;

      /* initialize */
      vLocalAdapterFactory = new ClientAdapterFactory();

      try
      {
         /* get command line arguments for connection parameters */
         vRmiServerName = "192.168.1.102";
         vRmiServerPort = "1099";
         vRmiBindingName = "javaContentRepository";

            vRmiRegistryLocation  = "//"+vRmiServerName;
            vRmiRegistryLocation += ":"+vRmiServerPort;
            vRmiRegistryLocation += "/"+vRmiBindingName;

         System.out.println("looking up remote reference at ["+vRmiRegistryLocation+"]");
         System.out.println("**"+Naming.list("//"+vRmiServerName+ ":"+vRmiServerPort)+"**");
         vRemoteObjectReference = Naming.lookup(vRmiRegistryLocation);
         System.out.println("creating local adapter for remotereference ["+vRemoteObjectReference+"]");
         vJcrRepository = vLocalAdapterFactory.getRepository((RemoteRepository)vRemoteObjectReference);

         System.out.println("[" +vJcrRepository.toString()+ "]");
         System.out.println("logging in as admin admin to default workspace");//here appears the exception…
         vJcrSession = vJcrRepository.login(new SimpleCredentials("admin", "admin".toCharArray()));

         System.out.println("looking up workspace root node");
         vJcrNode = vJcrSession.getRootNode();
         System.out.println("root node name["+vJcrNode.getName()+"]");
      }
      catch(Exception eTestFailure)
      {
         System.out.println("unexpected exception encountered ["+eTestFailure+"]");
      }
   }
}
3 REPLIES 3

mrogers
Star Contributor
Star Contributor
The address 127.0.1.1 is diagnostic and you will find postings on this forum and the web discussing this Linux/RMI "feature".   

Try the following to your java command line or eclipse environment where x.x.x.x is your IP address.
-Djava.rmi.server.hostname=x.x.x.x

Other similar threads have pointed out that on Linux the localhost entry in /etc/hosts may need to be changed to the ip address of your machine. 
And also check that you don't have a firewall blocking access to the necessary ports.

If you continue to have problems then please also specify which version of Alfresco you are using.

euleon
Champ in-the-making
Champ in-the-making
Hello, and thank you!

I've tried to change in /etc/hosts the alias localhost=127.0.0.1 with x.x.x.x (my server IP)

It was a disaster!It doesn't bind
So, now I'll try to add the option -Djava.rmi.server.hostname=x.x.x.x to the JVM of the server. Is that right? I mean: Do I have to add that line in the client's JVM or in the server's JVM?

If is in the server side where I have to add it, as the JVM is called from TOMCAT where must I place this property?
Thank You

euleon
Champ in-the-making
Champ in-the-making
Finally I've found the solution:

What I had to do is to tell TOMCAT how to start the JVM telling that the IP associated to RMIREGISTRY were the server's IP. In my case, the ip is: 192.168.1.102

So, the option I had to add was: -Djava.rmi.server.hostname=192.168.1.102.
Where did I add this line? in the file catalina.sh that is located in $TOMCAT_INTALL_DIR/bin. There is a variable called JAVA_OPTS. The first time you find it in the file, is the right place to add this flag. This is the correct way:
JAVA_OPTS="$JAVA_OPTS "-Djava.rmi.server.hostname=192.168.1.102""
It's really important NOT TO FORGET THE LAST ". If you forget it, the variable won't be initialized with that option.

As help I post you my catalina.sh file. Every few lines you'll find comments like *********************string**************************
or ++++++++++++++++++++string+++++++++++++++++++++. Those are all the places in the file where catalina uses the JAVA_OPTS variable.
You'll see also that there is a BUG DUMP file called luis (that is created in the root directory as "/luis")that will help you to know which part of the script is executed.

Don't forget to reboot TOMCAT!

I hope you help this!

BR.

Euleon




W#!/bin/sh
# —————————————————————————–
# Start/Stop Script for the CATALINA Server
#
# Environment Variable Prequisites
#
#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.
#
#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   or "run" command is executed.
#
#   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
#                   the JVM should use (java.io.tmpdir).  Defaults to
#                   $CATALINA_BASE/temp.
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" or "javac" argument.
#
#   JRE_HOME        Must point at your Java Development Kit installation.
#                   Defaults to JAVA_HOME if empty.
#
JAVA_OPTS       (Optional) Java runtime options used when the "start",
#                   "stop", or "run" command is executed.
#
#   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
#                   command is executed. The default is "dt_socket".
#
#   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. The default is 8000.
#
#   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. Specifies whether JVM should suspend
#                   execution immediately after startup. Default is "n".
#
#   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
#                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
#                   and JPDA_SUSPEND are ignored. Thus, all required jpda
#                   options MUST be specified. The default is:
#
#                   -Xdebug -Xrunjdwp:transport=$JPDA_TRANSPORT,
#                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
#
#   JSSE_HOME       (Optional) May point at your Java Secure Sockets Extension
#                   (JSSE) installation, whose JAR files will be added to the
#                   system class path used to start Tomcat.
#
#   CATALINA_PID    (Optional) Path of the file which should contains the pid
#                   of catalina startup java process, when start (fork) is used
#
# $Id: catalina.sh 498126 2007-01-20 15:38:39Z markt $
# —————————————————————————–

# OS specific support.  $var _must_ be set to either true or false.
cygwin=false
os400=false
darwin=false
case "`uname`" in
CYGWIN*) cygwin=true;;
OS400*) os400=true;;
Darwin*) darwin=true;;
esac

# resolve links - $0 may be a softlink
PRG="$0"

while [ -h "$PRG" ]; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done

# Get standard environment variables
PRGDIR=`dirname "$PRG"`

# Only set CATALINA_HOME if not already set
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." ; pwd`

if [ -r "$CATALINA_HOME"/bin/setenv.sh ]; then
  . "$CATALINA_HOME"/bin/setenv.sh
fi

# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin; then
  [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath –unix "$JAVA_HOME"`
  [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath –unix "$JRE_HOME"`
  [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath –unix "$CATALINA_HOME"`
  [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath –unix "$CATALINA_BASE"`
  [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath –path –unix "$CLASSPATH"`
  [ -n "$JSSE_HOME" ] && JSSE_HOME=`cygpath –absolute –unix "$JSSE_HOME"`
fi

# For OS400
if $os400; then
  # Set job priority to standard for interactive (interactive - 6) by using
  # the interactive priority - 6, the helper threads that respond to requests
  # will be running at the same priority as interactive jobs.
  COMMAND='chgjob job('$JOBNAME') runpty(6)'
  system $COMMAND

  # Enable multi threading
  export QIBM_MULTI_THREADED=Y
fi

# Get standard Java environment variables
if $os400; then
  # -r will Only work on the os400 if the files are:
  # 1. owned by the user
  # 2. owned by the PRIMARY group of the user
  # this will not work if the user belongs in secondary groups
  BASEDIR="$CATALINA_HOME"
  . "$CATALINA_HOME"/bin/setclasspath.sh
else
  if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
    BASEDIR="$CATALINA_HOME"
    . "$CATALINA_HOME"/bin/setclasspath.sh
  else
    echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
    echo "This file is needed to run this program"
    exit 1
  fi
fi

# Add on extra jar files to CLASSPATH
if [ -n "$JSSE_HOME" ]; then
  CLASSPATH="$CLASSPATH":"$JSSE_HOME"/lib/jcert.jar:"$JSSE_HOME"/lib/jnet.jar:"$JSSE_HOME"/lib/jsse.jar
fi
CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar:"$CATALINA_HOME"/bin/commons-logging-api.jar

if [ -z "$CATALINA_BASE" ] ; then
  CATALINA_BASE="$CATALINA_HOME"
fi

if [ -z "$CATALINA_TMPDIR" ] ; then
  # Define the java.io.tmpdir to use for Catalina
  CATALINA_TMPDIR="$CATALINA_BASE"/temp
fi

# Bugzilla 37848: When no TTY is available, don't output to console
have_tty=0
if [ "`tty`" != "not a tty" ]; then
    have_tty=1
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  JAVA_HOME=`cygpath –absolute –windows "$JAVA_HOME"`
  JRE_HOME=`cygpath –absolute –windows "$JRE_HOME"`
  CATALINA_HOME=`cygpath –absolute –windows "$CATALINA_HOME"`
  CATALINA_BASE=`cygpath –absolute –windows "$CATALINA_BASE"`
  CATALINA_TMPDIR=`cygpath –absolute –windows "$CATALINA_TMPDIR"`
  CLASSPATH=`cygpath –path –windows "$CLASSPATH"`
  [ -n "$JSSE_HOME" ] && JSSE_HOME=`cygpath –absolute –windows "$JSSE_HOME"`
  JAVA_ENDORSED_DIRS=`cygpath –path –windows "$JAVA_ENDORSED_DIRS"`
fi

# Set juli LogManager if it is present
if [ -r "$CATALINA_HOME"/bin/tomcat-juli.jar ]; then
#  JAVA_OPTS="$JAVA_OPTS "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" "-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties"
  JAVA_OPTS="$JAVA_OPTS "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" "-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties"
  JAVA_OPTS="$JAVA_OPTS "-Djava.rmi.server.hostname=192.168.1.102""

echo "*****************cambio inicial***************" >luis
echo "JAVA_OPTS:" $JAVA_OPTS >> luis
fi

# —– Execute The Requested Command —————————————–

# Bugzilla 37848: only output this if we have a TTY
if [ $have_tty -eq 1 ]; then
  echo "Using CATALINA_BASE:   $CATALINA_BASE"
  echo "Using CATALINA_HOME:   $CATALINA_HOME"
  echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
  if [ "$1" = "debug" -o "$1" = "javac" ] ; then
    echo "Using JAVA_HOME:       $JAVA_HOME"
  else
    echo "Using JRE_HOME:       $JRE_HOME"
  fi
fi

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-Xdebug -Xrunjdwp:transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

if [ "$1" = "debug" ] ; then
  if $os400; then
    echo "Debug command not available on OS400"
    exit 1
  else
    shift
    if [ "$1" = "-security" ] ; then
      echo "Using Security Manager"
      echo "+++++++++++++++++Segundo+++++++++++++++">>luis
   shift
      exec "$_RUNJDB" $JAVA_OPTS $CATALINA_OPTS \
        -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
        -sourcepath "$CATALINA_HOME"/../../jakarta-tomcat-catalina/catalina/src/share \
        -Djava.security.manager \
        -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" start
    else
      echo "======================Tercero===============">>luis
   exec "$_RUNJDB" $JAVA_OPTS $CATALINA_OPTS \
        -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
        -sourcepath "$CATALINA_HOME"/../../jakarta-tomcat-catalina/catalina/src/share \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" start
    fi
  fi

elif [ "$1" = "run" ]; then

  shift
  if [ "$1" = "-security" ] ; then
    echo "Using Security Manager"
   echo "*****************Cuarto*************** " >>luis
    shift
    exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  else
    echo ",,,,,,,,,,,,,,,,,,,,,,,quinto,,,,,,,,,,,,,,,,,,,,,," >>luis
    exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  fi

elif [ "$1" = "start" ] ; then

  shift
  touch "$CATALINA_BASE"/logs/catalina.out
  if [ "$1" = "-security" ] ; then
    echo "Using Security Manager"
echo " ……………………Sexta…………………." >>luis
echo $JAVA_OPTS >>luis
echo "——————-" >> luis
echo $CATALINA_OPTS>>luis >> luis
echo "——————-">> luis
echo $_RUNJAVA >>luis

    shift
    "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

      if [ ! -z "$CATALINA_PID" ]; then
        echo $! > $CATALINA_PID
      fi
  else
echo "^**************************Septima*****************" >>luis
echo "JAVA_OPTS:" $JAVA_OPTS >>luis
echo "——————-"   >> luis
echo "CATALINA_OPTS:" $CATALINA_OPTS >> luis
echo "——————-"   >> luis
echo "RUN_JAVA:" $_RUNJAVA   >>luis

    "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

      if [ ! -z "$CATALINA_PID" ]; then
        echo $! > $CATALINA_PID
      fi
  fi

elif [ "$1" = "stop" ] ; then

  shift
  FORCE=0
  if [ "$1" = "-force" ]; then
    shift
    FORCE=1
  fi
echo "=================octava================">>luis
  "$_RUNJAVA" $JAVA_OPTS \
    -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
    -Dcatalina.base="$CATALINA_BASE" \
    -Dcatalina.home="$CATALINA_HOME" \
    -Djava.io.tmpdir="$CATALINA_TMPDIR" \
    org.apache.catalina.startup.Bootstrap "$@" stop

  if [ $FORCE -eq 1 ]; then
    if [ ! -z "$CATALINA_PID" ]; then
       echo "Killing: `cat $CATALINA_PID`"
       kill -9 `cat $CATALINA_PID`
    else
       echo "Kill failed: \$CATALINA_PID not set"
    fi
  fi

elif [ "$1" = "version" ] ; then

    "$_RUNJAVA"   \
      -classpath "$CATALINA_HOME/server/lib/catalina.jar" \
      org.apache.catalina.util.ServerInfo

else

  echo "Usage: catalina.sh ( commands … )"
  echo "commands:"
  if $os400; then
    echo "  debug             Start Catalina in a debugger (not available on OS400)"
    echo "  debug -security   Debug Catalina with a security manager (not available on OS400)"
  else
    echo "  debug             Start Catalina in a debugger"
    echo "  debug -security   Debug Catalina with a security manager"
  fi
  echo "  jpda start        Start Catalina under JPDA debugger"
  echo "  run               Start Catalina in the current window"
  echo "  run -security     Start in the current window with security manager"
  echo "  start             Start Catalina in a separate window"
  echo "  start -security   Start in a separate window with security manager"
  echo "  stop              Stop Catalina"
  echo "  stop -force       Stop Catalina (followed by kill -KILL)"
  echo "  version           What version of tomcat are you running?"
  exit 1

fi