JBoss Community

Re: remote ejb client username is encrypted at the server(JBOSS7.1 CR1)

created by Ganesh Saithala in JBoss AS 7 Development - View the full discussion

Thanks Daren for helping to fix this issue.

 

Iam posting below working EJB client API based test program.

 

package demo;


import java.io.IOException;
import java.net.URI;
import java.security.Security;
import java.util.concurrent.TimeUnit;

import javax.naming.NamingException;
import javax.security.auth.login.LoginException;

import org.jboss.ejb.client.ContextSelector;
import org.jboss.ejb.client.EJBClient;
import org.jboss.ejb.client.EJBClientContext;
import org.jboss.ejb.client.EJBClientTransactionContext;
import org.jboss.ejb.client.StatelessEJBLocator;
import org.jboss.ejb.client.remoting.IoFutureHelper;
import org.jboss.remoting3.Connection;
import org.jboss.remoting3.Endpoint;
import org.jboss.remoting3.Remoting;
import org.jboss.remoting3.remote.RemoteConnectionProviderFactory;
import org.jboss.sasl.JBossSaslProvider;
import org.xnio.IoFuture;
import org.xnio.OptionMap;
import org.xnio.Options;


public class RemoteEJBClient {
   
    /**
     * User login name
     */
    private static final String USER_LOGIN_NAME = "admin";

    /**
     * User password
     */
    private static final String USER_PASSWORD = "admin";
   
    private static Connection connection;
    private static EJBClientContext ejbClientContext;
    private static Endpoint endpoint;


    static {
        Security.addProvider(new JBossSaslProvider());
    }


    public static void main(String[] args) throws Exception {
       

        endpoint = Remoting.createEndpoint("ejb-remote-client-endpoint", OptionMap.EMPTY);

        endpoint.addConnectionProvider("remote", new RemoteConnectionProviderFactory(),
                                       OptionMap.create(Options.SSL_ENABLED, Boolean.FALSE, Options.SASL_SERVER_AUTH,
                                                        Boolean.FALSE));
       
        MyCallbackHandler callbackhndlr = new MyCallbackHandler(USER_LOGIN_NAME, USER_PASSWORD);
         // open a connection
        final IoFuture<Connection> futureConnection = endpoint.connect(new URI("remote://localhost:" + "4447"),
                                                                       OptionMap.create(Options.SASL_POLICY_NOPLAINTEXT,
                                                                                        Boolean.FALSE), callbackhndlr);
        connection = IoFutureHelper.get(futureConnection, 5, TimeUnit.SECONDS);

        ejbClientContext = EJBClientContext.create();
        ejbClientContext.registerConnection(connection);
        @SuppressWarnings("unused")
        final ContextSelector<EJBClientContext> previousSelector = EJBClientContext.setConstantContext(ejbClientContext);

        // setting up something for transactions
        final EJBClientTransactionContext localUserTxContext = EJBClientTransactionContext.createLocal();
        EJBClientTransactionContext.setGlobalContext(localUserTxContext);
       
        invokeStatelessBean();
       

        if (connection != null) {
            try {
                connection.close();
            } catch (IOException ioe) {
                System.out.println("Failed to close connection" + ioe);
            }
        }
        if (endpoint != null) {
            try {
                endpoint.close();
            } catch (IOException ioe) {
                System.out.println("Failed to close endpoint" + ioe);
            }
        }

    }

    private static void invokeStatelessBean() throws NamingException, LoginException {

        final SessionBeanInterface statelessSessionBeanInterface = lookupRemoteStatelessCalculator();
        System.out.println("Obtained a remote stateless SessionBeanInterface for invocation");
        try {
            System.out.println("EJB principal " + statelessSessionBeanInterface.getPrincipal());
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
    }


    private static SessionBeanInterface lookupRemoteStatelessCalculator() throws NamingException, LoginException {
        final String appName = "TestEAR";
        final String moduleName = "TestEJB";
        final String distinctName = "";
        final String beanName = "SessionBean";
        final String viewClassName = SessionBeanInterface.class.getName();
        System.out.println("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);

        // create a locator depending on the type you are calling: StatelessEJBLocator, EntityEJBLocator, StatefulEJBLocator &
        // create the proxy given the locator
        final StatelessEJBLocator<SessionBeanInterface> locator = new StatelessEJBLocator<SessionBeanInterface>(
                                                                                                                SessionBeanInterface.class,
                                                                                                                appName,
                                                                                                                moduleName,
                                                                                                                beanName,
                                                                                                                distinctName);
        SessionBeanInterface bean = EJBClient.createProxy(locator);
        return bean;
    }

}

 



Reply to this message by going to Community

Start a new discussion in JBoss AS 7 Development at Community