[[Application_Client_Migration]]
= Application Client Migration
[[naming-client]]
== Naming Client
This migration example assumes a client application performs a remote
JNDI lookup using an `InitialContext` backed by the
`org.jboss.naming.remote.client.InitialContextFactory` class.
[[original-configuration]]
=== Original Configuration
An `InitialContext` backed by the
`org.jboss.naming.remote.client.InitialContextFactory` class can be
created by specifying properties that contain the URL of the naming
provider to connect to along with appropriate user credentials:
[source, java]
----
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
properties.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080");
properties.put(Context.SECURITY_PRINCIPAL, "bob");
properties.put(Context.SECURITY_CREDENTIALS, "secret");
InitialContext context = new InitialContext(properties);
Bar bar = (Bar) context.lookup("foo/bar");
...
----
[[migrated-configuration]]
=== Migrated Configuration
An `InitialContext` backed by the
`org.wildfly.naming.client.WildFlyInitialContextFactory` class can be
created by specifying a property that contains the URL of the naming
provider to connect to. The user credentials can be specified using a
WildFly client configuration file or programmatically.
[[configuration-file-approach]]
==== Configuration File Approach
A `wildfly-config.xml` file that contains the user credentials to use
when establishing a connection to the naming provider can be added to
the client application's `META-INF` directory:
*wildfly-config.xml*
[source, xml]
----
----
An `InitialContext` can then be created as follows:
[source, java]
----
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
InitialContext context = new InitialContext(properties);
Bar bar = (Bar) context.lookup("foo/bar");
...
----
[[programmatic-approach]]
==== Programmatic Approach
The user credentials to use when establishing a connection to the naming
provider can be specified directly in the client application's code:
[source, java]
----
// create your authentication configuration
AuthenticationConfiguration namingConfig = AuthenticationConfiguration.empty().useName("bob").usePassword("secret");
// create your authentication context
AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL.matchHost("127.0.0.1"), namingConfig);
// create a callable that creates and uses an InitialContext
Callable callable = () -> {
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
InitialContext context = new InitialContext(properties);
Bar bar = (Bar) context.lookup("foo/bar");
...
return null;
};
// use your authentication context to run your callable
context.runCallable(callable);
----
[[ejb-client]]
== EJB Client
This migration example assumes a client application is configured to
invoke an EJB deployed on a remote server using a
`jboss-ejb-client.properties` file.
[[original-configuration-1]]
=== Original Configuration
A `jboss-ejb-client.properties` file that contains the information
needed to connect to the remote server can be specified in a client
application's `META-INF` directory:
*jboss-ejb-client.properties*
....
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port = 8080
remote.connection.default.username=bob
remote.connection.default.password=secret
....
An EJB can then be looked up and a method can be invoked on it as
follows:
[source, java]
----
// create an InitialContext
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
InitialContext context = new InitialContext(properties);
// look up an EJB and invoke one of its methods
RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
"ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
int sum = statelessRemoteCalculator.add(101, 202);
----
[[migrated-configuration-1]]
=== Migrated Configuration
The information needed to connect to the remote server can be specified
using a WildFly client configuration file or programmatically.
[[configuration-file-approach-1]]
==== Configuration File Approach
A `wildfly-config.xml` file that contains the information needed to
connect to the remote server can be added to the client application's
`META-INF` directory:
*wildfly-config.xml*
[source, xml]
----
----
An EJB can then be looked up and a method can be invoked on it as
follows:
[source, java]
----
// create an InitialContext
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
InitialContext context = new InitialContext(properties);
// look up an EJB and invoke one of its methods (same as before)
RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
"ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
int sum = statelessRemoteCalculator.add(101, 202);
----
[[programmatic-approach-1]]
==== Programmatic Approach
The information needed to connect to the remote server can be specified
directly in the client application's code:
[source, java]
----
// create your authentication configuration
AuthenticationConfiguration ejbConfig = AuthenticationConfiguration.empty().useName("bob").usePassword("secret");
// create your authentication context
AuthenticationContext context = AuthenticationContext.empty().with(MatchRule.ALL.matchHost("127.0.0.1"), ejbConfig);
// create a callable that invokes an EJB
Callable callable = () -> {
// create an InitialContext
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
properties.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
InitialContext context = new InitialContext(properties);
// look up an EJB and invoke one of its methods (same as before)
RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup(
"ejb:/ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
int sum = statelessRemoteCalculator.add(101, 202);
...
return null;
};
// use your authentication context to run your callable
context.runCallable(callable);
----