10 Kasım 2007 Cumartesi

Embedded Tomcat - Uygulama içerisindeki Tomcat Sunucunuz

Son günlerde yazdığım web uygulamalarıyla ilgili bir kurulum programı hazırlamam gerekti. Müşterimiz bunun bir setup paketi olmasını ve çift tıklayarak kolayca kurulmasını istedi.

Java uygulamalarımız içerisine Tomcat sunucusunu (gömülü) Embedded olarak tanımlayıp, java uygulamamız başladığı zaman, istediğimiz port ve isimden uygulamamızı yayınlayabiliyoruz.

Bu bize, tek java uygulaması içerisinde gömülü bir web sunucu ve buna yükleyeceğimiz (deploy) edeceğimiz bir web uygulaması ve hatta belki de bir java veritabanı kullanıyorsak (hsqldb,derby vs...) tümleşik bir uygulamayı, tek bir java uygulama çatısı altında topluyoruz ve hatta bunu da bir kurulum paketi (setup) haline getirip müşterimize teslim edebiliyoruz.

Embedded Tomcat için
1.linkteki http://tomcat.apache.org/download-55.cgi alt kısımda bulunan embedded versiyonunu indiriyoruz.
2.Java application tanimlayarak, dosyanın içindeki jar ları projemize ekliyoruz,
3. EmbeddedTomcat class ını projemize dahil ediyoruz.
4. Main sınıfımız içerisinden

EmbeddedTomcat embeddedTomcat = new EmbeddedTomcat("test",8292);
embeddedTomcat.start();

satırlarıyla sunucumuzu başlatıyoruz.

5. http://localhost:8292 adresini web browser ımıza yazdığımız zaman Tomcat in ana giriş ekranını görebiliriz.

Bu noktadan sonra artık elinizdeki web projelerinizi deploy edebilir ya da yine embedded java veritabanlarınıza bağlarak çeşitli işlemler gerçekleştirebilirsiniz. Umarım bu yazı faydalı olmuştur.

import org.apache.catalina.*;
import org.apache.catalina.connector.*;
import org.apache.catalina.realm.*;
import org.apache.catalina.startup.*;
import org.apache.catalina.users.*;

public class EmbeddedTomcat
{
// Instance variables:
private String name;
private int portNumber;
private Embedded embedded;
private Engine baseEngine;
private Host baseHost;
private Connector httpConnector;

/** Creates a new instance of EmbeddedTomcat */
public EmbeddedTomcat(
String name,
int portNumber)
{
this.name = name;
this.portNumber = portNumber;

init();
}

private void init()
{
MemoryRealm realm;
Context context;
String baseEngineName;
String hostName;

embedded = new Embedded();

// set default logger and realm
/*
FileLogger fileLog = new FileLogger();
fileLog.setDirectory(".");
fileLog.setPrefix(name);
fileLog.setSuffix(".log");
fileLog.setTimestamp(true);
embedded.setLogger(fileLog);
*/
realm = new MemoryRealm();
embedded.setRealm(realm);

// create an Engine
baseEngine = embedded.createEngine();

// set Engine properties
baseEngineName = name + "Engine";
hostName = name + "Host";

baseEngine.setName(baseEngineName);
baseEngine.setDefaultHost(hostName);

baseHost = embedded.createHost(hostName, "webapps");
baseEngine.addChild(baseHost);

// RootContext
context = addContext("", "ROOT");

// ManagerContext
context = addContext("/manager", "manager");
context.setPrivileged(true);

// add new Engine to set of Engine for embedded server
embedded.addEngine(baseEngine);

// create Connector
httpConnector = embedded.createConnector((java.net.InetAddress) null,
portNumber, false);

// add new Connector to set of Connectors for embedded server, associated
// with Engine
embedded.addConnector(httpConnector);
}

public void start()
{
// start server
try
{
embedded.start();
}
catch (org.apache.catalina.LifecycleException ex)
{
ex.printStackTrace();

//fileLog.log("Startup failed");
//fileLog.log(ex.getMessage());
}
}

public Context addContext(
String path,
String docBase)
{
Context c;

c = embedded.createContext(path, docBase);
baseHost.addChild(c);

return c;
}
}

Hiç yorum yok: