<!DOCTYPE html>
<html>

 <head>
	<meta charset="UTF-8">
	<title>Subscribe to OSBP's Working Group OS.bea</title>
	
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="The website of Eclipse OSBP, an open-source no-code and low-code development platform for business and enterprise applications">
	<meta name="author" content="(c) Compex Systemhaus GmbH, Germnany">

	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	<link rel="shortcut icon" href="images/OS-logo-32x32.png">
	
	<link href="css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="css/style.css" rel="stylesheet" type='text/css'>
	
	<!-- cover flow -->
	<link href="css/coverflow.css" rel="stylesheet" type='text/css'>
	<!--[if lt IE 9]>
	  <link href="css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->
</head>


<body>
  
  <!-- Google Tag Manager --  >
	<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-TGDS5S"
	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
	'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
	})(window,document,'script','dataLayer','GTM-TGDS5S');</script>
  <!-- End Google Tag Manager -->

<header class="site-header">

<!-- Navbar -->
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="index.html"></a>
        
		<div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <!--li ><a href="news.html">News</a></li-->
			<li ><a href="index.html">Home</a></li>	
			<li ><a href="download.html">Download</a></li>
            <li ><a href="documentation.html">Documentation</a></li>
            <li ><a href="community.html">Community</a></li>
			<li ><a href="OS-bea-WG.html">OS.bea Working Group</a></li>			
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Training<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="http://www.osbee.org/services/" target="_blank">OS.bee</a></li>
                <li><a href="http://www.compex-commerce.com/en/services/" target="_blank">Compex</a></li>
              </ul>
            </li>
          </ul>
        </div>
  <!-- Navbar End -->
        </div>
    </div>
  </div>
  <!-- Navbar End -->
  
</header>


<!--Container-->

<div id="header_wrapper">
  <div class="container image-slider">
    <div class="row">
      <h2>
        Subscribe to OS.bea the OSBP Working Group 
      </h2>
      <p>
	  </p>
	  <br>
    </div>
  </div>
</div>


<div id="OS.bea-WG">
  <div class="container">
    <div class="row quick-overview">
	
		<p>Thank you for being interested. Be informed that mails to the mailing list are 
		dispatched to all mailing list subscribers and your mail address will be visible 
		to the receivers. In the contrary the receivers will remain anonymous.</p>
		
		<p>For your information: You may unsubscribe from the mailing list at any time.</p>
		

		
		
		<h2>How to subscribe</h2>


		
		<p>Access to the mailing lists is given in your Eclipse account. If you dont have an Eclipse account, you'll first have to create
		one and then you'll be able to subscribe to the OS.bea mailing list.</p>
		
		<p><H3>Step 1: Create an Eclipse account (if you already have one, continue with step 2)</H3></p>
		<br>	
		
		<ul>
		<li>Click on the following link <a href="https://accounts.eclipse.org/mailing-list/osbea-wg"> OS.bea WG</a>

		which will lead you to Eclipse's apropriate internet page.</li>
		<li>Scroll down and click the link "create a new account", fill the form and submit it.</li>
		<li>You will receive an email from Eclipse which you must confirm. Once the email confirmed your
		account will be created.</li>
		</ul>
		
		<br>
		<p><H3>Step 2: Subscribe to the OS.bea mailing list</H3></p>
		<br>
		
		<ul>
		<li>Login to your Eclipse account and clipck on the "Mailing lists" link and the "Eclipse Mailing List" page will open.</li>
		<li>Click the link: „Manage your Mailings Lists“ which will open the "Manage My Subscriptions" page. </li>
		
		<li>In the search field type „osbea“ (please take care to type exactly the word as written here) 
		and search for the mailing list by pressing the search button.</li>
		
		<li>After successful search click the green button "Subscribe".</li>
		
		<li>Eclipse then sends you another e-mail to confirm the subscription. 
		This time, this is not done via a link, but by ansering the e-mail, 
		whereby you must make sure that in the subject of your e-mail eventually 
		supplemented letters are deleted before sending. In other words the object 
		of your mail must exactly match the object of Eclipse's mail</li>
		
		<li>Subsequently, Eclipse will send you a confirmation mail.</li>
		
		</ul>
		<br>
		
		<p>In the future you will get all e-mails sent to the mailing list. 
		If you want to send one yourself, send it to the following address: osbea-wg@eclipse.org</p>
		
		<br>
		<p>Thank you for your interest!</p>
				
		<br><br>
		
		<br><br>

	</div>
  </div>
</div>

<footer class="site-footer">
  <div id="extra">
    <div class="inner">
      <div class="container">
        <div class="row">
          <div class="span6">
            <h3 class="footer-links-header">Quick Links</h3>
            <ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br>
              <a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a><br>
              <a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br>
              <a href="http://www.eclipse.org/legal/">Legal</a></li>
            </ul>
          </div>
		  <div class="span6">
            <h3 class="footer-links-header">&nbsp;  </h3>

			<ul class="footer-links clearfix">
              <li><a href="http://www.eclipse.org">Eclipse Home</a><br>
              <a href="http://marketplace.eclipse.org/">Market Place</a><br>
              <a href="http://live.eclipse.org/">Eclipse Live</a><br>
              <a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
            </ul>

          </div>		  
       </div>
      </div>
    </div>
  </div>
  
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  
  <!-- Le javascript
      ==================================================
      Placed at the end of the document so the pages load faster -->
  
  <script src="js/jquery-1.11.3.min.js"></script>
  <script src="js/bootstrap.min.js"></script>
  <script src="js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="js/twitter.js" type="text/javascript"></script>
  <script src="js/prettify.js" type="text/javascript"></script>
  <script src="js/lang-xtend.js" type="text/javascript"></script>
  <script src="js/lang-common.js" type="text/javascript"></script>
  <script src="js/custom.js" type="text/javascript"></script>
  <script src="https://apis.google.com/js/platform.js" async defer></script>
  
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-3' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'http://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
  
  <script src="js/coverflow.min.js" type="text/javascript"></script>
  <script>
      $(function() {
        $('#coverflow').coverflow({
          active : 1,
          visibleAside: 2,
          overlap : 0.5,
          scale : 0.9,
          angle : 20,
          trigger : {
            "itemfocus" : true,
            "swipe" : true,
            "mousewheel" : false
          }
        });
        $('#coverflow :hidden').toggle();
        $(window).resize(function() {
          $('#coverflow').coverflow();
        });
      });

  </script>
</footer> 
  
  
  

<body>