diff --git a/README.md b/README.md index 1986de11db40c124f82b920076c7d2749c0a430f..459b21ad8dadb6e34dbf90644c4eebb4b23c59cb 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,8 @@ matching the version of Erlang you have installed. | JInterface | Erlang versions supported | |------------|---------------------------| -| 1.14 | >=26, <26.3 | +| 1.14.1 | >=27, <28 | +| 1.14 | >=26, <27 | | 1.13.2 | >=25.3, <26 | | 1.13.1 | >=25.1, <25.3 | | 1.13 | >=25, <25.1 | diff --git a/java_src/Makefile b/java_src/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ab44ca2804e1462a4987dc65f3b7ca8f67283d47 --- /dev/null +++ b/java_src/Makefile @@ -0,0 +1,54 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2000-2016. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# %CopyrightEnd% +# +include $(ERL_TOP)/make/target.mk +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Application version +# ---------------------------------------------------- +include ../vsn.mk +VSN=$(JINTERFACE_VSN) + +# ---------------------------------------------------- +# Common Macros +# ---------------------------------------------------- + +SUB_DIRECTORIES = com/ericsson/otp/erlang + +SPECIAL_TARGETS = + +TARGET_FILES= $(POM_TARGET) + +SPECIAL_TARGETS = + +POM_FILE= pom.xml + +POM_TARGET= ../$(POM_FILE) +POM_SRC= $(POM_FILE).src + +# ---------------------------------------------------- +# Special Build Targets +# ---------------------------------------------------- + +$(POM_TARGET): $(POM_SRC) ../vsn.mk + $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ + + +include $(ERL_TOP)/make/otp_subdir.mk diff --git a/java_src/com/ericsson/otp/erlang/Makefile b/java_src/com/ericsson/otp/erlang/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..1445eea60483cd4710d3d12c680fc1f7ba6832d6 --- /dev/null +++ b/java_src/com/ericsson/otp/erlang/Makefile @@ -0,0 +1,136 @@ +# -*-Makefile-*- + +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2000-2024. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# %CopyrightEnd% +# +include $(ERL_TOP)/make/target.mk + +JAVA_DEST_ROOT = $(ERL_TOP)/lib/jinterface/priv/ +JAVA_SRC_ROOT = $(ERL_TOP)/lib/jinterface/java_src/ +JAVA_CLASS_SUBDIR = com/ericsson/otp/erlang/ + +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Application version +# ---------------------------------------------------- +include $(ERL_TOP)/lib/jinterface/vsn.mk +VSN=$(JINTERFACE_VSN) + +# + +EBINDIR=$(ERL_TOP)/lib/jinterface/ebin + +APP_FILE= jinterface.app +APP_SRC= $(APP_FILE).src +APP_TARGET= $(EBINDIR)/$(APP_FILE) + +APPUP_FILE= jinterface.appup +APPUP_SRC= $(APPUP_FILE).src +APPUP_TARGET= $(EBINDIR)/$(APPUP_FILE) + +# ---------------------------------------------------- +# Release directory specification +# ---------------------------------------------------- +RELSYSDIR = $(RELEASE_PATH)/lib/jinterface-$(VSN) + +# +# JAVA macros +# + +# don't add filenames to the Makefile! +# all java sourcefiles listed in common include file +include $(ERL_TOP)/lib/jinterface/java_src/$(JAVA_CLASS_SUBDIR)/java_files + +TARGET_FILES= $(JAVA_FILES:%=$(JAVA_DEST_ROOT)$(JAVA_CLASS_SUBDIR)%.class) $(APP_TARGET) $(APPUP_TARGET) +JAVA_SRC= $(JAVA_FILES:%=%.java) + +JARFILE= OtpErlang.jar + + +# ---------------------------------------------------- +# Programs and Flags +# ---------------------------------------------------- +ifeq ($(TARGET),win32) + JAR=jar.exe +else + JAR=jar +endif + +CLASSPATH = $(JAVA_SRC_ROOT) + +JAVADOCFLAGS=-d $(DOCDIR) +JAVAFLAGS=-d $(JAVA_DEST_ROOT) +JARFLAGS=-cf +ifneq ($(V),0) +JARFLAGS=-cfv +endif + +JAVA_OPTIONS = -Xlint -encoding UTF-8 + +ifeq ($(TESTROOT),) +RELEASE_PATH="$(ERL_TOP)/release/$(TARGET)" +else +RELEASE_PATH=$(TESTROOT) +endif + + +# ---------------------------------------------------- +# Make Rules +# ---------------------------------------------------- + +$(APP_TARGET): $(APP_SRC) $(ERL_TOP)/lib/jinterface/vsn.mk + $(vsn_verbose)sed -e 's;%VSN%;$(JINTERFACE_VSN);' $< > $@ +$(APPUP_TARGET): $(APPUP_SRC) $(ERL_TOP)/lib/jinterface/vsn.mk + $(vsn_verbose)sed -e 's;%VSN%;$(JINTERFACE_VSN);' $< > $@ + +$(TYPES): make_dirs $(JAVA_DEST_ROOT)$(JARFILE) + +make_dirs: + $(V_at)if [ ! -d "$(JAVA_DEST_ROOT)" ];then mkdir "$(JAVA_DEST_ROOT)"; fi + +$(JAVA_DEST_ROOT)$(JARFILE): $(TARGET_FILES) + @(cd $(JAVA_DEST_ROOT) ; $(JAR) $(JARFLAGS) $(JARFILE) $(JAVA_CLASS_SUBDIR)) + +clean: + $(V_at)rm -f $(TARGET_FILES) *~ + +docs: + +# ---------------------------------------------------- +# Release Targets +# ---------------------------------------------------- + +# include $(ERL_TOP)/make/otp_release_targets.mk + +release release_docs release_tests release_html: + $(V_at)$(MAKE) $(MFLAGS) RELEASE_PATH="$(RELEASE_PATH)" $(TARGET_MAKEFILE) $@_spec + +release_spec: opt + $(V_at)$(INSTALL_DIR) "$(RELSYSDIR)/java_src/com/ericsson/otp/erlang" + $(V_at)$(INSTALL_DATA) $(JAVA_SRC) "$(RELSYSDIR)/java_src/com/ericsson/otp/erlang" + $(V_at)$(INSTALL_DIR) "$(RELSYSDIR)/priv" + $(V_at)$(INSTALL_DATA) $(JAVA_DEST_ROOT)$(JARFILE) "$(RELSYSDIR)/priv" + $(V_at)$(INSTALL_DIR) "$(RELSYSDIR)/ebin" + $(V_at)$(INSTALL_DATA) $(APP_TARGET) "$(RELSYSDIR)/ebin/$(APP_FILE)" + $(V_at)$(INSTALL_DATA) $(APPUP_TARGET) "$(RELSYSDIR)/ebin/$(APPUP_FILE)" + +release_docs_spec: + +# ---------------------------------------------------- diff --git a/java_src/com/ericsson/otp/erlang/java_files b/java_src/com/ericsson/otp/erlang/java_files new file mode 100644 index 0000000000000000000000000000000000000000..10709e105982d235b1f1cbdfadfdae5f2fca8216 --- /dev/null +++ b/java_src/com/ericsson/otp/erlang/java_files @@ -0,0 +1,93 @@ +# -*-Makefile-*- + +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2000-2022. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# %CopyrightEnd% +# + +# this file is included in the doc and src makefiles +# so the list of files only needs to be updated in one place +# i.e. here + +EXCEPTIONS = \ + OtpAuthException \ + OtpErlangDecodeException \ + OtpErlangException \ + OtpErlangExit \ + OtpErlangRangeException \ + OtpException + +COMM = \ + AbstractConnection \ + AbstractNode \ + GenericQueue \ + Link \ + Links \ + OtpConnection \ + OtpCookedConnection \ + OtpEpmd \ + OtpErlangFun \ + OtpErlangExternalFun \ + OtpExternal \ + OtpGenericTransportFactory \ + OtpInputStream \ + OtpLocalNode \ + OtpNodeStatus \ + OtpMD5 \ + OtpMbox \ + OtpMsg \ + OtpNode \ + OtpOutputStream \ + OtpPeer \ + OtpSelf \ + OtpServer \ + OtpServerSocketTransport \ + OtpServerTransport \ + OtpSocketTransport \ + OtpSocketTransportFactory \ + OtpTransport \ + OtpTransportFactory + +ERL = \ + OtpErlangAtom \ + OtpErlangBinary \ + OtpErlangBitstr \ + OtpErlangBoolean \ + OtpErlangByte \ + OtpErlangChar \ + OtpErlangDouble \ + OtpErlangFloat \ + OtpErlangInt \ + OtpErlangList \ + OtpErlangLong \ + OtpErlangObject \ + OtpErlangPid \ + OtpErlangPort \ + OtpErlangRef \ + OtpErlangShort\ + OtpErlangString\ + OtpErlangTuple \ + OtpErlangMap \ + OtpErlangUInt \ + OtpErlangUShort + +MISC = \ + OtpSystem + +JAVA_FILES=$(EXCEPTIONS) $(ERL) $(COMM) $(MISC) + diff --git a/java_src/com/ericsson/otp/erlang/jinterface.app.src b/java_src/com/ericsson/otp/erlang/jinterface.app.src new file mode 100644 index 0000000000000000000000000000000000000000..dea62c3ae117c7736481702dc65a4e7ac5090afd --- /dev/null +++ b/java_src/com/ericsson/otp/erlang/jinterface.app.src @@ -0,0 +1,33 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2014-2016. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% %CopyrightEnd% +%% +%% This is an -*- erlang -*- file. +%% + +{application, jinterface, + [ + {description, "Jinterface"}, + {vsn, "%VSN%"}, + {modules, []}, + {registered, []}, + {applications, []}, + {env, []}, + {runtime_dependencies, []} + ] +}. diff --git a/java_src/com/ericsson/otp/erlang/jinterface.appup.src b/java_src/com/ericsson/otp/erlang/jinterface.appup.src new file mode 100644 index 0000000000000000000000000000000000000000..eb9854d22d0130cdde9cd87b42440d2ed2e85526 --- /dev/null +++ b/java_src/com/ericsson/otp/erlang/jinterface.appup.src @@ -0,0 +1,19 @@ +%% -*- erlang -*- +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2014-2016. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% %CopyrightEnd% +{"%VSN%", [], []}. diff --git a/java_src/com/ericsson/otp/erlang/package.html b/java_src/com/ericsson/otp/erlang/package.html new file mode 100644 index 0000000000000000000000000000000000000000..eb62e6924350f74e46b6d86d33cd4f3993856207 --- /dev/null +++ b/java_src/com/ericsson/otp/erlang/package.html @@ -0,0 +1,158 @@ + + + +
+ + + + +This package provides support for communication with Erlang and +representation of Erlang datatypes. + +
Note: By default, jinterface
is only guaranteed
+to be compatible with other Erlang/OTP components from the same release as
+jinterface
itself. For example, jinterface
+from the OTP R10 release is not compatible with an Erlang emulator from
+the OTP R9 release by default. jinterface
can be set in
+compatibility mode of an earlier release (not earlier that R7), though.
+The compatibility mode is set by usage of the OtpCompatRel
+property. By starting the jvm with the command-line argument
+-DOtpCompatRel=9
, jinterface
will be compatible
+with the R9 release of OTP. Warning! You may run into trouble if
+this feature is used carelessly. Always make sure that all communicating
+components are either from the same Erlang/OTP release, or from release
+X and release Y where all components from release Y are in compatibility
+mode of release X.
+
+
The classes +{@link com.ericsson.otp.erlang.OtpErlangList}, +{@link com.ericsson.otp.erlang.OtpErlangTuple}, +{@link com.ericsson.otp.erlang.OtpErlangBinary}, +{@link com.ericsson.otp.erlang.OtpErlangAtom}, +{@link com.ericsson.otp.erlang.OtpErlangBoolean}, +{@link com.ericsson.otp.erlang.OtpErlangByte}, +{@link com.ericsson.otp.erlang.OtpErlangChar}, +{@link com.ericsson.otp.erlang.OtpErlangDouble}, +{@link com.ericsson.otp.erlang.OtpErlangFloat}, +{@link com.ericsson.otp.erlang.OtpErlangLong}, +{@link com.ericsson.otp.erlang.OtpErlangInt}, +{@link com.ericsson.otp.erlang.OtpErlangUInt}, +{@link com.ericsson.otp.erlang.OtpErlangShort}, +{@link com.ericsson.otp.erlang.OtpErlangUShort}, +{@link com.ericsson.otp.erlang.OtpErlangString}, +{@link com.ericsson.otp.erlang.OtpErlangObject}, +{@link com.ericsson.otp.erlang.OtpErlangPid}, +{@link com.ericsson.otp.erlang.OtpErlangPort}, +and {@link com.ericsson.otp.erlang.OtpErlangRef} +represent the various Erlang datatypes. + + +
There are two basic mechanisms for communicating with Erlang, +described briefly here. Note that the two mechanisms are not intended +to be used together. Which mechanism you choose depends on your +application and the level of control it needs.
+ +You can use {@link com.ericsson.otp.erlang.OtpNode}, which can +manage incoming and outgoing connections for you. With {@link +com.ericsson.otp.erlang.OtpNode} a thread is automatically started to +listen for incoming connections, make necessary outgoing connections, +and dispatch messages to their recipients. {@link +com.ericsson.otp.erlang.OtpNode} supports the concept of {@link +com.ericsson.otp.erlang.OtpMbox mailboxes}, allowing you to have +several Java components communicating independently with Erlang. +
+ ++ OtpNode node = new OtpNode("bingo"); + OtpMbox mbox = node.createMbox(); + + mbox.send("foo@localhost",new OtpErlangAtom("hej")); ++ +
If you need more control (but less support from the library), you +can manage connections yourself using the {@link +com.ericsson.otp.erlang.OtpSelf} and {@link +com.ericsson.otp.erlang.OtpConnection} classes, in which case you can +control explicitly which connections are made and which messages are +sent. Received messages are not dispatched by {@link +com.ericsson.otp.erlang.OtpConnection}.
+ +The classes {@link com.ericsson.otp.erlang.OtpPeer}, {@link +com.ericsson.otp.erlang.OtpSelf} and {@link +com.ericsson.otp.erlang.OtpServer} are used to represent OTP nodes and +are necessary in order to set up communication between the Java +thread and a remote node. Once a connection has been established, it +is represented by an {@link com.ericsson.otp.erlang.OtpConnection}, +through which all communication goes. + +
Setting up a connection with a remote node is straightforward. You +create objects representing the local and remote nodes, then call the +local node's {@link +com.ericsson.otp.erlang.OtpSelf#connect(com.ericsson.otp.erlang.OtpPeer) +connect()} method: + +
+ OtpSelf self = new OtpSelf("client","cookie"); + OtpPeer other = new OtpPeer("server"); + OtpConnection conn = self.connect(other); ++ +
If you wish to be able to accept incoming connections as well as +make outgoing ones, you first must register the listen port with EPMD +(described in the Erlang documentation). Once that is done, you can +accept incoming connections: + +
+ OtpServer self = new OtpSelf("server","cookie"); + self.publishPort(); + OtpConnection conn = self.accept(); ++ + +
Once the connection is established by one of the above methods ({@link +com.ericsson.otp.erlang.OtpSelf#connect(com.ericsson.otp.erlang.OtpPeer) +connect()} or {@link com.ericsson.otp.erlang.OtpSelf#accept() +accept()}), you can use the resulting {@link +com.ericsson.otp.erlang.OtpConnection OtpConnection} to send and +receive messages: + +
+ OtpErlangAtom msg = new ErlangOtpAtom("hello"); + conn.send("echoserver", msg); + + OtpErlangObject reply = conn.receive(); + System.out.println("Received " + reply); ++ +
Finally, you can get an even greater level of control (and even +less support from the library) by subclassing {@link +com.ericsson.otp.erlang.AbstractConnection} and implementing the +communication primitives needed by your application.
+ + + diff --git a/java_src/pom.xml.src b/java_src/pom.xml.src new file mode 100644 index 0000000000000000000000000000000000000000..584bd8107688c22a8741034d522dee8db0ac3404 --- /dev/null +++ b/java_src/pom.xml.src @@ -0,0 +1,145 @@ +