Saturday, August 4, 2007
Hacked By Godzilla - MS32DLL.dll.vbs - wscript.exe
Creates the following files:[DRIVE LETTER]:\MS32DLL.dll.vbs[DRIVE LETTER]:\MS32DLL.dll.vbs[DRIVE LETTER]:\autorun.infNote: %Windir% is a variable that refers to the Windows installation folder. By default, this is C:\Windows (Windows 95/98/Me/XP) or C:\Winnt (Windows NT/2000).
Adds the value:“MS32DLL” = “%Windir%\MS32DLL.dll.vbs” to the registry subkey:HKEY_LOCAL_MACHINE \SOFTWARE \Microsoft \Windows \CurrentVersion \Runso that it runs every time Windows starts.
Adds the value:“Window Title” = “Hacked by[REMOVED]” to the registry subkey:HKEY_CURRENT_USER \Software \Microsoft \Internet Explorer \Mainto modify title in Internet Explorer.
Attempts to copy itself to removable drives and create registry entries every 200 seconds.
Information above was taken from Symantec website.
If your computer affected by “Hacked by Godzilla - MS32DLL.dll.vbs” worms:-
Your Internet Explorer title will end with “Hacked by Godzilla”
You might not able to open any of your drive thru double click (you still able to open/explore using right click -> explore)
How to remove “Hacked by Godzilla - MS32DLL.dll.vbs” (VBS.Zodgila) worm?
Open Task Manager ( Right click on your taskbar and click “Task Manager” )
Click on Processes tab and select “wscript.exe” and click “End Process” button. (Remember to remove all wscript.exe)
Go to My Computer, Click on Tools -> Folder Options, click on View tab
Under Advance settings,check “Show Hidden files and folders“,uncheck “Hide extensions for known file types“,uncheck “Hide protected operating system files (Recommended)”and click “OK” button
Go to C:\WINDOWS or C:\WINNT and delete file MS32DLL.dll.vbs
Now go to all your drive in your computer, and delete autorun.inf and MS32DLL.dll.vbs including your USB Drive and Floppy disk. All the autorun.inf and MS32DLL.dll.vbs file is located at the root directory of your drive, ex: c:\MS32DLL.dll.vbs, d:\MS32DLL.dll.vbs …
To access your drive, Go to My Computer, right click on the drive and select “Explore”
Next we are going to clean your registry record. Click Start -> Run, type regedit
Go to HKEY_LOCAL_MACHINE \Software \Microsoft \Windows \Current Version \Run and delete MS32DLL (right click on it and select delete)
Now we are going to disable CD Autorun, Go to HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Cdrom look for Autorun and double click on it and enter 0 as it’s DWORD value
You can skip this steps if you do not wish to disable CD Autorun feature. But Hacked By Godzilla worm spread when CD Autorun is ON.
Go to HKEY_CURRENT_USER \Software \Microsoft \Internet Explorer \Main and delete “Window Title” which has it’s value of “Hacked by Godzilla“
Now go back to My Computer, Click on Tools -> Folder Options, click on View tab
Under Advance settings,uncheck “Show Hidden files and folders“,check “Hide extensions for known file types“,check “Hide protected operating system files (Recommended)”and click “OK” button
Empty your Recycle Bin.
Restart your PC and your PC should be clean from Hacked by Godzilla now
EJB
EJB
IntelliJ IDEA features rich support for EJB development. Supporting EJB specifications from 1.x to 3.0 and leveraging it through all its features, from coding assistance to refactoring,
IntelliJ IDEA stands for the weapon of choice for developing EJB applications.
IntelliJ IDEA leverages all EJB in the dedicated module type — the EJB Module, which lets you handle EJB and relevant objects (ejb-jar.xml and other descriptors, EJB security and EJB deployment settings, etc.) under one functional entity. This simplifies EJB applications development, debugging and deployment.
EJB 3.0 specific features
IntelliJ IDEA fully supports annotation mechanism for creating EJB, and Interceptors, with automatic code generation, completion and dedicated binding editor.
EJB persistence support is powered with generating of persistence mapping from entity beans, Hibernate or JDBC source and the visual Persistence diagram builder that lets you get the complete picture of how your persistence entities relate one to another.
Additionally, IntelliJ IDEA supports entity listeners and Embeddable Enterprise Beans.
For your existing EJB projects (versions 1.x and 2.x), IntelliJ IDEA provides the migration to EJB 3.0 that includes:
- Converting EJB environment access
- Rebuilding EJB deployment descriptors
- Transforming EJB interfaces
- Turning Entity Beans into Container Managed Persistence
General EJB features
IntelliJ IDEA eliminates routine work through generating stub code for entity EJB, session EJB, message EJB and other EJB types, CMP EJB fields and EJB relationships. Dedicated context editors also help modify EJB and their properties.
IntelliJ IDEA automatically builds standard EJB deployment packages either in JAR or exploded directory format and automatically generates appropriate EJB XML descriptors for all EJB included in the module (ejb-jar.xml).
EJB-aware coding assistance
IntelliJ IDEA leverages code completion for both EJB code and descriptor files and also supports
EJB error highlighting: IntelliJ IDEA continuously checks your EJB source code for EJB specification compliance, so that all possible inconsistencies are immediately detected and highlighted in the editor.
EJB intention actions and quick fixes: For most EJB errors detected in your code, IntelliJ IDEA will provide you with the ability to automatically correct the erroneous code by showing an intention action light bulb in the editor that expands into a list of possible corrections.
Powerful EJB-aware refactorings
All global refactorings, like Rename, Change Method Signature, etc., are aware of the EJB specification and will therefore correct all necessary references in your code so that your EJB structure is not broken. Refactorings also apply to all XML descriptors to ensure the total integrity.
JBoss performance testing
JBoss Remoting Performance Benchmark Report
This performance benchmark report will cover three separate areas of performance related to JBoss Remoting. Section 3 (All transports - speed results will cover basic performance when making synchronous invocations from a single client to a server and will include results for (1) all of the JBoss Remoting transports, (2) two raw Java transports, and (3) two Spring Remoting transports.[1] Section 4 (All JBoss Remoting transports - all invocation types) will cover performance differences among the various JBoss Remoting transports when making different types of client to server invocations (i.e. synchronous and asynchronous). Section 5 (All transports - scalability) will cover how well the JBoss Remoting transports, raw Java transports, and Spring Remoting transports scale as more clients are added.
This report is NOT intended to indicate how fast different transports are in absolute terms, but to compare speed and scalability of transports relative to one another. The tests were run on laptops and the results might not be indicative of performance levels achievable in a production environment. However, since all tests in each group were run on the same hardware, using the same environment and test scenario, the results should be sufficient for side by side comparisons. All the test result data are included at the end of this report along with instructions on how to reproduce the test runs in any other environment.
Since there is a limited amount of space within the graphs for full descriptions of the transports and test scenarios, the abbreviations are explained here.
socket_java: JBoss Remoting using the socket transport and default Java serialization
socket_jboss: JBoss Remoting using the socket transport and JBoss serialization
rmi_java: JBoss Remoting using the rmi transport and default Java serialization
rmi_jboss: JBoss Remoting using the rmi transport and JBoss serialization
http_java: JBoss Remoting using the http transport and default Java serialization
http_jboss: JBoss Remoting using the http transport and JBoss serialization
multiplex_java: JBoss Remoting using the multiplex transport and default Java serialization
multiplex_jboss: JBoss Remoting using the multiplex transport and JBoss serialization
raw_socket: uses straight Java Socket API with Java serialization
raw_rmi: uses straight Java RMI API with Java serialization
spring_rmi: Spring Remoting using the Spring rmi transport
spring_http: Spring Remoting using the Spring http transport
In the first performance test a single client continuously makes synchronous invocations on a single server. This test shows how quickly the transport can make remote invocations when not under load (basically showing raw data transfer speed). Three test runs were executed for each transport, and the averages are given in the following graph.

The graph shows that the JBoss Remoting socket transport with JBoss Serialization is able to make the largest number of requests per second, followed by the raw rmi and raw socket transports (which use the Java API directly and not a remoting framework).
The second performance test also consists of a single client making invocations on a single server, but the test runs span two dimensions: transport and invocation type. The transports exercised in this case are the JBoss Remoting transports, and the invocation types are the following:
Multi-threaded sync: uses 10 threads to make concurrent synchronous invocations from the client to the server. Is very similar in load to using 10 individual clients.
Async - client side: uses single threaded client to make asynchronous invocations from the client to the server. The calling thread will hand off the invocation to a client side pool of worker threads that make the actual client to server invocation.
Single threaded sync: uses single threaded client to make synchronous invocations from the client to the server.
Async - server side: uses single threaded client to make asynchronous invocations from the client to the server. The calling thread will make the actual network call to the server, where the invocation payload will be handed off to a worker thread pool where it will be picked up for processing.
The following graph indicates how long it took each JBoss Remoting transport to make 100,000 client to server invocations for each invocation type. The lower the time, the faster the combination of transport and invocation type.

The results show that the JBoss Remoting socket transport with JBoss Serialization was the fastest transport over all the different invocation types.
The final performance test is designed to indicate how well the various transports scale in response to increased load from additional clients. Each client uses a single thread to make 100,000 synchronous invocations on the server. The following graphs indicate the total number of invocations per second processed by the server as it services up to thirty clients. The numbers are averaged over three runs. For the sake of readability the results are partitioned by serialization type. [2][3]


Several phenomena may be observed in these graphs.
Since the cpu is kept at close to 100% utilization in these tests (except, perhaps, in the case of a small number of clients, depending on the speed of the hardware), the ideal in scalability would be for the total number of invocations processed by the server to remain flat as the number of clients increases, indicating that there is no overhead cost for additional clients. Nearly every transport/serialization combination shows the same pattern of an initial spike (until the cpu is saturated, presumably) followed by a gentle decline from 10 to 20 clients and a smaller decline from 20 to 30 clients. For example, the performance of the JBoss Remoting socket transport with Java serialization declines 6.6% from 10 to 20 clients and 3.2% from 20 to 30 clients. The most significant exception is the JBoss Remoting transport with JBoss serialization, which remains nearly flat as the number of clients increases from 5 to 30, decreasing by only 2.1%.
When using Java serialization none of the Remoting framework transports, JBoss or Spring, achieve the performance of the raw socket and raw rmi transports. However, the JBoss Remoting socket transport with JBoss serialization outperforms both of the raw transports at 10 clients and beyond.
The JBoss Remoting socket transport with Java serialization and the Spring rmi transport show almost identical results. The JBoss Remoting http transport with Java serialization and the Spring http transport show nearly identical results as well.
Among all of the Remoting framework transports, the JBoss Remoting socket transport with JBoss serialization is the clear favorite in these tests.
All the performance tests run for this report have the same basic structure and most share the same base code (the most notable exception being the Spring Remoting http transport, which requires a web container for server side deployment). All tests have one or more clients, each of which starts by creating a callback server and then sending the total number of invocations it intends to make. The server will then create a call tracker that will manage the test invocations as they come in from that client, ensuring that all intended invocations are received without duplicates. The server will also create a client to call back on the callback server created within that client instance.
Once the client and server have been fully initialized with their initial configuration data, the client will begin its loop to make test invocations. The number of test invocations is configurable, but for this report, the clients each make 100,000 test invocations. The payload size for each invocation is configurable as well, but for this report will be approximately 1024 bytes (plus size of payload wrapper for each transport). The time it takes the client to make all its test invocations is the main result captured for this report. When the call tracker on the server side has received all the invocations from its associated client, it will call back on that client (actually the client's callback server) and send the number of test invocations it received and number of duplicate test invocations, if any. This will indicate test run completion from the client's perspective.
All the transport tests (except the Spring Remoting http transport) are executed using the JBoss JRunit test framework. This means that each test run can be executed within ant as a junit task, which will call on a JRunit test driver which will spawn one or more client test instances and a server test instance. All configuration information (as seen below) can be modified within the JBoss Remoting build.xml file and tests can be executed via running the JBoss Remoting ant script. All the performance test source code can be found within the org.jboss.test.remoting.performance package of the JBoss Remoting project. Everything needed to run all the transport tests are included within the JBoss Remoting project (except a web container, which is needed for the Spring Remoting http transport tests).
The first two tests (speed test for all transports and invocation type tests) were run in the following environment.
Hardware: Dell Inspiron 8600, Intel Pentium processor 1.69GHz, 2GB RAM
Operating System: Microsoft Windows XP Professional (Version 2002, Service Pack 2)
Java Virtual Machine: Sun, Java HotSpot(TM) Client VM (build 1.5.0_03-b07, mixed mode, sharing)
Software:
JBoss Remoting 2.0.0.GA
Spring 1.2.8
Tomcat 5.5.17 (for Spring Remoting http transport tests)
Test script configuration:
numofcalls = 100000
payloadsize = 1024
numofclients = 1
The third test (scalability) was run in the following environment.
Hardware: Dell Inspiron 9400, Intel Core Duo T2400 processor 1.83GHz, 2GB RAM
Operating System: Microsoft Windows XP Professional (Version 2002, Service Pack 2)
Java Virtual Machine: Sun, Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
Software:
JBoss Remoting 2.0.0.GA
Spring 1.2.8
Tomcat 5.5.17 (for Spring Remoting http transport tests)
Test script configuration:
numofcalls = 100000
payloadsize = 1024
numofclients = 1, 5, 10, 20, 30
The test result data including all the junit result files (in xml format) and the MS Excel spreadsheet used to capture raw result data, calculate averages, and generate graphs can be found within test_results.zip.
[1] It was not possible to test the Spring Remoting hessian and burlap transports as the versions shipped with 1.2.8 of Spring do not support sending of Externalizable objects, which is what the test payload object implements.
[2] The raw_rmi and raw_socket transports use only Java serialization. They are included in the JBoss serialization table to aid in comparison.
[3] The spring transports use only Java serialization. They are included in the JBoss serialization table to aid in comparison.
| |
|
Wednesday, July 11, 2007
Business Rule Engine
Getting Started With the Java Rule Engine API (JSR 94): Toward Rule-Based Applications
For many mission-critical applications, the process of automating business policies, procedures, and business logic is simply too dynamic to manage effectively as application source code. Using business rules can help you develop more agile applications. The Business Rules Group defines a business rule as a statement that defines or constrains some aspect of the business; a business rule is intended to assert business structure or to control or influence the business's behavior. A rule engine evaluates and executes rules, which are expressed as if-then statements. The power of business rules lies in their ability both to separate knowledge from its implementation logic and to be changed without changing source code. The specification for the Java Rule Engine API (JSR 94), developed through the Java Community Process (JCP) program, defines a Java runtime API for rule engines by providing a simple API to access a rule engine from a Java Platform, Standard Edition (Java SE, formerly known as J2SE) or a Java Platform, Enterprise Edition (Java EE, formerly known as J2EE) Java technology client. This article provides an overview of JSR 94 and discusses how to fit business rule technology into Java technology applications. Sample code gives a flavor of the effort involved in developing rule-based applications. Introduction Many business applications have to deal with the dynamic changes of market economics. For example, applications for use in the insurance and banking industries must be able to accommodate the inevitable market changes that no one can predict or plan for during design. A solution is to have a rule engine, which is basically a set of tools that enable business analysts and developers to build decision logic based on an organization's data. The rule engine applies rules and actions as defined by end users without affecting how the application runs. The application is built to deal with the rules, which are designed separately. Examples of rule engines include Drools, Fair Isaac Blaze Advisor, ILOG JRules, and Jess, to name a few. The lack of standards, however, may be a major factor in deterring businesses from using rule-based applications. Most rule engines have proprietary APIs, making them difficult to integrate with applications. If a rule engine is no longer supported and the business decides to adopt another rule engine, most of the application code will need to be rewritten. JSR 94 is an attempt to standardize rule engine implementations for Java technology. The four rule engines mentioned earlier support JSR 94. JSR 94 provides guidelines for the rule administration and rule runtime APIs, but it defines no guidelines for what language to use to define the rules and actions. Efforts are under way to standardize a common rule language, including the Rule Markup Language (RuleML). Rule Engines The underlying idea of a rule engine is to externalize the business or application logic. A rule engine can be viewed as a sophisticated interpreter of if-then statements. The if-then statements are the rules. A rule is composed of two parts, a condition and an action: When the condition is met, the action is executed. The if portion contains conditions (such as Rule engines should be used for applications with highly dynamic business logic and for applications that allow end users to author business rules. A rule engine is a great tool for efficient decision making because it can make decisions based on thousands of facts quickly, reliably, and repeatedly. The When, Where, and Why of Rule Engines Rule engines are used in applications to replace and manage some of the business logic. They are best used in applications where the business logic is too dynamic to be managed at the source code level -- that is, where a change in a business policy needs to be immediately reflected in the application. Applications in domains such as insurance (for example, insurance rating), financial services (loans, fraud detection, claims routing and management), government (application process and tax calculations), telecom customer care and billing (promotions for long distance calls that needs to be integrated into the billing system), ecommerce (personalizing the user's experience), and so on benefit greatly from using rule engines. Rule-based applications communicate with the rule engine by passing in the set of rules to be executed. Then, the application can inspect the results and either display them to the end user or perform further processing. The rule engine determines when to evaluate each rule based on the input required for the rule as well as the results obtained from the evaluation of previous rules. You do not need to specify the order or the dependencies of the rules. In a Java EE enterprise application, for example, rules can fit into applications such as the following:
Adopting a rule-based approach for your applications has the following advantages:
These benefits, however, are not without cost. As with any tool, the decision to integrate a rule engine into your application should be based on cost versus benefits. The cost includes the learning curve and the effort involved in building an interface between the application and the rule engine. In addition, different rule engines use different format and syntax for defining rules. Therefore, if an organization decides to move from one rule engine to another, business analysts and developers must learn and understand the operation of yet another tool. JSR 94 JSR 94 defines a simple API to access a rule engine from a Java SE or Java EE client. It provides APIs to
Note that JSR 94 does not standardize the following:
In other words, it doesn't standardize the semantics of rule execution. JSR 94 Architecture The APIs are defined in two main packages:
The JSR 94 Expert Group made the decision to have two separate packages to reinforce the distinction between (1) executing a rule execution set that an administrator API has previously loaded and registered into the runtime environment and (2) the dynamic loading and execution of external resources (which can be performed only by using the Rules Administrator API). In addition, the separation allows a more fine-grained control of the user population, permitting some users to execute rules but not to administer them. The Rules Administrator API This API uses the
The Runtime Client API This API provides access to vendor implementations of the Rule Engine API, in a way similar to Java DataBase Connectivity (JDBC) software. Vendors expose their rule engine implementations to clients through the At the heart of this API is the
The Runtime Client API's high-level capabilities are the following:
The JSR 94 Reference Implementation Because the JSR 94 reference implementation is built as a wrapper over the Jess rule engine, you will need Jess 6.1a3 or later in order to work with the reference implementation. Jess, which stands for Java Expert System Shell, is a rule engine and a scripting environment. Note that Jess is not freeware: It can be licensed for commercial use, and it is available for academic use. The JSR 94 reference implementation license is governed under the Jess license agreement. The Jess language and scripting environment evolved from the CLIPS expert system shell, which was initially developed by NASA. The CLIPS system language syntax and structure are similar to the LISP functional programming language. To test the JSR 94 reference implementation, do the following:
If all goes well, you will see output similar to the following. This output was generated by the sample application that we will discuss next.
Sample Application To get a flavor of the effort involved in using the Java Rule Engine API, Code Sample 1 shows an example that comes with the reference implementation; the output above was generated from this sample application. This example loads a set of rules from an external XML resource file. The source code is fully commented. This example demonstrates the life cycle of developing applications using the Java Rule Engine API, and it shows several usage scenarios. Code Sample 1: RuleExample.java
The rules loaded in this example are part of the use cases that come with the JSR 94 Technology Compatibility Kit (TCK). The rules are written in Jess. If you are familiar with a functional programming language such as Lisp or Haskell then the Jess code will be familiar. Note that other rule engines, such as Drools, have adopted XML syntax for describing rules. Code Sample 2 shows the rules file. The definition of a rule execution set is not within the scope of JSR 94. The implementation given in this file is written for the reference implementation. A rule engine vendor verifying its rule engine should modify this file to match the vendor's specific needs. This rule execution set will be invoked by the TCK in a stateless manner. The rule execution set must have support for the following business object model:
The rule execution set has the following definition:
Rule 1: If the customer's credit limit is greater than the invoice amount and the status of the invoice is "unpaid," then decrement the credit limit with the invoice amount and set the status of the invoice to "paid." Note that additional physical rules may be defined to accomplish the requirements mentioned earlier. The rule execution set has the following semantics. Input:
The rule execution should produce the following output:
Code Sample 2: rules.xml
Conclusion Business rule technology provides a solution to manage dynamic business logic. You can use rule engines in both the application tier to manage dynamic business logic and in the presentation tier to customize the page flow. JSR 94 provides a vendor-neutral Java SE or Java EE interface to access a rule engine. You can create agile enterprise applications by combining Java EE and business rule technology, managing the business behavior outside the source code. JSR 94 is an attempt to standardize rules engine implementations for Java technology. The specification provides guidelines on how to implement the Runtime Client and Rules Administrator APIs as well as guidelines on how developers can integrate a rules engine into an application by means of an API -- without limiting how rules and actions should be created or what language the developer should use. As with any tool, the decision to integrate a rule engine into your application should be based on cost versus benefits. But as JSR 94 gains momentum, application servers may start offering JDBC-like support for multiple vendor implementations of the API, just as they provide support for multiple databases. |