存在就是合理的

          會思考的僵尸

          Eclipse+MyEclipse+weblogic8開發EJB初探

          一、無狀態會話BEAN
          搞了幾年JAVA了,最近由于完全不懂EJB技術,被取笑了!我怒而學之.
          以下為自己保留的代碼,大部分抄襲網上的,只為自己保留,望看客一笑而過!
          關鍵字一:DOMAIN域
          為WEBLOGIC管理應用的機制.用WEBLOGIC自帶的Configuration Wizard工具生成,根據功能不同能創建不同的工作域.
          關鍵字二:部署
          Eclipse+MyEclipse提供了比較強大的部署功能,這里忽略先.
          具體代碼如下:
          package com.ejb;

          import java.rmi.RemoteException;

          import javax.ejb.EJBException;
          import javax.ejb.SessionBean;
          import javax.ejb.SessionContext;

          /**
          ?* XDoclet-based session bean.? The class must be declared
          ?* public according to the EJB specification.
          ?*
          ?* To generate the EJB related files to this EJB:
          ?*??- Add Standard EJB module to XDoclet project properties
          ?*??- Customize XDoclet configuration for your appserver
          ?*??- Run XDoclet
          ?*
          ?* Below are the xdoclet-related tags needed for this EJB.
          ?*
          ?* @ejb.bean name="HelloWorld"
          ?*?????????? display-name="Name for HelloWorld"
          ?*?????????? description="Description for HelloWorld"
          ?*?????????? jndi-name="ejb/HelloWorld"
          ?*?????????? type="Stateless"
          ?*?????????? view-type="remote"
          ?*/
          public class HelloWorld implements SessionBean {

          ?/** The session context */
          ?private SessionContext context;
          ?private String message = "helloworld!";
          ?public HelloWorld() {
          ??// TODO Auto-generated constructor stub
          ?}

          ?public void ejbActivate() throws EJBException, RemoteException {
          ??// TODO Auto-generated method stub

          ?}

          ?public void ejbPassivate() throws EJBException, RemoteException {
          ??// TODO Auto-generated method stub

          ?}

          ?public void ejbRemove() throws EJBException, RemoteException {
          ??// TODO Auto-generated method stub

          ?}

          ?/**
          ? * Set the associated session context. The container calls this method
          ? * after the instance creation.
          ? *
          ? * The enterprise bean instance should store the reference to the context
          ? * object in an instance variable.
          ? *
          ? * This method is called with no transaction context.
          ? *
          ? * @throws EJBException Thrown if method fails due to system-level error.
          ? */
          ?public void setSessionContext(SessionContext newContext)
          ??throws EJBException {
          ??context = newContext;
          ?}

          /**
          * 自己新創建的業務方法
          **/
          ?public String getMessage()throws EJBException
          ?{
          ??return this.message;
          ??//return new String("helloworld!");
          ?}
          ///////////////////////////////////////////////////////////////////////////////////分割線///////////////////////////////////////////////////////////////////////////
          /*
          ?* Generated by XDoclet - Do not edit!
          ?*/
          package com.ejb;

          /**
          ?* Session layer for HelloWorld.
          ?* @xdoclet-generated at ${TODAY}
          ?* @copyright The XDoclet Team
          ?* @author XDoclet
          ?* @version ${version}
          ?*/
          public class HelloWorldSession
          ?? extends com.ejb.HelloWorld
          ?? implements javax.ejb.SessionBean
          {
          ?? public void ejbActivate() throws javax.ejb.EJBException, java.rmi.RemoteException
          ?? {

          ????? super.ejbActivate();
          ?? }

          ?? public void ejbPassivate() throws javax.ejb.EJBException, java.rmi.RemoteException
          ?? {
          ????? super.ejbPassivate();
          ?? }

          ?? public void setSessionContext(javax.ejb.SessionContext ctx) throws javax.ejb.EJBException
          ?? {
          ????? super.setSessionContext(ctx);
          ?? }

          ?? public void unsetSessionContext()
          ?? {
          ?? }

          ?? public void ejbRemove() throws javax.ejb.EJBException, java.rmi.RemoteException
          ?? {
          ????? super.ejbRemove();
          ?? }

          ?? public void ejbCreate() throws javax.ejb.CreateException
          ?? {
          ?? }
          }
          //////////////////////////////////////////////////////////////////////////////分割線////////////////////////////////////////////////////////////////////////

          /*
          ?* Generated by XDoclet - Do not edit!
          ?*/
          package com.interfaces;

          import javax.ejb.EJBException;
          import java.rmi.*;

          /**
          ?* Remote interface for HelloWorld.
          ?* @xdoclet-generated at ${TODAY}
          ?* @copyright The XDoclet Team
          ?* @author XDoclet
          ?* @version ${version}
          ?*/
          public interface HelloWorld
          ?? extends javax.ejb.EJBObject
          {
          ?? /**
          ??? * An example business method
          ??? * @throws EJBException Thrown if method fails due to system-level error.??? */
          ?? /*public void replaceWithRealBusinessMethod(? )
          ????? throws java.rmi.RemoteException;*/
          ?? public String getMessage()throws EJBException,RemoteException;
          }
          //////////////////////////////////////////////////////////////////////////////分割線/////////////////////////////////////////////////////////////////////////////
          /*
          ?* Generated by XDoclet - Do not edit!
          ?*/
          package com.interfaces;

          /**
          ?* Home interface for HelloWorld.
          ?* @xdoclet-generated at ${TODAY}
          ?* @copyright The XDoclet Team
          ?* @author XDoclet
          ?* @version ${version}
          ?*/
          public interface HelloWorldHome
          ?? extends javax.ejb.EJBHome
          {
          ?? public static final String COMP_NAME="java:comp/env/ejb/HelloWorld";
          ?? public static final String JNDI_NAME="ejb/HelloWorld";

          ?? public com.interfaces.HelloWorld create()
          ????? throws javax.ejb.CreateException,java.rmi.RemoteException;

          }
          /////////////////////////////////////////////////////////////////////////////分割線/////////////////////////////////////////////////////////////////////////////
          /*
          ?* Generated file - Do not edit!
          ?*/
          package com.interfaces;

          /**
          ?* Utility class for HelloWorld.
          ?* @xdoclet-generated at ${TODAY}
          ?* @copyright The XDoclet Team
          ?* @author XDoclet
          ?* @version ${version}
          ?*/
          public class HelloWorldUtil
          {
          ?? /** Cached remote home (EJBHome). Uses lazy loading to obtain its value (loaded by getHome() methods). */
          ?? private static com.interfaces.HelloWorldHome cachedRemoteHome = null;

          ?? private static Object lookupHome(java.util.Hashtable environment, String jndiName, Class narrowTo) throws javax.naming.NamingException {
          ????? // Obtain initial context
          ????? javax.naming.InitialContext initialContext = new javax.naming.InitialContext(environment);
          ????? try {
          ???????? Object objRef = initialContext.lookup(jndiName);
          ???????? // only narrow if necessary
          ???????? if (java.rmi.Remote.class.isAssignableFrom(narrowTo))
          ??????????? return javax.rmi.PortableRemoteObject.narrow(objRef, narrowTo);
          ???????? else
          ??????????? return objRef;
          ????? } finally {
          ???????? initialContext.close();
          ????? }
          ?? }

          ?? // Home interface lookup methods

          ?? /**
          ??? * Obtain remote home interface from default initial context
          ??? * @return Home interface for HelloWorld. Lookup using COMP_NAME
          ??? */
          ?? public static com.interfaces.HelloWorldHome getHome() throws javax.naming.NamingException
          ?? {
          ????? if (cachedRemoteHome == null) {
          ??????????? cachedRemoteHome = (com.interfaces.HelloWorldHome) lookupHome(null, com.interfaces.HelloWorldHome.COMP_NAME, com.interfaces.HelloWorldHome.class);
          ????? }
          ????? return cachedRemoteHome;
          ?? }

          ?? /**
          ??? * Obtain remote home interface from parameterised initial context
          ??? * @param environment Parameters to use for creating initial context
          ??? * @return Home interface for HelloWorld. Lookup using COMP_NAME
          ??? */
          ?? public static com.interfaces.HelloWorldHome getHome( java.util.Hashtable environment ) throws javax.naming.NamingException
          ?? {
          ?????? return (com.interfaces.HelloWorldHome) lookupHome(environment, com.interfaces.HelloWorldHome.COMP_NAME, com.interfaces.HelloWorldHome.class);
          ?? }

          ?? /** Cached per JVM server IP. */
          ?? private static String hexServerIP = null;

          ?? // initialise the secure random instance
          ?? private static final java.security.SecureRandom seeder = new java.security.SecureRandom();

          ?? /**
          ??? * A 32 byte GUID generator (Globally Unique ID). These artificial keys SHOULD <strong>NOT </strong> be seen by the user,
          ??? * not even touched by the DBA but with very rare exceptions, just manipulated by the database and the programs.
          ??? *
          ??? * Usage: Add an id field (type java.lang.String) to your EJB, and add setId(XXXUtil.generateGUID(this)); to the ejbCreate method.
          ??? */
          ?? public static final String generateGUID(Object o) {
          ?????? StringBuffer tmpBuffer = new StringBuffer(16);
          ?????? if (hexServerIP == null) {
          ?????????? java.net.InetAddress localInetAddress = null;
          ?????????? try {
          ?????????????? // get the inet address

          ?????????????? localInetAddress = java.net.InetAddress.getLocalHost();
          ?????????? }
          ?????????? catch (java.net.UnknownHostException uhe) {
          ?????????????? System.err.println("HelloWorldUtil: Could not get the local IP address using InetAddress.getLocalHost()!");
          ?????????????? // todo: find better way to get around this...
          ?????????????? uhe.printStackTrace();
          ?????????????? return null;
          ?????????? }
          ?????????? byte serverIP[] = localInetAddress.getAddress();
          ?????????? hexServerIP = hexFormat(getInt(serverIP), 8);
          ?????? }

          ?????? String hashcode = hexFormat(System.identityHashCode(o), 8);
          ?????? tmpBuffer.append(hexServerIP);
          ?????? tmpBuffer.append(hashcode);

          ?????? long timeNow????? = System.currentTimeMillis();
          ?????? int timeLow?????? = (int)timeNow & 0xFFFFFFFF;
          ?????? int node????????? = seeder.nextInt();

          ?????? StringBuffer guid = new StringBuffer(32);
          ?????? guid.append(hexFormat(timeLow, 8));
          ?????? guid.append(tmpBuffer.toString());
          ?????? guid.append(hexFormat(node, 8));
          ?????? return guid.toString();
          ?? }

          ?? private static int getInt(byte bytes[]) {
          ?????? int i = 0;
          ?????? int j = 24;
          ?????? for (int k = 0; j >= 0; k++) {
          ?????????? int l = bytes[k] & 0xff;
          ?????????? i += l << j;
          ?????????? j -= 8;
          ?????? }
          ?????? return i;
          ?? }

          ?? private static String hexFormat(int i, int j) {
          ?????? String s = Integer.toHexString(i);
          ?????? return padHex(s, j) + s;
          ?? }

          ?? private static String padHex(String s, int i) {
          ?????? StringBuffer tmpBuffer = new StringBuffer();
          ?????? if (s.length() < i) {
          ?????????? for (int j = 0; j < i - s.length(); j++) {
          ?????????????? tmpBuffer.append('0');
          ?????????? }
          ?????? }
          ?????? return tmpBuffer.toString();
          ?? }
          }
          ////////////////////////////////////////////////////////////////////////////////////////分割線///////////////////////////////////////////////////////////////////
          配置文件如下:
          ejb-jar.xml
          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "

          <ejb-jar >

          ?? <description><![CDATA[No Description.]]></description>
          ?? <display-name>Generated by XDoclet</display-name>

          ?? <enterprise-beans>

          ????? <!-- Session Beans -->
          ????? <session >
          ???????? <description><![CDATA[Description for HelloWorld]]></description>
          ???????? <display-name>Name for HelloWorld</display-name>

          ???????? <ejb-name>HelloWorld</ejb-name>

          ???????? <home>com.interfaces.HelloWorldHome</home>
          ???????? <remote>com.interfaces.HelloWorld</remote>
          ???????? <ejb-class>com.ejb.HelloWorldSession</ejb-class>
          ???????? <session-type>Stateless</session-type>
          ???????? <transaction-type>Container</transaction-type>

          ????? </session>

          ???? <!--
          ?????? To add session beans that you have deployment descriptor info for, add
          ?????? a file to your XDoclet merge directory called session-beans.xml that contains
          ?????? the <session></session> markup for those beans.
          ???? -->

          ????? <!-- Entity Beans -->
          ???? <!--
          ?????? To add entity beans that you have deployment descriptor info for, add
          ?????? a file to your XDoclet merge directory called entity-beans.xml that contains
          ?????? the <entity></entity> markup for those beans.
          ???? -->

          ????? <!-- Message Driven Beans -->
          ???? <!--
          ?????? To add message driven beans that you have deployment descriptor info for, add
          ?????? a file to your XDoclet merge directory called message-driven-beans.xml that contains
          ?????? the <message-driven></message-driven> markup for those beans.
          ???? -->

          ?? </enterprise-beans>

          ?? <!-- Relationships -->

          ?? <!-- Assembly Descriptor -->
          ???? <!--
          ?????? To specify your own assembly descriptor info here, add a file to your
          ?????? XDoclet merge directory called assembly-descriptor.xml that contains
          ?????? the <assembly-descriptor></assembly-descriptor> markup.
          ???? -->

          ?? <assembly-descriptor >
          ???? <!--
          ?????? To specify additional security-role elements, add a file in the merge
          ?????? directory called ejb-security-roles.xml that contains them.
          ???? -->

          ?? <!-- method permissions -->
          ???? <!--
          ?????? To specify additional method-permission elements, add a file in the merge
          ?????? directory called ejb-method-permissions.ent that contains them.
          ???? -->

          ?? <!-- transactions -->
          ???? <!--
          ?????? To specify additional container-transaction elements, add a file in the merge
          ?????? directory called ejb-container-transactions.ent that contains them.
          ???? -->

          ?? <!-- finder transactions -->

          ?? <!-- message destinations -->
          ???? <!--
          ?????? To specify additional message-destination elements, add a file in the merge
          ?????? directory called ejb-message-destinations.ent that contains them.
          ???? -->

          ?? <!-- exclude list -->
          ???? <!--
          ?????? To specify an exclude-list element, add a file in the merge directory
          ?????? called ejb-exclude-list.xml that contains it.
          ???? -->
          ?? </assembly-descriptor>
          </ejb-jar>
          //////////////////////////////////////////////////////////////////////////////分割線///////////////////////////////////////////////////////////////////////////
          weblogic-ejb-jar.xml
          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN" "

          <weblogic-ejb-jar>
          ?<description><![CDATA[Generated by XDoclet]]></description>
          ?? <weblogic-enterprise-bean>
          ????? <ejb-name>HelloWorld</ejb-name>
          ????? <stateless-session-descriptor>
          ????? </stateless-session-descriptor>
          ????? <reference-descriptor>
          ????? </reference-descriptor>

          ????? <jndi-name>ejb/HelloWorld</jndi-name>
          ?? </weblogic-enterprise-bean>
          <!--
          To add enterprise beans that you have deployment descriptor info for, add
          a file to your XDoclet merge directory called weblogic-enterprise-beans.xml that contains
          the <weblogic-enterprise-bean></weblogic-enterprise-bean> markup for those beans.
          -->

          ?<!--
          ?To add a security-role-assignment section, add
          ?a file to your XDoclet merge directory called weblogic-security-role-assignment.xml that contains
          ?the <security-role-assignment></security-role-assignment> markup.
          ?-->?

          ?<!--
          ?To add a run-as-role-assignment section, add
          ?a file to your XDoclet merge directory called weblogic-run-as-role-assignment.xml that contains
          ?the <run-as-role-assignment></run-as-role-assignment> markup.
          ?-->
          </weblogic-ejb-jar>
          ////////////////////////////////////////////////////////////////////////分割線///////////////////////////////////////////////////////////////////////////////////
          打成JIA包部署到WEBLOGIC服務器。
          最后是調用代碼:
          package com;

          import java.rmi.RemoteException;
          import java.util.Properties;
          ?
          import javax.ejb.CreateException;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;
          ?
          import com.interfaces.HelloWorld;
          import com.interfaces.HelloWorldHome;
          import javax.rmi.PortableRemoteObject;

          public class EJBTest {

          ???? /**
          ????? * @param args
          ???? */
          ???? public static void main(String[] args) throws Exception {
          ???????? // TODO 自動生成方法存根
          ???????? Properties properties=new Properties();
          ???????? properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
          ???????? properties.setProperty(Context.PROVIDER_URL,"t3://localhost:7001");
          ????????
          ???????? Context context;
          ???????? try {
          ???????????? context = new InitialContext(properties);
          ???????????? HelloWorldHome hwh=(HelloWorldHome)context.lookup("ejb/HelloWorld");
          ???????????? HelloWorld hw=hwh.create();
          ???????????? String s=hw.getMessage();
          ???????????? System.out.println(s);
          ???????? } catch (NamingException e) {
          ???????????? // TODO 自動生成 catch 塊
          ???????????? e.printStackTrace();
          ???????? } catch (RemoteException e) {
          ???????????? // TODO 自動生成 catch 塊
          ???????????? e.printStackTrace();
          ???????? } catch (CreateException e) {
          ???????????? // TODO 自動生成 catch 塊
          ???????????? e.printStackTrace();
          ???????? }
          ??? ? /*Properties properties=new Properties();
          ???????? properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
          ???????? properties.setProperty(Context.PROVIDER_URL,"t3://localhost:7001");
          ??? ? Context context = new InitialContext(properties);
          ??? ? Object obj = context.lookup("ejb/HelloWorld");
          ??? ? HelloWorldHome home = (HelloWorldHome)PortableRemoteObject.narrow(obj,HelloWorldHome.class );
          ??? ? HelloWorld hello = home.create();
          ??? ? System.out.println(hello.getMessage());*/
          ???? }?
          ?}

          部署EJB

          1. ??????? MyEclipse >Add and Remove Project Deployments

          2. ??????? 點擊 add ,添加部署服務器 weblogic 。

          雖然能使用了,但還是有很多地方不太明白。慢慢進步咯!

          posted on 2006-08-09 11:18 KanIT 閱讀(1490) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 清徐县| 中卫市| 浠水县| 辉南县| 三门峡市| 岗巴县| 广丰县| 东城区| 文成县| 嘉峪关市| 枣庄市| 剑阁县| 伊宁市| 银川市| 栾城县| 宁武县| 栖霞市| 明水县| 蒙城县| 太仓市| 方山县| 大理市| 从化市| 乐业县| 中宁县| 湟源县| 兰考县| 彰化县| 新丰县| 广南县| 涟源市| 隆回县| 丹阳市| 呼玛县| 遂宁市| 锡林浩特市| 嘉荫县| 汉川市| 襄垣县| 南宁市| 孟州市|